@codedrifters/configulator 0.0.345 → 0.0.346
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 +70 -5
- package/lib/index.d.ts +71 -6
- package/lib/index.js +195 -129
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +194 -129
- package/lib/index.mjs.map +1 -1
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -245,6 +245,7 @@ __export(index_exports, {
|
|
|
245
245
|
DEFAULT_PROGRESS_FILES_FORMAT: () => DEFAULT_PROGRESS_FILES_FORMAT,
|
|
246
246
|
DEFAULT_PROGRESS_FILES_STALE_AFTER_HOURS: () => DEFAULT_PROGRESS_FILES_STALE_AFTER_HOURS,
|
|
247
247
|
DEFAULT_PROGRESS_FILES_STATE_DIR: () => DEFAULT_PROGRESS_FILES_STATE_DIR,
|
|
248
|
+
DEFAULT_REQUIREMENT_CATEGORY_DIRS: () => DEFAULT_REQUIREMENT_CATEGORY_DIRS,
|
|
248
249
|
DEFAULT_REQUIRE_PRODUCT_CONTEXT: () => DEFAULT_REQUIRE_PRODUCT_CONTEXT,
|
|
249
250
|
DEFAULT_RESOLVED_ISSUE_DEFAULTS: () => DEFAULT_RESOLVED_ISSUE_DEFAULTS,
|
|
250
251
|
DEFAULT_SAMPLE_COMPILER_OPTIONS: () => DEFAULT_SAMPLE_COMPILER_OPTIONS,
|
|
@@ -2013,6 +2014,19 @@ function assertValidBundlePathPatterns(value) {
|
|
|
2013
2014
|
}
|
|
2014
2015
|
|
|
2015
2016
|
// src/agent/bundles/paths.ts
|
|
2017
|
+
var DEFAULT_REQUIREMENT_CATEGORY_DIRS = Object.freeze({
|
|
2018
|
+
business: "business",
|
|
2019
|
+
functional: "functional",
|
|
2020
|
+
nonFunctional: "non-functional",
|
|
2021
|
+
technical: "technical",
|
|
2022
|
+
architecturalDecisions: "architectural-decisions",
|
|
2023
|
+
security: "security",
|
|
2024
|
+
data: "data",
|
|
2025
|
+
integration: "integration",
|
|
2026
|
+
operational: "operational",
|
|
2027
|
+
ux: "ux",
|
|
2028
|
+
multiTenancy: "multi-tenancy"
|
|
2029
|
+
});
|
|
2016
2030
|
var DEFAULT_AGENT_PATHS = Object.freeze({
|
|
2017
2031
|
docsRoot: "docs/src/content/docs",
|
|
2018
2032
|
researchRoot: "docs/research",
|
|
@@ -2024,7 +2038,8 @@ var DEFAULT_AGENT_PATHS = Object.freeze({
|
|
|
2024
2038
|
peopleRoot: "docs/src/content/docs/profiles/people",
|
|
2025
2039
|
companiesRoot: "docs/src/content/docs/profiles/companies",
|
|
2026
2040
|
softwareRoot: "docs/src/content/docs/profiles/software",
|
|
2027
|
-
industriesRoot: "docs/src/content/docs/profiles/industries"
|
|
2041
|
+
industriesRoot: "docs/src/content/docs/profiles/industries",
|
|
2042
|
+
requirementCategoryDirs: DEFAULT_REQUIREMENT_CATEGORY_DIRS
|
|
2028
2043
|
});
|
|
2029
2044
|
function resolveAgentPaths(paths) {
|
|
2030
2045
|
const docsRoot = paths?.docsRoot ?? DEFAULT_AGENT_PATHS.docsRoot;
|
|
@@ -2038,6 +2053,20 @@ function resolveAgentPaths(paths) {
|
|
|
2038
2053
|
const companiesRoot = paths?.companiesRoot ?? `${profilesRoot}/companies`;
|
|
2039
2054
|
const softwareRoot = paths?.softwareRoot ?? `${profilesRoot}/software`;
|
|
2040
2055
|
const industriesRoot = paths?.industriesRoot ?? `${profilesRoot}/industries`;
|
|
2056
|
+
const categoryOverrides = paths?.requirementCategoryDirs;
|
|
2057
|
+
const requirementCategoryDirs = {
|
|
2058
|
+
business: categoryOverrides?.business ?? DEFAULT_REQUIREMENT_CATEGORY_DIRS.business,
|
|
2059
|
+
functional: categoryOverrides?.functional ?? DEFAULT_REQUIREMENT_CATEGORY_DIRS.functional,
|
|
2060
|
+
nonFunctional: categoryOverrides?.nonFunctional ?? DEFAULT_REQUIREMENT_CATEGORY_DIRS.nonFunctional,
|
|
2061
|
+
technical: categoryOverrides?.technical ?? DEFAULT_REQUIREMENT_CATEGORY_DIRS.technical,
|
|
2062
|
+
architecturalDecisions: categoryOverrides?.architecturalDecisions ?? DEFAULT_REQUIREMENT_CATEGORY_DIRS.architecturalDecisions,
|
|
2063
|
+
security: categoryOverrides?.security ?? DEFAULT_REQUIREMENT_CATEGORY_DIRS.security,
|
|
2064
|
+
data: categoryOverrides?.data ?? DEFAULT_REQUIREMENT_CATEGORY_DIRS.data,
|
|
2065
|
+
integration: categoryOverrides?.integration ?? DEFAULT_REQUIREMENT_CATEGORY_DIRS.integration,
|
|
2066
|
+
operational: categoryOverrides?.operational ?? DEFAULT_REQUIREMENT_CATEGORY_DIRS.operational,
|
|
2067
|
+
ux: categoryOverrides?.ux ?? DEFAULT_REQUIREMENT_CATEGORY_DIRS.ux,
|
|
2068
|
+
multiTenancy: categoryOverrides?.multiTenancy ?? DEFAULT_REQUIREMENT_CATEGORY_DIRS.multiTenancy
|
|
2069
|
+
};
|
|
2041
2070
|
return {
|
|
2042
2071
|
docsRoot,
|
|
2043
2072
|
researchRoot,
|
|
@@ -2049,7 +2078,8 @@ function resolveAgentPaths(paths) {
|
|
|
2049
2078
|
peopleRoot,
|
|
2050
2079
|
companiesRoot,
|
|
2051
2080
|
softwareRoot,
|
|
2052
|
-
industriesRoot
|
|
2081
|
+
industriesRoot,
|
|
2082
|
+
requirementCategoryDirs
|
|
2053
2083
|
};
|
|
2054
2084
|
}
|
|
2055
2085
|
|
|
@@ -6493,7 +6523,7 @@ function buildScanBusinessModelsSkill(paths, issueDefaults) {
|
|
|
6493
6523
|
"Optional extensions in the issue body:",
|
|
6494
6524
|
"- `plan: <path>` \u2014 path to the industry-discovery plan file that",
|
|
6495
6525
|
" cleared this industry for downstream research (e.g.",
|
|
6496
|
-
|
|
6526
|
+
` \`${paths.industriesRoot}/plans/<slug>.plan.md\`)`,
|
|
6497
6527
|
"- `sources: <list>` \u2014 additional authorized input paths",
|
|
6498
6528
|
"- `exclude: <segment list>` \u2014 segments already covered to skip",
|
|
6499
6529
|
"- `slug: <kebab-case>` \u2014 override the derived industry slug",
|
|
@@ -6893,15 +6923,15 @@ function buildCompanyProfileAnalystSubAgent(paths, issueDefaults, tier) {
|
|
|
6893
6923
|
"",
|
|
6894
6924
|
"| Placeholder | Meaning | Default |",
|
|
6895
6925
|
"|-------------|---------|---------|",
|
|
6896
|
-
|
|
6926
|
+
`| \`<COMPANY_ROOT>\` | Root folder for company profiles | \`${paths.companiesRoot}/\` |`,
|
|
6897
6927
|
"| `<PROFILES_DIR>` | Final company profile files | `<COMPANY_ROOT>/profiles/` |",
|
|
6898
6928
|
"| `<NOTES_DIR>` | Research-notes files from Phase 1 | `<COMPANY_ROOT>/notes/` |",
|
|
6899
6929
|
"| `<ANALYSIS_DIR>` | Segment-level competitive-analysis documents from Phase 6 | `<COMPANY_ROOT>/analysis/` |",
|
|
6900
6930
|
"| `<COMPANY_SLUG>` | Short kebab-case slug identifying the company | derived from the company name |",
|
|
6901
6931
|
"| `<SEGMENT_SLUG>` | Short kebab-case slug identifying the industry segment | derived from the segment name |",
|
|
6902
6932
|
`| \`<BUSINESS_MODELS_ROOT>\` | Where existing business-model canvases live (consumed by Phase 4) | \`${paths.docsRoot}/industry-research/\` |`,
|
|
6903
|
-
|
|
6904
|
-
|
|
6933
|
+
`| \`<PEOPLE_PROFILES_DIR>\` | Where existing people profiles live (for duplicate detection during followup) | \`${paths.peopleRoot}/profiles/\` |`,
|
|
6934
|
+
`| \`<SOFTWARE_PROFILES_DIR>\` | Where existing software profiles live (for duplicate detection during followup) | \`${paths.softwareRoot}/profiles/\` |`,
|
|
6905
6935
|
"",
|
|
6906
6936
|
`If \`${paths.docsRoot}/project-context.md\` specifies a different company-research`,
|
|
6907
6937
|
"tree (for example by reusing the research-pipeline deliverables",
|
|
@@ -7724,8 +7754,8 @@ function buildProfileCompanySkill(paths, issueDefaults) {
|
|
|
7724
7754
|
`If the project has no override in \`${paths.docsRoot}/project-context.md\` or`,
|
|
7725
7755
|
"`agentConfig.rules`, outputs land under:",
|
|
7726
7756
|
"",
|
|
7727
|
-
|
|
7728
|
-
|
|
7757
|
+
`- \`${paths.companiesRoot}/notes/<slug>.notes.md\``,
|
|
7758
|
+
`- \`${paths.companiesRoot}/profiles/<slug>.md\``,
|
|
7729
7759
|
"",
|
|
7730
7760
|
"## Steps",
|
|
7731
7761
|
"",
|
|
@@ -7930,7 +7960,7 @@ function buildAnalyzeSegmentSkill(paths, issueDefaults) {
|
|
|
7930
7960
|
`If the project has no override in \`${paths.docsRoot}/project-context.md\` or`,
|
|
7931
7961
|
"`agentConfig.rules`, outputs land under:",
|
|
7932
7962
|
"",
|
|
7933
|
-
|
|
7963
|
+
`- \`${paths.companiesRoot}/analysis/<segment-slug>.md\``,
|
|
7934
7964
|
"",
|
|
7935
7965
|
"## Blocking Rule",
|
|
7936
7966
|
"",
|
|
@@ -8362,7 +8392,7 @@ function buildCustomerProfileAnalystSubAgent(paths, issueDefaults, tier) {
|
|
|
8362
8392
|
"| `<COMPETITORS_DIR>` | Per-archetype competitor analyses | `<CUSTOMER_ROOT>/competitors/` |",
|
|
8363
8393
|
"| `<COMPETITORS_PAGE>` | One-archetype competitor-analysis page | `<COMPETITORS_DIR>/<ARCHETYPE_SLUG>.md` |",
|
|
8364
8394
|
"| `<DISCOVERY_DIR>` | Discovery reports written during Phase 1 | `<researchRoot>/customer/` |",
|
|
8365
|
-
|
|
8395
|
+
`| \`<MATRIX_FILE>\` | Shared software-profile feature-matrix file | \`${paths.softwareRoot}/feature-matrix.md\` |`,
|
|
8366
8396
|
"| `<SCOPE_SLUG>` | Short kebab-case slug identifying the discovery scope | derived from the discover issue |",
|
|
8367
8397
|
"| `<ARCHETYPE_SLUG>` | Short kebab-case slug identifying one archetype | derived from the profile issue |",
|
|
8368
8398
|
"",
|
|
@@ -8995,7 +9025,7 @@ function buildAnalyzeCustomerCompetitorsSkill(paths, issueDefaults) {
|
|
|
8995
9025
|
"",
|
|
8996
9026
|
"Optional extensions:",
|
|
8997
9027
|
"- `matrix_file: <path>` \u2014 override for the shared feature-matrix",
|
|
8998
|
-
|
|
9028
|
+
` file. Defaults to \`${paths.softwareRoot}/feature-matrix.md\`.`,
|
|
8999
9029
|
"",
|
|
9000
9030
|
"## Default Paths",
|
|
9001
9031
|
"",
|
|
@@ -10841,7 +10871,7 @@ function buildIndustryDiscoveryAnalystSubAgent(paths, issueDefaults) {
|
|
|
10841
10871
|
"",
|
|
10842
10872
|
"| Placeholder | Meaning | Default |",
|
|
10843
10873
|
"|-------------|---------|---------|",
|
|
10844
|
-
|
|
10874
|
+
`| \`<INDUSTRY_ROOT>\` | Root folder for all industry-discovery outputs | \`${paths.industriesRoot}/\` |`,
|
|
10845
10875
|
"| `<CANDIDATES_DIR>` | Candidate-list files (Phase 1) | `<INDUSTRY_ROOT>/candidates/` |",
|
|
10846
10876
|
"| `<EVALUATIONS_DIR>` | Evaluation files with per-candidate scores (Phase 2) | `<INDUSTRY_ROOT>/evaluations/` |",
|
|
10847
10877
|
"| `<PLANS_DIR>` | Plan files summarizing downstream research (Phase 3) | `<INDUSTRY_ROOT>/plans/` |",
|
|
@@ -11162,9 +11192,9 @@ function buildDiscoverIndustriesSkill(paths, issueDefaults) {
|
|
|
11162
11192
|
`If the project has no override in \`${paths.docsRoot}/project-context.md\` or`,
|
|
11163
11193
|
"`agentConfig.rules`, outputs land under:",
|
|
11164
11194
|
"",
|
|
11165
|
-
|
|
11166
|
-
|
|
11167
|
-
|
|
11195
|
+
`- \`${paths.industriesRoot}/candidates/<slug>.candidates.md\``,
|
|
11196
|
+
`- \`${paths.industriesRoot}/evaluations/<slug>.evaluation.md\``,
|
|
11197
|
+
`- \`${paths.industriesRoot}/plans/<slug>.plan.md\``,
|
|
11168
11198
|
"",
|
|
11169
11199
|
"## Steps",
|
|
11170
11200
|
"",
|
|
@@ -16795,13 +16825,13 @@ function buildPeopleProfileAnalystSubAgent(paths, issueDefaults, tier) {
|
|
|
16795
16825
|
"",
|
|
16796
16826
|
"| Placeholder | Meaning | Default |",
|
|
16797
16827
|
"|-------------|---------|---------|",
|
|
16798
|
-
|
|
16828
|
+
`| \`<PEOPLE_ROOT>\` | Root folder for person profiles | \`${paths.peopleRoot}/\` |`,
|
|
16799
16829
|
"| `<PROFILES_DIR>` | Final person profile files | `<PEOPLE_ROOT>/profiles/` |",
|
|
16800
16830
|
"| `<NOTES_DIR>` | Research-notes files from Phase 1 | `<PEOPLE_ROOT>/notes/` |",
|
|
16801
16831
|
"| `<PERSON_SLUG>` | Short kebab-case slug identifying the person | derived from the person's name |",
|
|
16802
|
-
|
|
16803
|
-
|
|
16804
|
-
|
|
16832
|
+
`| \`<COMPANIES_DIR>\` | Where existing company profiles live (for cross-references and duplicate detection during followup) | \`${paths.companiesRoot}/profiles/\` |`,
|
|
16833
|
+
`| \`<SOFTWARE_DIR>\` | Where existing software profiles live (for cross-references and duplicate detection during followup) | \`${paths.softwareRoot}/profiles/\` |`,
|
|
16834
|
+
`| \`<MEETINGS_DIR>\` | Where meeting notes live (for cross-references) | \`${paths.meetingsRoot}/\` |`,
|
|
16805
16835
|
"",
|
|
16806
16836
|
`If \`${paths.docsRoot}/project-context.md\` specifies a different people-research`,
|
|
16807
16837
|
"tree or cross-reference target, prefer that. Otherwise fall back to",
|
|
@@ -17373,14 +17403,14 @@ function buildProfilePersonSkill(paths, issueDefaults) {
|
|
|
17373
17403
|
`If the project has no override in \`${paths.docsRoot}/project-context.md\` or`,
|
|
17374
17404
|
"`agentConfig.rules`, outputs land under:",
|
|
17375
17405
|
"",
|
|
17376
|
-
|
|
17377
|
-
|
|
17406
|
+
`- \`${paths.peopleRoot}/notes/<slug>.notes.md\``,
|
|
17407
|
+
`- \`${paths.peopleRoot}/profiles/<slug>.md\``,
|
|
17378
17408
|
"",
|
|
17379
17409
|
"Cross-references are resolved against:",
|
|
17380
17410
|
"",
|
|
17381
|
-
|
|
17382
|
-
|
|
17383
|
-
|
|
17411
|
+
`- \`${paths.companiesRoot}/profiles/\``,
|
|
17412
|
+
`- \`${paths.softwareRoot}/profiles/\``,
|
|
17413
|
+
`- \`${paths.meetingsRoot}/\``,
|
|
17384
17414
|
"",
|
|
17385
17415
|
"## Steps",
|
|
17386
17416
|
"",
|
|
@@ -21139,7 +21169,7 @@ function buildRequirementsAnalystSubAgent(paths, issueDefaults) {
|
|
|
21139
21169
|
`| \`<COMPETITIVE_ROOT>\` | Competitive analysis docs | \`${paths.docsRoot}/business-strategy/competitive/\` |`,
|
|
21140
21170
|
`| \`<PRODUCT_ROOT>\` | Product roadmap / entity taxonomy | \`${paths.docsRoot}/product/\` |`,
|
|
21141
21171
|
`| \`<MEETINGS_ROOT>\` | Meeting extracts | \`${paths.docsRoot}/research/meetings/\` |`,
|
|
21142
|
-
`| \`<RESEARCH_REQUIREMENTS_ROOT>\` | Scan reports and proposals | \`${paths.
|
|
21172
|
+
`| \`<RESEARCH_REQUIREMENTS_ROOT>\` | Scan reports and proposals | \`${paths.researchRequirementsRoot}/\` |`,
|
|
21143
21173
|
`| \`<REQUIREMENTS_ROOT>\` | Final requirement documents (owned by requirements-writer) | \`${paths.requirementsRoot}/\` |`,
|
|
21144
21174
|
"| `<PREFIX>` | Project-specific requirement ID prefix | e.g. `VRTX`, `ACME` |",
|
|
21145
21175
|
"",
|
|
@@ -21560,7 +21590,7 @@ function buildRequirementsAnalystBundle(paths = DEFAULT_AGENT_PATHS, issueDefaul
|
|
|
21560
21590
|
var requirementsAnalystBundle = buildRequirementsAnalystBundle();
|
|
21561
21591
|
|
|
21562
21592
|
// src/agent/bundles/requirements-writer.ts
|
|
21563
|
-
var
|
|
21593
|
+
var templateBr = (paths) => `---
|
|
21564
21594
|
title: "BR-NNN: [Business Requirement Title]"
|
|
21565
21595
|
---
|
|
21566
21596
|
|
|
@@ -21629,9 +21659,9 @@ Other business requirements, external factors, or organizational decisions this
|
|
|
21629
21659
|
|
|
21630
21660
|
## Traceability
|
|
21631
21661
|
|
|
21632
|
-
- **Decomposes into:** [FR-NNN](
|
|
21633
|
-
- **Constrained by:** [NFR-NNN](
|
|
21634
|
-
- **Related:** [SEC-NNN](
|
|
21662
|
+
- **Decomposes into:** [FR-NNN](../${paths.requirementCategoryDirs.functional}/FR-NNN-slug.md), [FR-NNN](../${paths.requirementCategoryDirs.functional}/FR-NNN-slug.md)
|
|
21663
|
+
- **Constrained by:** [NFR-NNN](../${paths.requirementCategoryDirs.nonFunctional}/NFR-NNN-slug.md)
|
|
21664
|
+
- **Related:** [SEC-NNN](../${paths.requirementCategoryDirs.security}/SEC-NNN-slug.md)
|
|
21635
21665
|
- **Depends on (cross-tier):** [XX-NNN](../category/XX-NNN-slug.md) \u2014 [platform/industry requirement this depends on]
|
|
21636
21666
|
- **Enables (cross-tier):** [XX-NNN](../category/XX-NNN-slug.md) \u2014 [customer-workflow/consumer-app requirement this enables]
|
|
21637
21667
|
|
|
@@ -21667,7 +21697,7 @@ Other business requirements, external factors, or organizational decisions this
|
|
|
21667
21697
|
|---|---|---|
|
|
21668
21698
|
| YYYY-MM-DD | [Name] | Initial draft |
|
|
21669
21699
|
`;
|
|
21670
|
-
var
|
|
21700
|
+
var templateFr = (paths) => `---
|
|
21671
21701
|
title: "FR-NNN: [Functional Requirement Title]"
|
|
21672
21702
|
---
|
|
21673
21703
|
|
|
@@ -21768,9 +21798,9 @@ What data is created, read, updated, or deleted by this feature. Reference DR do
|
|
|
21768
21798
|
|
|
21769
21799
|
## Traceability
|
|
21770
21800
|
|
|
21771
|
-
- **Implements:** [BR-NNN](
|
|
21772
|
-
- **Constrained by:** [NFR-NNN](
|
|
21773
|
-
- **Related:** [INT-NNN](
|
|
21801
|
+
- **Implements:** [BR-NNN](../${paths.requirementCategoryDirs.business}/BR-NNN-slug.md)
|
|
21802
|
+
- **Constrained by:** [NFR-NNN](../${paths.requirementCategoryDirs.nonFunctional}/NFR-NNN-slug.md)
|
|
21803
|
+
- **Related:** [INT-NNN](../${paths.requirementCategoryDirs.integration}/INT-NNN-slug.md)
|
|
21774
21804
|
- **Depends on (cross-tier):** [XX-NNN](../category/XX-NNN-slug.md) \u2014 [platform/industry requirement this depends on]
|
|
21775
21805
|
- **Enables (cross-tier):** [XX-NNN](../category/XX-NNN-slug.md) \u2014 [customer-workflow/consumer-app requirement this enables]
|
|
21776
21806
|
|
|
@@ -21806,7 +21836,7 @@ What data is created, read, updated, or deleted by this feature. Reference DR do
|
|
|
21806
21836
|
|---|---|---|
|
|
21807
21837
|
| YYYY-MM-DD | [Name] | Initial draft |
|
|
21808
21838
|
`;
|
|
21809
|
-
var
|
|
21839
|
+
var templateNfr = (paths) => `---
|
|
21810
21840
|
title: "NFR-NNN: [Non-Functional Requirement Title]"
|
|
21811
21841
|
---
|
|
21812
21842
|
|
|
@@ -21868,9 +21898,9 @@ How compliance with this requirement will be monitored in production. Reference
|
|
|
21868
21898
|
|
|
21869
21899
|
## Traceability
|
|
21870
21900
|
|
|
21871
|
-
- **Supports:** [BR-NNN](
|
|
21872
|
-
- **Constrains:** [FR-NNN](
|
|
21873
|
-
- **Monitored by:** [OPS-NNN](
|
|
21901
|
+
- **Supports:** [BR-NNN](../${paths.requirementCategoryDirs.business}/BR-NNN-slug.md)
|
|
21902
|
+
- **Constrains:** [FR-NNN](../${paths.requirementCategoryDirs.functional}/FR-NNN-slug.md)
|
|
21903
|
+
- **Monitored by:** [OPS-NNN](../${paths.requirementCategoryDirs.operational}/OPS-NNN-slug.md)
|
|
21874
21904
|
- **Depends on (cross-tier):** [XX-NNN](../category/XX-NNN-slug.md) \u2014 [platform/industry requirement this depends on]
|
|
21875
21905
|
- **Enables (cross-tier):** [XX-NNN](../category/XX-NNN-slug.md) \u2014 [customer-workflow/consumer-app requirement this enables]
|
|
21876
21906
|
|
|
@@ -21906,7 +21936,7 @@ How compliance with this requirement will be monitored in production. Reference
|
|
|
21906
21936
|
|---|---|---|
|
|
21907
21937
|
| YYYY-MM-DD | [Name] | Initial draft |
|
|
21908
21938
|
`;
|
|
21909
|
-
var
|
|
21939
|
+
var templateTr = (paths) => `---
|
|
21910
21940
|
title: "TR-NNN: [Technical Requirement Title]"
|
|
21911
21941
|
---
|
|
21912
21942
|
|
|
@@ -22019,9 +22049,9 @@ Other technologies this choice interacts with, and any known compatibility const
|
|
|
22019
22049
|
|
|
22020
22050
|
## Traceability
|
|
22021
22051
|
|
|
22022
|
-
- **Justified by:** [ADR-NNN](
|
|
22023
|
-
- **Supports:** [FR-NNN](
|
|
22024
|
-
- **Constrained by:** [NFR-NNN](
|
|
22052
|
+
- **Justified by:** [ADR-NNN](../${paths.requirementCategoryDirs.architecturalDecisions}/ADR-NNN-slug.md)
|
|
22053
|
+
- **Supports:** [FR-NNN](../${paths.requirementCategoryDirs.functional}/FR-NNN-slug.md)
|
|
22054
|
+
- **Constrained by:** [NFR-NNN](../${paths.requirementCategoryDirs.nonFunctional}/NFR-NNN-slug.md)
|
|
22025
22055
|
- **Depends on (cross-tier):** [XX-NNN](../category/XX-NNN-slug.md) \u2014 [platform/industry requirement this depends on]
|
|
22026
22056
|
- **Enables (cross-tier):** [XX-NNN](../category/XX-NNN-slug.md) \u2014 [customer-workflow/consumer-app requirement this enables]
|
|
22027
22057
|
|
|
@@ -22057,7 +22087,7 @@ Other technologies this choice interacts with, and any known compatibility const
|
|
|
22057
22087
|
|---|---|---|
|
|
22058
22088
|
| YYYY-MM-DD | [Name] | Initial draft |
|
|
22059
22089
|
`;
|
|
22060
|
-
var
|
|
22090
|
+
var templateAdr = (paths) => `---
|
|
22061
22091
|
title: "ADR-NNN: [Decision Title]"
|
|
22062
22092
|
---
|
|
22063
22093
|
|
|
@@ -22147,8 +22177,8 @@ High-level guidance for implementing this decision. Detailed implementation goes
|
|
|
22147
22177
|
|
|
22148
22178
|
## Traceability
|
|
22149
22179
|
|
|
22150
|
-
- **Supports:** [BR-NNN](
|
|
22151
|
-
- **Implemented by:** [TR-NNN](
|
|
22180
|
+
- **Supports:** [BR-NNN](../${paths.requirementCategoryDirs.business}/BR-NNN-slug.md)
|
|
22181
|
+
- **Implemented by:** [TR-NNN](../${paths.requirementCategoryDirs.technical}/TR-NNN-slug.md)
|
|
22152
22182
|
- **Related:** [ADR-NNN](ADR-NNN-slug.md)
|
|
22153
22183
|
- **Depends on (cross-tier):** [XX-NNN](../category/XX-NNN-slug.md) \u2014 [platform/industry requirement this depends on]
|
|
22154
22184
|
- **Enables (cross-tier):** [XX-NNN](../category/XX-NNN-slug.md) \u2014 [customer-workflow/consumer-app requirement this enables]
|
|
@@ -22185,7 +22215,7 @@ High-level guidance for implementing this decision. Detailed implementation goes
|
|
|
22185
22215
|
|---|---|---|
|
|
22186
22216
|
| YYYY-MM-DD | [Name] | Initial draft |
|
|
22187
22217
|
`;
|
|
22188
|
-
var
|
|
22218
|
+
var templateSec = (paths) => `---
|
|
22189
22219
|
title: "SEC-NNN: [Security Requirement Title]"
|
|
22190
22220
|
---
|
|
22191
22221
|
|
|
@@ -22257,10 +22287,10 @@ How compliance with this security requirement will be verified.
|
|
|
22257
22287
|
|
|
22258
22288
|
## Traceability
|
|
22259
22289
|
|
|
22260
|
-
- **Protects:** [FR-NNN](
|
|
22261
|
-
- **Constrained by:** [NFR-NNN](
|
|
22262
|
-
- **Implements:** [BR-NNN](
|
|
22263
|
-
- **Related data:** [DR-NNN](
|
|
22290
|
+
- **Protects:** [FR-NNN](../${paths.requirementCategoryDirs.functional}/FR-NNN-slug.md)
|
|
22291
|
+
- **Constrained by:** [NFR-NNN](../${paths.requirementCategoryDirs.nonFunctional}/NFR-NNN-slug.md)
|
|
22292
|
+
- **Implements:** [BR-NNN](../${paths.requirementCategoryDirs.business}/BR-NNN-slug.md)
|
|
22293
|
+
- **Related data:** [DR-NNN](../${paths.requirementCategoryDirs.data}/DR-NNN-slug.md)
|
|
22264
22294
|
- **Depends on (cross-tier):** [XX-NNN](../category/XX-NNN-slug.md) \u2014 [platform/industry requirement this depends on]
|
|
22265
22295
|
- **Enables (cross-tier):** [XX-NNN](../category/XX-NNN-slug.md) \u2014 [customer-workflow/consumer-app requirement this enables]
|
|
22266
22296
|
|
|
@@ -22296,7 +22326,7 @@ How compliance with this security requirement will be verified.
|
|
|
22296
22326
|
|---|---|---|
|
|
22297
22327
|
| YYYY-MM-DD | [Name] | Initial draft |
|
|
22298
22328
|
`;
|
|
22299
|
-
var
|
|
22329
|
+
var templateDr = (paths) => `---
|
|
22300
22330
|
title: "DR-NNN: [Data Requirement Title]"
|
|
22301
22331
|
---
|
|
22302
22332
|
|
|
@@ -22372,9 +22402,9 @@ How this data is classified and what handling rules apply based on that classifi
|
|
|
22372
22402
|
|
|
22373
22403
|
## Traceability
|
|
22374
22404
|
|
|
22375
|
-
- **Supports:** [FR-NNN](
|
|
22376
|
-
- **Protected by:** [SEC-NNN](
|
|
22377
|
-
- **Stored per:** [TR-NNN](
|
|
22405
|
+
- **Supports:** [FR-NNN](../${paths.requirementCategoryDirs.functional}/FR-NNN-slug.md)
|
|
22406
|
+
- **Protected by:** [SEC-NNN](../${paths.requirementCategoryDirs.security}/SEC-NNN-slug.md)
|
|
22407
|
+
- **Stored per:** [TR-NNN](../${paths.requirementCategoryDirs.technical}/TR-NNN-slug.md)
|
|
22378
22408
|
- **Depends on (cross-tier):** [XX-NNN](../category/XX-NNN-slug.md) \u2014 [platform/industry requirement this depends on]
|
|
22379
22409
|
- **Enables (cross-tier):** [XX-NNN](../category/XX-NNN-slug.md) \u2014 [customer-workflow/consumer-app requirement this enables]
|
|
22380
22410
|
|
|
@@ -22410,7 +22440,7 @@ How this data is classified and what handling rules apply based on that classifi
|
|
|
22410
22440
|
|---|---|---|
|
|
22411
22441
|
| YYYY-MM-DD | [Name] | Initial draft |
|
|
22412
22442
|
`;
|
|
22413
|
-
var
|
|
22443
|
+
var templateInt = (paths) => `---
|
|
22414
22444
|
title: "INT-NNN: [Integration Requirement Title]"
|
|
22415
22445
|
---
|
|
22416
22446
|
|
|
@@ -22503,9 +22533,9 @@ What happens when this integration is unavailable. How does the system degrade g
|
|
|
22503
22533
|
|
|
22504
22534
|
## Traceability
|
|
22505
22535
|
|
|
22506
|
-
- **Enables:** [FR-NNN](
|
|
22507
|
-
- **Constrained by:** [NFR-NNN](
|
|
22508
|
-
- **Secured by:** [SEC-NNN](
|
|
22536
|
+
- **Enables:** [FR-NNN](../${paths.requirementCategoryDirs.functional}/FR-NNN-slug.md)
|
|
22537
|
+
- **Constrained by:** [NFR-NNN](../${paths.requirementCategoryDirs.nonFunctional}/NFR-NNN-slug.md)
|
|
22538
|
+
- **Secured by:** [SEC-NNN](../${paths.requirementCategoryDirs.security}/SEC-NNN-slug.md)
|
|
22509
22539
|
- **Depends on (cross-tier):** [XX-NNN](../category/XX-NNN-slug.md) \u2014 [platform/industry requirement this depends on]
|
|
22510
22540
|
- **Enables (cross-tier):** [XX-NNN](../category/XX-NNN-slug.md) \u2014 [customer-workflow/consumer-app requirement this enables]
|
|
22511
22541
|
|
|
@@ -22541,7 +22571,7 @@ What happens when this integration is unavailable. How does the system degrade g
|
|
|
22541
22571
|
|---|---|---|
|
|
22542
22572
|
| YYYY-MM-DD | [Name] | Initial draft |
|
|
22543
22573
|
`;
|
|
22544
|
-
var
|
|
22574
|
+
var templateOps = (paths) => `---
|
|
22545
22575
|
title: "OPS-NNN: [Operational Requirement Title]"
|
|
22546
22576
|
---
|
|
22547
22577
|
|
|
@@ -22617,9 +22647,9 @@ If this applies to an existing system, document the current operational posture.
|
|
|
22617
22647
|
|
|
22618
22648
|
## Traceability
|
|
22619
22649
|
|
|
22620
|
-
- **Monitors:** [NFR-NNN](
|
|
22621
|
-
- **Supports:** [BR-NNN](
|
|
22622
|
-
- **Uses:** [TR-NNN](
|
|
22650
|
+
- **Monitors:** [NFR-NNN](../${paths.requirementCategoryDirs.nonFunctional}/NFR-NNN-slug.md)
|
|
22651
|
+
- **Supports:** [BR-NNN](../${paths.requirementCategoryDirs.business}/BR-NNN-slug.md)
|
|
22652
|
+
- **Uses:** [TR-NNN](../${paths.requirementCategoryDirs.technical}/TR-NNN-slug.md)
|
|
22623
22653
|
- **Depends on (cross-tier):** [XX-NNN](../category/XX-NNN-slug.md) \u2014 [platform/industry requirement this depends on]
|
|
22624
22654
|
- **Enables (cross-tier):** [XX-NNN](../category/XX-NNN-slug.md) \u2014 [customer-workflow/consumer-app requirement this enables]
|
|
22625
22655
|
|
|
@@ -22655,7 +22685,7 @@ If this applies to an existing system, document the current operational posture.
|
|
|
22655
22685
|
|---|---|---|
|
|
22656
22686
|
| YYYY-MM-DD | [Name] | Initial draft |
|
|
22657
22687
|
`;
|
|
22658
|
-
var
|
|
22688
|
+
var templateUx = (paths) => `---
|
|
22659
22689
|
title: "UX-NNN: [UX Requirement Title]"
|
|
22660
22690
|
---
|
|
22661
22691
|
|
|
@@ -22733,9 +22763,9 @@ Reference to the project's design system, component library, or style guide if o
|
|
|
22733
22763
|
|
|
22734
22764
|
## Traceability
|
|
22735
22765
|
|
|
22736
|
-
- **Enhances:** [FR-NNN](
|
|
22737
|
-
- **Constrained by:** [NFR-NNN](
|
|
22738
|
-
- **Supports:** [BR-NNN](
|
|
22766
|
+
- **Enhances:** [FR-NNN](../${paths.requirementCategoryDirs.functional}/FR-NNN-slug.md)
|
|
22767
|
+
- **Constrained by:** [NFR-NNN](../${paths.requirementCategoryDirs.nonFunctional}/NFR-NNN-slug.md)
|
|
22768
|
+
- **Supports:** [BR-NNN](../${paths.requirementCategoryDirs.business}/BR-NNN-slug.md)
|
|
22739
22769
|
- **Depends on (cross-tier):** [XX-NNN](../category/XX-NNN-slug.md) \u2014 [platform/industry requirement this depends on]
|
|
22740
22770
|
- **Enables (cross-tier):** [XX-NNN](../category/XX-NNN-slug.md) \u2014 [customer-workflow/consumer-app requirement this enables]
|
|
22741
22771
|
|
|
@@ -22771,7 +22801,7 @@ Reference to the project's design system, component library, or style guide if o
|
|
|
22771
22801
|
|---|---|---|
|
|
22772
22802
|
| YYYY-MM-DD | [Name] | Initial draft |
|
|
22773
22803
|
`;
|
|
22774
|
-
var
|
|
22804
|
+
var templateMt = (paths) => `---
|
|
22775
22805
|
title: "MT-NNN: [Multi-Tenancy Requirement Title]"
|
|
22776
22806
|
---
|
|
22777
22807
|
|
|
@@ -22850,9 +22880,9 @@ How the system prevents one tenant from degrading the experience of others.
|
|
|
22850
22880
|
|
|
22851
22881
|
## Traceability
|
|
22852
22882
|
|
|
22853
|
-
- **Implements:** [BR-NNN](
|
|
22854
|
-
- **Secured by:** [SEC-NNN](
|
|
22855
|
-
- **Constrained by:** [NFR-NNN](
|
|
22883
|
+
- **Implements:** [BR-NNN](../${paths.requirementCategoryDirs.business}/BR-NNN-slug.md)
|
|
22884
|
+
- **Secured by:** [SEC-NNN](../${paths.requirementCategoryDirs.security}/SEC-NNN-slug.md)
|
|
22885
|
+
- **Constrained by:** [NFR-NNN](../${paths.requirementCategoryDirs.nonFunctional}/NFR-NNN-slug.md)
|
|
22856
22886
|
- **Depends on (cross-tier):** [XX-NNN](../category/XX-NNN-slug.md) \u2014 [platform/industry requirement this depends on]
|
|
22857
22887
|
- **Enables (cross-tier):** [XX-NNN](../category/XX-NNN-slug.md) \u2014 [customer-workflow/consumer-app requirement this enables]
|
|
22858
22888
|
|
|
@@ -22923,7 +22953,7 @@ Use [\`_template-{PREFIX}.md\`](../templates/_template-{PREFIX}.md) for all new
|
|
|
22923
22953
|
- Every document must include YAML frontmatter with a \`title\` field
|
|
22924
22954
|
- Every document must include a \`## Traceability\` section
|
|
22925
22955
|
`;
|
|
22926
|
-
var
|
|
22956
|
+
var templateRequirementsReadme = (paths) => `---
|
|
22927
22957
|
title: "[Project Name] \u2014 Requirements Documentation"
|
|
22928
22958
|
---
|
|
22929
22959
|
|
|
@@ -22933,17 +22963,17 @@ This directory contains the structured requirements taxonomy for [Project Name].
|
|
|
22933
22963
|
|
|
22934
22964
|
| Category | Prefix | Directory | Purpose |
|
|
22935
22965
|
|---|---|---|---|
|
|
22936
|
-
| Business Requirements | BR | [
|
|
22937
|
-
| Functional Requirements | FR | [
|
|
22938
|
-
| Non-Functional Requirements | NFR | [
|
|
22939
|
-
| Technical Requirements | TR | [
|
|
22940
|
-
| Architectural Decisions | ADR | [
|
|
22941
|
-
| Security & Compliance | SEC | [
|
|
22942
|
-
| Data Requirements | DR | [
|
|
22943
|
-
| Integration Requirements | INT | [
|
|
22944
|
-
| Operational Requirements | OPS | [
|
|
22945
|
-
| UX Requirements | UX | [
|
|
22946
|
-
| Multi-Tenancy & Licensing | MT | [
|
|
22966
|
+
| Business Requirements | BR | [\`${paths.requirementCategoryDirs.business}/\`](${paths.requirementCategoryDirs.business}/README.md) | Strategic intent, stakeholders, success metrics |
|
|
22967
|
+
| Functional Requirements | FR | [\`${paths.requirementCategoryDirs.functional}/\`](${paths.requirementCategoryDirs.functional}/README.md) | User stories, flows, acceptance criteria |
|
|
22968
|
+
| Non-Functional Requirements | NFR | [\`${paths.requirementCategoryDirs.nonFunctional}/\`](${paths.requirementCategoryDirs.nonFunctional}/README.md) | Performance, scalability, availability targets |
|
|
22969
|
+
| Technical Requirements | TR | [\`${paths.requirementCategoryDirs.technical}/\`](${paths.requirementCategoryDirs.technical}/README.md) | Technology choices, framework decisions |
|
|
22970
|
+
| Architectural Decisions | ADR | [\`${paths.requirementCategoryDirs.architecturalDecisions}/\`](${paths.requirementCategoryDirs.architecturalDecisions}/README.md) | Context, decision, consequences (standard ADR format) |
|
|
22971
|
+
| Security & Compliance | SEC | [\`${paths.requirementCategoryDirs.security}/\`](${paths.requirementCategoryDirs.security}/README.md) | Auth, encryption, audit, regulatory |
|
|
22972
|
+
| Data Requirements | DR | [\`${paths.requirementCategoryDirs.data}/\`](${paths.requirementCategoryDirs.data}/README.md) | Data models, retention, classification, RPO/RTO |
|
|
22973
|
+
| Integration Requirements | INT | [\`${paths.requirementCategoryDirs.integration}/\`](${paths.requirementCategoryDirs.integration}/README.md) | APIs, third-party systems, protocols |
|
|
22974
|
+
| Operational Requirements | OPS | [\`${paths.requirementCategoryDirs.operational}/\`](${paths.requirementCategoryDirs.operational}/README.md) | Deployment, monitoring, alerting, logging |
|
|
22975
|
+
| UX Requirements | UX | [\`${paths.requirementCategoryDirs.ux}/\`](${paths.requirementCategoryDirs.ux}/README.md) | Accessibility, responsiveness, i18n |
|
|
22976
|
+
| Multi-Tenancy & Licensing | MT | [\`${paths.requirementCategoryDirs.multiTenancy}/\`](${paths.requirementCategoryDirs.multiTenancy}/README.md) | Tenant isolation, feature gating, billing |
|
|
22947
22977
|
|
|
22948
22978
|
Each directory contains a \`README.md\` with detailed guidance on what belongs in that category (and what doesn't), common disambiguation tips, and project-specific context. When unsure where a requirement belongs, start with the category README.
|
|
22949
22979
|
|
|
@@ -23009,9 +23039,9 @@ Example:
|
|
|
23009
23039
|
\`\`\`markdown
|
|
23010
23040
|
## Traceability
|
|
23011
23041
|
|
|
23012
|
-
- **Implements:** [FR-001](
|
|
23013
|
-
- **Constrained by:** [NFR-001](
|
|
23014
|
-
- **Related:** [SEC-001](
|
|
23042
|
+
- **Implements:** [FR-001](../${paths.requirementCategoryDirs.functional}/FR-001-user-registration.md)
|
|
23043
|
+
- **Constrained by:** [NFR-001](../${paths.requirementCategoryDirs.nonFunctional}/NFR-001-uptime-sla.md)
|
|
23044
|
+
- **Related:** [SEC-001](../${paths.requirementCategoryDirs.security}/SEC-001-multi-tenant-auth.md)
|
|
23015
23045
|
\`\`\`
|
|
23016
23046
|
|
|
23017
23047
|
### Link Types
|
|
@@ -23405,35 +23435,70 @@ var WRITE_REQUIREMENT_EVALS_JSON = JSON.stringify(
|
|
|
23405
23435
|
null,
|
|
23406
23436
|
2
|
|
23407
23437
|
);
|
|
23408
|
-
|
|
23409
|
-
|
|
23410
|
-
|
|
23411
|
-
|
|
23412
|
-
|
|
23413
|
-
|
|
23414
|
-
|
|
23415
|
-
|
|
23416
|
-
|
|
23417
|
-
|
|
23418
|
-
|
|
23419
|
-
|
|
23420
|
-
|
|
23421
|
-
|
|
23422
|
-
|
|
23423
|
-
|
|
23424
|
-
|
|
23425
|
-
|
|
23426
|
-
|
|
23427
|
-
|
|
23428
|
-
|
|
23429
|
-
|
|
23430
|
-
|
|
23431
|
-
|
|
23432
|
-
|
|
23433
|
-
|
|
23434
|
-
|
|
23435
|
-
|
|
23436
|
-
|
|
23438
|
+
function buildRequirementsWriterReferenceFiles(paths) {
|
|
23439
|
+
return [
|
|
23440
|
+
{
|
|
23441
|
+
path: "_references/templates/_template-BR.md",
|
|
23442
|
+
content: templateBr(paths)
|
|
23443
|
+
},
|
|
23444
|
+
{
|
|
23445
|
+
path: "_references/templates/_template-FR.md",
|
|
23446
|
+
content: templateFr(paths)
|
|
23447
|
+
},
|
|
23448
|
+
{
|
|
23449
|
+
path: "_references/templates/_template-NFR.md",
|
|
23450
|
+
content: templateNfr(paths)
|
|
23451
|
+
},
|
|
23452
|
+
{
|
|
23453
|
+
path: "_references/templates/_template-TR.md",
|
|
23454
|
+
content: templateTr(paths)
|
|
23455
|
+
},
|
|
23456
|
+
{
|
|
23457
|
+
path: "_references/templates/_template-ADR.md",
|
|
23458
|
+
content: templateAdr(paths)
|
|
23459
|
+
},
|
|
23460
|
+
{
|
|
23461
|
+
path: "_references/templates/_template-SEC.md",
|
|
23462
|
+
content: templateSec(paths)
|
|
23463
|
+
},
|
|
23464
|
+
{
|
|
23465
|
+
path: "_references/templates/_template-DR.md",
|
|
23466
|
+
content: templateDr(paths)
|
|
23467
|
+
},
|
|
23468
|
+
{
|
|
23469
|
+
path: "_references/templates/_template-INT.md",
|
|
23470
|
+
content: templateInt(paths)
|
|
23471
|
+
},
|
|
23472
|
+
{
|
|
23473
|
+
path: "_references/templates/_template-OPS.md",
|
|
23474
|
+
content: templateOps(paths)
|
|
23475
|
+
},
|
|
23476
|
+
{
|
|
23477
|
+
path: "_references/templates/_template-UX.md",
|
|
23478
|
+
content: templateUx(paths)
|
|
23479
|
+
},
|
|
23480
|
+
{
|
|
23481
|
+
path: "_references/templates/_template-MT.md",
|
|
23482
|
+
content: templateMt(paths)
|
|
23483
|
+
},
|
|
23484
|
+
{
|
|
23485
|
+
path: "_references/templates/_template-category-README.md",
|
|
23486
|
+
content: TEMPLATE_CATEGORY_README
|
|
23487
|
+
},
|
|
23488
|
+
{
|
|
23489
|
+
path: "_references/templates/_template-requirements-README.md",
|
|
23490
|
+
content: templateRequirementsReadme(paths)
|
|
23491
|
+
},
|
|
23492
|
+
{
|
|
23493
|
+
path: "_references/standards-and-frameworks.md",
|
|
23494
|
+
content: STANDARDS_AND_FRAMEWORKS
|
|
23495
|
+
},
|
|
23496
|
+
{
|
|
23497
|
+
path: "evals/evals.json",
|
|
23498
|
+
content: WRITE_REQUIREMENT_EVALS_JSON
|
|
23499
|
+
}
|
|
23500
|
+
];
|
|
23501
|
+
}
|
|
23437
23502
|
function buildRequirementsWriterSubAgent(paths) {
|
|
23438
23503
|
return {
|
|
23439
23504
|
name: "requirements-writer",
|
|
@@ -23633,13 +23698,13 @@ function buildRequirementsWriterSubAgent(paths) {
|
|
|
23633
23698
|
"1. Write the requirement itself (FR, DR, INT, OPS, etc.) with full",
|
|
23634
23699
|
" detail.",
|
|
23635
23700
|
"2. Where the requirement needs a technology decision, add a note:",
|
|
23636
|
-
|
|
23701
|
+
` *"Technology selection pending \u2014 see [ADR-NNN](../${paths.requirementCategoryDirs.architecturalDecisions}/ADR-NNN-slug.md)"*.`,
|
|
23637
23702
|
"3. Create the corresponding ADR or TR as `Proposed` with options,",
|
|
23638
23703
|
" pros/cons, and recommendation.",
|
|
23639
23704
|
'4. In the ADR/TR open items, add: *"Human decision required.',
|
|
23640
23705
|
' Dependent requirements: [list]"*.',
|
|
23641
23706
|
"5. In the original requirement's open items, add a cross-reference:",
|
|
23642
|
-
|
|
23707
|
+
` *"Blocked by [ADR-NNN](../${paths.requirementCategoryDirs.architecturalDecisions}/ADR-NNN-slug.md) \u2014`,
|
|
23643
23708
|
' technology selection pending human review."*',
|
|
23644
23709
|
"",
|
|
23645
23710
|
"This creates a clear chain: the requirement is understood, the",
|
|
@@ -23726,9 +23791,9 @@ function buildRequirementsWriterSubAgent(paths) {
|
|
|
23726
23791
|
"```markdown",
|
|
23727
23792
|
"## Traceability",
|
|
23728
23793
|
"",
|
|
23729
|
-
|
|
23730
|
-
|
|
23731
|
-
|
|
23794
|
+
`- **Implements:** [BR-001](../${paths.requirementCategoryDirs.business}/BR-001-self-service-onboarding.md)`,
|
|
23795
|
+
`- **Constrained by:** [NFR-001](../${paths.requirementCategoryDirs.nonFunctional}/NFR-001-api-response-times.md)`,
|
|
23796
|
+
`- **Related:** [SEC-001](../${paths.requirementCategoryDirs.security}/SEC-001-authentication-framework.md)`,
|
|
23732
23797
|
"```",
|
|
23733
23798
|
"",
|
|
23734
23799
|
"### Link Types",
|
|
@@ -23788,7 +23853,7 @@ function buildRequirementsWriterSubAgent(paths) {
|
|
|
23788
23853
|
"",
|
|
23789
23854
|
"Number each item within its subsection. Assign a priority. Call out",
|
|
23790
23855
|
"interdependencies with open items in other documents using the",
|
|
23791
|
-
|
|
23856
|
+
`format: \`-> Depends on: [FR-001 Open Item #2](../${paths.requirementCategoryDirs.functional}/FR-001-slug.md#open-items)\`.`,
|
|
23792
23857
|
"",
|
|
23793
23858
|
"The `## Open Items` section is **not optional** \u2014 it appears in every",
|
|
23794
23859
|
'document, even if a subsection is empty (write "None identified.").',
|
|
@@ -24047,7 +24112,7 @@ function buildWriteRequirementSkill(paths, issueDefaults) {
|
|
|
24047
24112
|
context: "fork",
|
|
24048
24113
|
agent: "requirements-writer",
|
|
24049
24114
|
platforms: { cursor: { exclude: true } },
|
|
24050
|
-
referenceFiles:
|
|
24115
|
+
referenceFiles: buildRequirementsWriterReferenceFiles(paths),
|
|
24051
24116
|
instructions: [
|
|
24052
24117
|
"# Write Requirement",
|
|
24053
24118
|
"",
|
|
@@ -24359,7 +24424,7 @@ function buildRequirementsReviewerSubAgent(paths, issueDefaults) {
|
|
|
24359
24424
|
"1. **Full audit** \u2014 every requirement document under",
|
|
24360
24425
|
" `<REQUIREMENTS_ROOT>` across all categories",
|
|
24361
24426
|
"2. **Category audit** \u2014 every document in one category directory",
|
|
24362
|
-
|
|
24427
|
+
` (e.g., all FRs under \`<REQUIREMENTS_ROOT>/${paths.requirementCategoryDirs.functional}/\`)`,
|
|
24363
24428
|
"3. **Single document** \u2014 one specific requirement file",
|
|
24364
24429
|
"4. **Targeted check** \u2014 one or more checks from the catalog below,",
|
|
24365
24430
|
' run across the documents in scope (e.g., "check all traceability',
|
|
@@ -24787,7 +24852,7 @@ function buildRequirementsReviewerSubAgent(paths, issueDefaults) {
|
|
|
24787
24852
|
"",
|
|
24788
24853
|
"Each finding must cite the file path and the specific check that",
|
|
24789
24854
|
'produced it (e.g., "Check 4: Cross-Reference Integrity \u2014 target',
|
|
24790
|
-
|
|
24855
|
+
`file \`../${paths.requirementCategoryDirs.security}/SEC-007-audit-logs.md\` does not exist on`,
|
|
24791
24856
|
'disk").',
|
|
24792
24857
|
"",
|
|
24793
24858
|
"---",
|
|
@@ -26401,13 +26466,13 @@ function buildSoftwareProfileAnalystSubAgent(paths, issueDefaults, tier) {
|
|
|
26401
26466
|
"",
|
|
26402
26467
|
"| Placeholder | Meaning | Default |",
|
|
26403
26468
|
"|-------------|---------|---------|",
|
|
26404
|
-
|
|
26469
|
+
`| \`<SOFTWARE_ROOT>\` | Root folder for software profiles | \`${paths.softwareRoot}/\` |`,
|
|
26405
26470
|
"| `<PROFILES_DIR>` | Final software profile files | `<SOFTWARE_ROOT>/profiles/` |",
|
|
26406
26471
|
"| `<NOTES_DIR>` | Research-notes files from Phase 1 | `<SOFTWARE_ROOT>/notes/` |",
|
|
26407
26472
|
"| `<MATRIX_FILE>` | Shared feature-matrix file | `<SOFTWARE_ROOT>/feature-matrix.md` |",
|
|
26408
26473
|
"| `<PRODUCT_SLUG>` | Short kebab-case slug identifying the product | derived from the product name |",
|
|
26409
|
-
|
|
26410
|
-
|
|
26474
|
+
`| \`<COMPANY_PROFILES_DIR>\` | Where existing company profiles live (for duplicate detection during followup) | \`${paths.companiesRoot}/profiles/\` |`,
|
|
26475
|
+
`| \`<PEOPLE_PROFILES_DIR>\` | Where existing people profiles live (for duplicate detection during followup) | \`${paths.peopleRoot}/profiles/\` |`,
|
|
26411
26476
|
`| \`<BCM_DOC_ROOT>\` | Root folder for BCM capability-model documents (used by Phase 4 to locate capabilities) | \`${paths.bcmRoot}/\` |`,
|
|
26412
26477
|
"| `<BCM_CAPABILITY_MAP>` | Capability-map file that lists the L1/L2/L3 hierarchy | `<BCM_DOC_ROOT>/capability-map.md` |",
|
|
26413
26478
|
"| `<UNMAPPED_THRESHOLD>` | Minimum number of unmapped features on a single profile that triggers a `bcm:outline` follow-up for that feature cluster | `1` (every unmapped feature triggers a `bcm:outline`) |",
|
|
@@ -27077,9 +27142,9 @@ function buildProfileSoftwareSkill(paths, issueDefaults) {
|
|
|
27077
27142
|
`If the project has no override in \`${paths.docsRoot}/project-context.md\` or`,
|
|
27078
27143
|
"`agentConfig.rules`, outputs land under:",
|
|
27079
27144
|
"",
|
|
27080
|
-
|
|
27081
|
-
|
|
27082
|
-
|
|
27145
|
+
`- \`${paths.softwareRoot}/notes/<slug>.notes.md\``,
|
|
27146
|
+
`- \`${paths.softwareRoot}/profiles/<slug>.md\``,
|
|
27147
|
+
`- \`${paths.softwareRoot}/feature-matrix.md\` (shared across all products)`,
|
|
27083
27148
|
"",
|
|
27084
27149
|
"## Steps",
|
|
27085
27150
|
"",
|
|
@@ -27165,7 +27230,7 @@ function buildMapSoftwareSkill(paths, issueDefaults) {
|
|
|
27165
27230
|
`- \`${paths.bcmRoot}/\` \u2014 BCM capability-model documents`,
|
|
27166
27231
|
`- \`${paths.bcmRoot}/capability-map.md\` \u2014 capability map`,
|
|
27167
27232
|
"",
|
|
27168
|
-
|
|
27233
|
+
`and writes back to \`${paths.softwareRoot}/profiles/<slug>.md\` under the`,
|
|
27169
27234
|
"`## Capability Mapping` section only. No other section of the",
|
|
27170
27235
|
"profile is rewritten.",
|
|
27171
27236
|
"",
|
|
@@ -37821,6 +37886,7 @@ export const collections = {
|
|
|
37821
37886
|
DEFAULT_PROGRESS_FILES_FORMAT,
|
|
37822
37887
|
DEFAULT_PROGRESS_FILES_STALE_AFTER_HOURS,
|
|
37823
37888
|
DEFAULT_PROGRESS_FILES_STATE_DIR,
|
|
37889
|
+
DEFAULT_REQUIREMENT_CATEGORY_DIRS,
|
|
37824
37890
|
DEFAULT_REQUIRE_PRODUCT_CONTEXT,
|
|
37825
37891
|
DEFAULT_RESOLVED_ISSUE_DEFAULTS,
|
|
37826
37892
|
DEFAULT_SAMPLE_COMPILER_OPTIONS,
|