@aisdlc/core 1.3.1 → 1.3.2
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/dist/index.cjs +145 -19
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -6
- package/dist/index.d.ts +6 -6
- package/dist/index.js +145 -19
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -2088,6 +2088,7 @@ var TYPE_TO_SCHEMA_MAP = {
|
|
|
2088
2088
|
"security-requirement": "schemas/security/security-req.schema.json",
|
|
2089
2089
|
"threat-actor": "schemas/security/threat-actor.schema.json",
|
|
2090
2090
|
// Architecture
|
|
2091
|
+
"architecture-introduction": "schemas/architecture/introduction-and-goals.schema.json",
|
|
2091
2092
|
"architecture-decision-record": "schemas/architecture/adr.schema.json",
|
|
2092
2093
|
component: "schemas/architecture/component.schema.json",
|
|
2093
2094
|
// Safety
|
|
@@ -2131,6 +2132,7 @@ var PREFIX_TAXONOMY = [
|
|
|
2131
2132
|
["HAZ-", "hazard"],
|
|
2132
2133
|
["SAF-REQ-", "safety-requirement"],
|
|
2133
2134
|
["SAF-", "safety-requirement"],
|
|
2135
|
+
["ARCH-INTRO-", "architecture-introduction"],
|
|
2134
2136
|
["ADR-", "architecture-decision-record"],
|
|
2135
2137
|
["CMP-", "component"],
|
|
2136
2138
|
["MAN-USER-", "user-manual"],
|
|
@@ -3433,7 +3435,8 @@ function verifyTraceability(options = {}) {
|
|
|
3433
3435
|
});
|
|
3434
3436
|
}
|
|
3435
3437
|
}
|
|
3436
|
-
|
|
3438
|
+
const isArchIntro = frontmatter.type === "architecture-introduction" || frontmatter.id !== void 0 && String(frontmatter.id).trim().startsWith("ARCH-INTRO-");
|
|
3439
|
+
if (!isArchIntro && (relFile.includes("architecture/") || relFile.includes("06_runtime_view") || relFile.includes("08_security_concept") || relFile.includes("09_decisions"))) {
|
|
3437
3440
|
architectureViews.push({
|
|
3438
3441
|
file: relFile,
|
|
3439
3442
|
id: frontmatter.id ? String(frontmatter.id).trim() : void 0,
|
|
@@ -3522,6 +3525,14 @@ function verifyTraceability(options = {}) {
|
|
|
3522
3525
|
productTraces.push(...associatedHandoff.subgraph.abuseCases);
|
|
3523
3526
|
}
|
|
3524
3527
|
}
|
|
3528
|
+
for (const [artId, artEntry] of artifactMap.entries()) {
|
|
3529
|
+
if (artEntry.type === "architecture-introduction" || artId.startsWith("ARCH-INTRO-")) {
|
|
3530
|
+
const citedGoals = artEntry.frontmatter["cites-quality-goals"];
|
|
3531
|
+
if (Array.isArray(citedGoals) && citedGoals.includes(reqId)) {
|
|
3532
|
+
productTraces.push(artId);
|
|
3533
|
+
}
|
|
3534
|
+
}
|
|
3535
|
+
}
|
|
3525
3536
|
const validProductTraces = Array.from(
|
|
3526
3537
|
new Set(productTraces.filter((id) => artifactMap.has(id)))
|
|
3527
3538
|
);
|
|
@@ -7236,7 +7247,10 @@ function buildGraphElements(rootDir = process.cwd()) {
|
|
|
7236
7247
|
continue;
|
|
7237
7248
|
}
|
|
7238
7249
|
let layer = "product";
|
|
7239
|
-
if (id.startsWith("
|
|
7250
|
+
if (id.startsWith("ARCH-INTRO-") || type === "architecture-introduction") {
|
|
7251
|
+
type = "architecture-introduction";
|
|
7252
|
+
layer = "product";
|
|
7253
|
+
} else if (id.startsWith("JRN-") || type === "journey") {
|
|
7240
7254
|
type = "journey";
|
|
7241
7255
|
layer = "product";
|
|
7242
7256
|
} else if (id.startsWith("ACT-THREAT-") || type === "threat-actor") {
|
|
@@ -7329,16 +7343,18 @@ function buildGraphElements(rootDir = process.cwd()) {
|
|
|
7329
7343
|
const u = up.trim();
|
|
7330
7344
|
if (u && u !== "NINGUNO" && u !== "NONE") {
|
|
7331
7345
|
const isAbuse = u.startsWith("ABUSE-");
|
|
7346
|
+
const isArchIntro = u.startsWith("ARCH-INTRO-");
|
|
7347
|
+
const rel = isAbuse ? "mitigated-by" : isArchIntro ? "defines-goal" : "derives-from";
|
|
7332
7348
|
addEdge({
|
|
7333
7349
|
id: `edge-${u}-${r.id}`,
|
|
7334
7350
|
source: u,
|
|
7335
7351
|
target: r.id,
|
|
7336
|
-
label:
|
|
7337
|
-
relation:
|
|
7352
|
+
label: rel,
|
|
7353
|
+
relation: rel,
|
|
7338
7354
|
status
|
|
7339
7355
|
});
|
|
7340
7356
|
if (!nodeMap.has(u)) {
|
|
7341
|
-
const upType = u.startsWith("ACT-") ? "actor" : u.startsWith("UC-") ? "use-case" : u.startsWith("BR-") ? "business-rule" : u.startsWith("ABUSE-") ? "abuse-case" : "product";
|
|
7357
|
+
const upType = u.startsWith("ARCH-INTRO-") ? "architecture-introduction" : u.startsWith("ACT-") ? "actor" : u.startsWith("UC-") ? "use-case" : u.startsWith("BR-") ? "business-rule" : u.startsWith("ABUSE-") ? "abuse-case" : "product";
|
|
7342
7358
|
nodeMap.set(u, {
|
|
7343
7359
|
id: u,
|
|
7344
7360
|
label: u,
|
|
@@ -7436,7 +7452,80 @@ function buildGraphElements(rootDir = process.cwd()) {
|
|
|
7436
7452
|
}
|
|
7437
7453
|
for (const art of scannedArtifactsMap.values()) {
|
|
7438
7454
|
const fm = art.frontmatter;
|
|
7439
|
-
if (art.type === "
|
|
7455
|
+
if (art.type === "architecture-introduction") {
|
|
7456
|
+
const citedActors = Array.isArray(fm["cites-product-actors"]) ? fm["cites-product-actors"] : [];
|
|
7457
|
+
for (const actId of citedActors) {
|
|
7458
|
+
if (typeof actId === "string" && actId.trim()) {
|
|
7459
|
+
const a = actId.trim();
|
|
7460
|
+
if (!nodeMap.has(a)) {
|
|
7461
|
+
nodeMap.set(a, {
|
|
7462
|
+
id: a,
|
|
7463
|
+
label: a,
|
|
7464
|
+
title: a,
|
|
7465
|
+
type: "actor",
|
|
7466
|
+
layer: "product",
|
|
7467
|
+
status: "COMPLIANT"
|
|
7468
|
+
});
|
|
7469
|
+
}
|
|
7470
|
+
addEdge({
|
|
7471
|
+
id: `edge-${art.id}-${a}`,
|
|
7472
|
+
source: art.id,
|
|
7473
|
+
target: a,
|
|
7474
|
+
label: "identifies",
|
|
7475
|
+
relation: "identifies",
|
|
7476
|
+
status: "COMPLIANT"
|
|
7477
|
+
});
|
|
7478
|
+
}
|
|
7479
|
+
}
|
|
7480
|
+
const citedUcs = Array.isArray(fm["cites-use-cases"]) ? fm["cites-use-cases"] : [];
|
|
7481
|
+
for (const ucId of citedUcs) {
|
|
7482
|
+
if (typeof ucId === "string" && ucId.trim()) {
|
|
7483
|
+
const u = ucId.trim();
|
|
7484
|
+
if (!nodeMap.has(u)) {
|
|
7485
|
+
nodeMap.set(u, {
|
|
7486
|
+
id: u,
|
|
7487
|
+
label: u,
|
|
7488
|
+
title: u,
|
|
7489
|
+
type: "use-case",
|
|
7490
|
+
layer: "product",
|
|
7491
|
+
status: "COMPLIANT"
|
|
7492
|
+
});
|
|
7493
|
+
}
|
|
7494
|
+
addEdge({
|
|
7495
|
+
id: `edge-${art.id}-${u}`,
|
|
7496
|
+
source: art.id,
|
|
7497
|
+
target: u,
|
|
7498
|
+
label: "envisions",
|
|
7499
|
+
relation: "envisions",
|
|
7500
|
+
status: "COMPLIANT"
|
|
7501
|
+
});
|
|
7502
|
+
}
|
|
7503
|
+
}
|
|
7504
|
+
const citedGoals = Array.isArray(fm["cites-quality-goals"]) ? fm["cites-quality-goals"] : [];
|
|
7505
|
+
for (const qrId of citedGoals) {
|
|
7506
|
+
if (typeof qrId === "string" && qrId.trim()) {
|
|
7507
|
+
const q = qrId.trim();
|
|
7508
|
+
if (!nodeMap.has(q)) {
|
|
7509
|
+
nodeMap.set(q, {
|
|
7510
|
+
id: q,
|
|
7511
|
+
label: q,
|
|
7512
|
+
title: q,
|
|
7513
|
+
type: q.startsWith("SEC-REQ-") ? "security-requirement" : "requirement",
|
|
7514
|
+
layer: "requirement",
|
|
7515
|
+
status: "COMPLIANT"
|
|
7516
|
+
});
|
|
7517
|
+
}
|
|
7518
|
+
addEdge({
|
|
7519
|
+
id: `edge-${art.id}-${q}`,
|
|
7520
|
+
source: art.id,
|
|
7521
|
+
target: q,
|
|
7522
|
+
label: "defines-goal",
|
|
7523
|
+
relation: "defines-goal",
|
|
7524
|
+
status: "COMPLIANT"
|
|
7525
|
+
});
|
|
7526
|
+
}
|
|
7527
|
+
}
|
|
7528
|
+
} else if (art.type === "journey") {
|
|
7440
7529
|
const persona = typeof fm.persona === "string" ? fm.persona : typeof fm.actor === "string" ? fm.actor : void 0;
|
|
7441
7530
|
if (persona) {
|
|
7442
7531
|
if (!nodeMap.has(persona)) {
|
|
@@ -8285,6 +8374,7 @@ function renderDashboardHtml(graphData, metricsData, title = "AI-SDLC: Dashboard
|
|
|
8285
8374
|
<div class="tool-row">
|
|
8286
8375
|
<select id="type-filter" class="tool-select" onchange="filterType(this.value)">
|
|
8287
8376
|
<option value="all">All Typologies</option>
|
|
8377
|
+
<option value="architecture-introduction">Vision & Goals (ARCH-INTRO)</option>
|
|
8288
8378
|
<option value="journey">Journeys (JRN)</option>
|
|
8289
8379
|
<option value="actor">Actors (ACT)</option>
|
|
8290
8380
|
<option value="use-case">Use Cases (UC)</option>
|
|
@@ -8319,6 +8409,7 @@ function renderDashboardHtml(graphData, metricsData, title = "AI-SDLC: Dashboard
|
|
|
8319
8409
|
<div class="graph-legend">
|
|
8320
8410
|
<div class="legend-header">Node Typologies</div>
|
|
8321
8411
|
<div class="legend-items">
|
|
8412
|
+
<div class="legend-item"><span class="legend-dot" style="background:#0f766e; border:2px solid #2dd4bf;"></span><strong>Vision / Goals</strong> (ARCH-INTRO)</div>
|
|
8322
8413
|
<div class="legend-item"><span class="legend-dot" style="background:#581c87; border:2px solid #c084fc;"></span><strong>Journey</strong> (JRN)</div>
|
|
8323
8414
|
<div class="legend-item"><span class="legend-dot" style="background:#065f46; border:2px solid #34d399; border-radius:50%;"></span><strong>Actor</strong> (ACT)</div>
|
|
8324
8415
|
<div class="legend-item"><span class="legend-dot" style="background:#0369a1; border:2px solid #38bdf8;"></span><strong>Use Case</strong> (UC)</div>
|
|
@@ -8738,6 +8829,19 @@ function renderDashboardHtml(graphData, metricsData, title = "AI-SDLC: Dashboard
|
|
|
8738
8829
|
}
|
|
8739
8830
|
},
|
|
8740
8831
|
// Typology Styles
|
|
8832
|
+
{
|
|
8833
|
+
selector: 'node.type-architecture-introduction',
|
|
8834
|
+
style: {
|
|
8835
|
+
'shape': 'round-rectangle',
|
|
8836
|
+
'background-color': '#0f766e',
|
|
8837
|
+
'border-color': '#2dd4bf',
|
|
8838
|
+
'border-width': 3,
|
|
8839
|
+
'width': 92,
|
|
8840
|
+
'height': 44,
|
|
8841
|
+
'font-weight': 'bold',
|
|
8842
|
+
'text-max-width': '86px'
|
|
8843
|
+
}
|
|
8844
|
+
},
|
|
8741
8845
|
{
|
|
8742
8846
|
selector: 'node.type-journey',
|
|
8743
8847
|
style: {
|
|
@@ -8854,7 +8958,7 @@ function renderDashboardHtml(graphData, metricsData, title = "AI-SDLC: Dashboard
|
|
|
8854
8958
|
},
|
|
8855
8959
|
// Fallback Layer styles if type is missing
|
|
8856
8960
|
{
|
|
8857
|
-
selector: 'node.layer-product:not(.type-journey):not(.type-actor):not(.type-use-case):not(.type-usecase):not(.type-business-rule):not(.type-rule):not(.type-abuse-case):not(.type-threat-actor)',
|
|
8961
|
+
selector: 'node.layer-product:not(.type-architecture-introduction):not(.type-journey):not(.type-actor):not(.type-use-case):not(.type-usecase):not(.type-business-rule):not(.type-rule):not(.type-abuse-case):not(.type-threat-actor)',
|
|
8858
8962
|
style: { 'shape': 'diamond', 'background-color': '#0e7490', 'border-color': '#38bdf8', 'width': 50, 'height': 50 }
|
|
8859
8963
|
},
|
|
8860
8964
|
{
|
|
@@ -8883,6 +8987,10 @@ function renderDashboardHtml(graphData, metricsData, title = "AI-SDLC: Dashboard
|
|
|
8883
8987
|
}
|
|
8884
8988
|
},
|
|
8885
8989
|
// Semantic Edge Relations
|
|
8990
|
+
{
|
|
8991
|
+
selector: 'edge.relation-identifies, edge.relation-envisions, edge.relation-defines-goal',
|
|
8992
|
+
style: { 'line-color': '#2dd4bf', 'target-arrow-color': '#2dd4bf', 'width': 2 }
|
|
8993
|
+
},
|
|
8886
8994
|
{
|
|
8887
8995
|
selector: 'edge.relation-pursues',
|
|
8888
8996
|
style: { 'line-color': '#c084fc', 'target-arrow-color': '#c084fc', 'width': 2 }
|
|
@@ -9023,7 +9131,10 @@ function renderDashboardHtml(graphData, metricsData, title = "AI-SDLC: Dashboard
|
|
|
9023
9131
|
var typeName = (data.type || data.layer || 'node').toLowerCase();
|
|
9024
9132
|
var typeBadgeColor = '#334155';
|
|
9025
9133
|
var typeTitle = (data.type || data.layer || 'NODE').toUpperCase();
|
|
9026
|
-
if (typeName === '
|
|
9134
|
+
if (typeName === 'architecture-introduction') {
|
|
9135
|
+
typeBadgeColor = '#0f766e';
|
|
9136
|
+
typeTitle = 'VISION & GOALS (ARCH-INTRO)';
|
|
9137
|
+
} else if (typeName === 'journey') {
|
|
9027
9138
|
typeBadgeColor = '#581c87';
|
|
9028
9139
|
typeTitle = 'JOURNEY (JRN)';
|
|
9029
9140
|
} else if (typeName === 'actor') {
|
|
@@ -9089,6 +9200,11 @@ function renderDashboardHtml(graphData, metricsData, title = "AI-SDLC: Dashboard
|
|
|
9089
9200
|
if (!cy) return;
|
|
9090
9201
|
if (type === 'all') {
|
|
9091
9202
|
cy.elements().show();
|
|
9203
|
+
} else if (type === 'architecture-introduction') {
|
|
9204
|
+
cy.elements().hide();
|
|
9205
|
+
var nodes = cy.nodes('.type-architecture-introduction');
|
|
9206
|
+
nodes.show();
|
|
9207
|
+
nodes.connectedEdges().show();
|
|
9092
9208
|
} else if (type === 'journey') {
|
|
9093
9209
|
cy.elements().hide();
|
|
9094
9210
|
var nodes = cy.nodes('.type-journey');
|
|
@@ -9425,14 +9541,20 @@ var SPECIALIZED_AGENT_TEMPLATES = [
|
|
|
9425
9541
|
{
|
|
9426
9542
|
id: "agent-product-analyst",
|
|
9427
9543
|
title: "Product Analyst / Scribe",
|
|
9428
|
-
description: "Assist the human Product Owner in exploring, modeling, and refining product definition using ProductShape (ACT-*, UC-*, FR-*, QR-*, BR-*).",
|
|
9429
|
-
globs: "product/**, specs/product/**, templates/product
|
|
9544
|
+
description: "Assist the human Product Owner in exploring, modeling, and refining product definition using NAF v4 Enterprise & Capability Vision (ARCH-INTRO-*) and ProductShape (ACT-*, UC-*, FR-*, QR-*, BR-*).",
|
|
9545
|
+
globs: "product/**, specs/product/**, templates/product/**, templates/architecture/introduction-and-goals.template.md",
|
|
9430
9546
|
body: `## Role & Mission
|
|
9431
9547
|
- **Role**: Product Analyst Agent (\`agent-product-analyst\`) and Technical Scribe (AI as Scribe) of the AI-SDLC framework.
|
|
9432
|
-
- **Mission**:
|
|
9548
|
+
- **Mission**: Capture new product intent via NAF v4 Enterprise & Capability Vision (\`ARCH-INTRO-*\`) and transform natural language business intent into canonical ProductShape artifacts (\`ACT-*\`, \`JRN-*\`, \`UC-*\`, \`BR-*\`, \`TERM-*\`, \`FR-*\`, \`QR-*\`) 100% compliant with JSON schemas.
|
|
9549
|
+
|
|
9550
|
+
## Phase 0: Greenfield Product Inception (New Product Intent)
|
|
9551
|
+
- **Trigger**: When the user expresses intent to create a new product from scratch with the framework (or when \`specs/product/\` has no baseline product model yet), initiate **Phase 0** before any SDD change (\`change:new\`) or implementation:
|
|
9552
|
+
1. **Structured Discovery Interview (3\u20135 Questions)**: Ask a concise 3\u20135 question interview to clarify: (a) core problem and mission statement, (b) primary actors/stakeholders (\`ACT-*\`), (c) essential MVP capabilities/use cases (\`UC-*\`), and (d) top 3\u20135 priority quality goals and constraints (\`QR-*\`, \`CON-*\`).
|
|
9553
|
+
2. **Enterprise & Capability Vision (\`ARCH-INTRO-001\`)**: Draft the root vision artifact (\`type: architecture-introduction\`, \`naf-perspective: "Enterprise & Capability"\`, \`status: draft\`) using \`templates/architecture/introduction-and-goals.template.md\` (\`schemas/architecture/introduction-and-goals.schema.json\`).
|
|
9554
|
+
3. **ProductShape Derivation**: Derive the initial draft artifacts (\`ACT-*\`, \`UC-*\`, \`BR-*\`, \`FR-*\`, \`QR-*\` with \`status: draft\`) in \`specs/product/\` linked to \`ARCH-INTRO-001\` for human Product Owner review.
|
|
9433
9555
|
|
|
9434
9556
|
## Operational Directives & Guardrails
|
|
9435
|
-
- Every generated artifact must strictly adhere to the canonical Markdown and YAML frontmatter format in \`schemas/product
|
|
9557
|
+
- Every generated artifact must strictly adhere to the canonical Markdown and YAML frontmatter format in \`schemas/product/\` and \`schemas/architecture/introduction-and-goals.schema.json\`.
|
|
9436
9558
|
- \`status\` ALWAYS starts as \`draft\`. Creating artifacts directly as \`active\` or \`approved\` is forbidden.
|
|
9437
9559
|
- Always write relationships in their single canonical direction (\`derives-from: [UC-*]\`, \`primary-actor: ACT-*\`).
|
|
9438
9560
|
- In \`UC-*\`, format section \`1. Intent and Outcome\` under the standard English structure: \`As a <ACT-ID>... I want <action>... To <outcome>...\`.
|
|
@@ -9680,9 +9802,10 @@ This file defines the operational rules and specialized role mappings for Google
|
|
|
9680
9802
|
## 2. Specialized Roles Mapping
|
|
9681
9803
|
|
|
9682
9804
|
### 1. \`agent-product-analyst\` (Product Analyst / Scribe)
|
|
9683
|
-
- **Mission**:
|
|
9805
|
+
- **Mission**: Capture new product intent via NAF v4 Enterprise & Capability Vision (\`ARCH-INTRO-*\`) and define/refine the product model using ProductShape.
|
|
9806
|
+
- **Phase 0 (Greenfield Product Inception)**: When creating a new product from scratch (or when \`specs/product/\` has no baseline), run a concise 3\u20135 question discovery interview (mission/problem, actors \`ACT-*\`, MVP capabilities \`UC-*\`, priority quality goals \`QR-*\`), draft \`ARCH-INTRO-001\` (\`templates/architecture/introduction-and-goals.template.md\`), and derive initial \`ACT-*\`, \`UC-*\`, \`BR-*\`, \`FR-*\`, and \`QR-*\` drafts.
|
|
9684
9807
|
- **Input**: Business intent or natural language specification.
|
|
9685
|
-
- **Output**: Markdown artifacts with YAML frontmatter compliant with \`schemas/product/\` (\`ACT-*\`, \`UC-*\`, \`FR-*\`, \`QR-*\`, \`BR-*\`).
|
|
9808
|
+
- **Output**: Markdown artifacts with YAML frontmatter compliant with \`schemas/architecture/introduction-and-goals.schema.json\` (\`ARCH-INTRO-*\`) and \`schemas/product/\` (\`ACT-*\`, \`UC-*\`, \`FR-*\`, \`QR-*\`, \`BR-*\`).
|
|
9686
9809
|
- **Guardrails**:
|
|
9687
9810
|
- \`status\` always starts in \`draft\`.
|
|
9688
9811
|
- In \`UC-*\`, format section \`1. Intent and Outcome\` under the standard English structure: \`As a <ACT-ID>... I want <action>... To <outcome>...\`.
|
|
@@ -9813,7 +9936,7 @@ Before finalizing changes or proposing commits:
|
|
|
9813
9936
|
## 4. Specialized Roles Mapping
|
|
9814
9937
|
| Role | Mission (summary) |
|
|
9815
9938
|
| :--- | :--- |
|
|
9816
|
-
| \`agent-product-analyst\` | ProductShape artifacts (\`ACT-*\`, \`UC-*\`, \`FR-*\`, \`QR-*\`, \`BR-*\`); status starts \`draft\`. |
|
|
9939
|
+
| \`agent-product-analyst\` | Phase 0 NAF v4 Enterprise & Capability Vision (\`ARCH-INTRO-*\`, 3\u20135 question interview) + ProductShape artifacts (\`ACT-*\`, \`UC-*\`, \`FR-*\`, \`QR-*\`, \`BR-*\`); status starts \`draft\`. |
|
|
9817
9940
|
| \`agent-threat-modeler\` | STRIDE/OWASP threat triad (\`ACT-THREAT-*\`, \`ABUSE-*\`, \`SEC-REQ-*\`). |
|
|
9818
9941
|
| \`agent-system-architect\` | Modular arc42 + NAF v4 architecture (\`CMP-*\`, Mermaid diagrams, \`ADR-*\`). |
|
|
9819
9942
|
| \`agent-qa-engineer\` | FAILING BDD/Gherkin suites before \`agent-developer\` writes code. |
|
|
@@ -9848,6 +9971,7 @@ Canonical Reference: [\`process/09_agent_protocols.md\`](process/09_agent_protoc
|
|
|
9848
9971
|
|
|
9849
9972
|
## 1. Identifier Taxonomy and JSON Schemas
|
|
9850
9973
|
Every generated or modified artifact must follow canonical naming and satisfy its schema in \`schemas/\`:
|
|
9974
|
+
- Enterprise & Capability Vision (Phase 0): \`ARCH-INTRO-[NUM3]\` (\`schemas/architecture/introduction-and-goals.schema.json\`)
|
|
9851
9975
|
- Product Actors: \`ACT-[SUFFIX]\` (\`schemas/product/actor.schema.json\`)
|
|
9852
9976
|
- Use Cases: \`UC-[SUFFIX]\` (\`schemas/product/use-case.schema.json\`)
|
|
9853
9977
|
- Functional Requirements: \`FR-[SUFFIX]-[NUM3]\` (\`schemas/product/requirement.schema.json\`)
|
|
@@ -9858,6 +9982,7 @@ Every generated or modified artifact must follow canonical naming and satisfy it
|
|
|
9858
9982
|
- Security Requirements: \`SEC-REQ-[SUFFIX]\` (\`schemas/security/security-req.schema.json\`)
|
|
9859
9983
|
|
|
9860
9984
|
## 2. "AI as Scribe" Protocol Rules
|
|
9985
|
+
- **Phase 0 (New Product Inception)**: When starting a new product, conduct a 3\u20135 question discovery interview, instantiate \`ARCH-INTRO-001\` (\`naf-perspective: "Enterprise & Capability"\`) in \`draft\`, and derive \`ACT-*\`, \`UC-*\`, \`BR-*\`, \`FR-*\`, and \`QR-*\`.
|
|
9861
9986
|
- **Initial Status**: Every new artifact strictly starts with \`status: draft\`. Creating artifacts directly as \`active\` or \`approved\` is forbidden.
|
|
9862
9987
|
- **Gherkin Acceptance Criteria**: In every \`FR-*\` requirement, include a \`\`\`gherkin block with tags \`@<ID> @automated @regression\` and at least one \`Scenario Outline\` with an \`Examples\` data table.
|
|
9863
9988
|
- **Security Mitigations**: Every \`SEC-REQ-*\` must include negative Gherkin tests (\`@security @mitigation\`).
|
|
@@ -9939,9 +10064,10 @@ npx tsx packages/cli/src/index.ts sdd integrate --change <chg-id>
|
|
|
9939
10064
|
## 3. Specialized Roles Mapping
|
|
9940
10065
|
|
|
9941
10066
|
### 1. \`agent-product-analyst\` (Product Analyst / Scribe)
|
|
9942
|
-
- **Mission**:
|
|
10067
|
+
- **Mission**: Capture new product intent via NAF v4 Enterprise & Capability Vision (\`ARCH-INTRO-*\`) and define/refine the product model using ProductShape.
|
|
10068
|
+
- **Phase 0 (Greenfield Product Inception)**: When creating a new product from scratch (or when \`specs/product/\` has no baseline), run a concise 3\u20135 question discovery interview (mission/problem, actors \`ACT-*\`, MVP capabilities \`UC-*\`, priority quality goals \`QR-*\`), draft \`ARCH-INTRO-001\` (\`templates/architecture/introduction-and-goals.template.md\`), and derive initial \`ACT-*\`, \`UC-*\`, \`BR-*\`, \`FR-*\`, and \`QR-*\` drafts.
|
|
9943
10069
|
- **Input**: Business intent or natural language specification.
|
|
9944
|
-
- **Output**: Markdown artifacts with YAML frontmatter compliant with \`schemas/product/\` (\`ACT-*\`, \`UC-*\`, \`FR-*\`, \`QR-*\`, \`BR-*\`).
|
|
10070
|
+
- **Output**: Markdown artifacts with YAML frontmatter compliant with \`schemas/architecture/introduction-and-goals.schema.json\` (\`ARCH-INTRO-*\`) and \`schemas/product/\` (\`ACT-*\`, \`UC-*\`, \`FR-*\`, \`QR-*\`, \`BR-*\`).
|
|
9945
10071
|
- **Guardrails**: \`status\` always starts in \`draft\`. Mandatory Gherkin criteria with \`@<ID> @automated @regression\`.
|
|
9946
10072
|
|
|
9947
10073
|
### 2. \`agent-threat-modeler\` (Threat Modeler and Security Specialist)
|
|
@@ -10100,7 +10226,7 @@ Non-Negotiable Quality Thresholds (\`quality-policy.yaml\`):
|
|
|
10100
10226
|
|
|
10101
10227
|
| Role | Mission (summary) |
|
|
10102
10228
|
| :--- | :--- |
|
|
10103
|
-
| \`agent-product-analyst\` | ProductShape artifacts (\`ACT-*\`, \`UC-*\`, \`FR-*\`, \`QR-*\`, \`BR-*\`); \`status\` starts \`draft\`. |
|
|
10229
|
+
| \`agent-product-analyst\` | Phase 0 NAF v4 Enterprise & Capability Vision (\`ARCH-INTRO-*\`, 3\u20135 question interview) + ProductShape artifacts (\`ACT-*\`, \`UC-*\`, \`FR-*\`, \`QR-*\`, \`BR-*\`); \`status\` starts \`draft\`. |
|
|
10104
10230
|
| \`agent-threat-modeler\` | STRIDE/OWASP threat triad (\`ACT-THREAT-*\`, \`ABUSE-*\`, \`SEC-REQ-*\`). |
|
|
10105
10231
|
| \`agent-system-architect\` | Modular arc42 + NAF v4 architecture (\`CMP-*\`, Mermaid diagrams, \`ADR-*\`). |
|
|
10106
10232
|
| \`agent-qa-engineer\` | FAILING BDD/Gherkin suites before \`agent-developer\` writes production code. |
|
|
@@ -10908,7 +11034,7 @@ var ALL_ARCHITECTURE_TEMPLATES = [
|
|
|
10908
11034
|
{ filename: "cross-cutting-concepts.template.md", content: STARTER_ARCH_CROSS_CUTTING_CONCEPTS, isMinimal: false },
|
|
10909
11035
|
{ filename: "deployment-view.template.md", content: STARTER_ARCH_DEPLOYMENT_VIEW, isMinimal: false },
|
|
10910
11036
|
{ filename: "glossary.template.md", content: STARTER_ARCH_GLOSSARY, isMinimal: false },
|
|
10911
|
-
{ filename: "introduction-and-goals.template.md", content: STARTER_ARCH_INTRODUCTION_AND_GOALS, isMinimal:
|
|
11037
|
+
{ filename: "introduction-and-goals.template.md", content: STARTER_ARCH_INTRODUCTION_AND_GOALS, isMinimal: true },
|
|
10912
11038
|
{ filename: "level-1-whitebox.template.md", content: STARTER_ARCH_LEVEL_1_WHITEBOX, isMinimal: false },
|
|
10913
11039
|
{ filename: "quality-requirements.template.md", content: STARTER_ARCH_QUALITY_REQUIREMENTS, isMinimal: false },
|
|
10914
11040
|
{ filename: "risks-and-technical-debt.template.md", content: STARTER_ARCH_RISKS_AND_TECHNICAL_DEBT, isMinimal: false },
|