@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.js
CHANGED
|
@@ -2060,6 +2060,7 @@ var TYPE_TO_SCHEMA_MAP = {
|
|
|
2060
2060
|
"security-requirement": "schemas/security/security-req.schema.json",
|
|
2061
2061
|
"threat-actor": "schemas/security/threat-actor.schema.json",
|
|
2062
2062
|
// Architecture
|
|
2063
|
+
"architecture-introduction": "schemas/architecture/introduction-and-goals.schema.json",
|
|
2063
2064
|
"architecture-decision-record": "schemas/architecture/adr.schema.json",
|
|
2064
2065
|
component: "schemas/architecture/component.schema.json",
|
|
2065
2066
|
// Safety
|
|
@@ -2103,6 +2104,7 @@ var PREFIX_TAXONOMY = [
|
|
|
2103
2104
|
["HAZ-", "hazard"],
|
|
2104
2105
|
["SAF-REQ-", "safety-requirement"],
|
|
2105
2106
|
["SAF-", "safety-requirement"],
|
|
2107
|
+
["ARCH-INTRO-", "architecture-introduction"],
|
|
2106
2108
|
["ADR-", "architecture-decision-record"],
|
|
2107
2109
|
["CMP-", "component"],
|
|
2108
2110
|
["MAN-USER-", "user-manual"],
|
|
@@ -3405,7 +3407,8 @@ function verifyTraceability(options = {}) {
|
|
|
3405
3407
|
});
|
|
3406
3408
|
}
|
|
3407
3409
|
}
|
|
3408
|
-
|
|
3410
|
+
const isArchIntro = frontmatter.type === "architecture-introduction" || frontmatter.id !== void 0 && String(frontmatter.id).trim().startsWith("ARCH-INTRO-");
|
|
3411
|
+
if (!isArchIntro && (relFile.includes("architecture/") || relFile.includes("06_runtime_view") || relFile.includes("08_security_concept") || relFile.includes("09_decisions"))) {
|
|
3409
3412
|
architectureViews.push({
|
|
3410
3413
|
file: relFile,
|
|
3411
3414
|
id: frontmatter.id ? String(frontmatter.id).trim() : void 0,
|
|
@@ -3494,6 +3497,14 @@ function verifyTraceability(options = {}) {
|
|
|
3494
3497
|
productTraces.push(...associatedHandoff.subgraph.abuseCases);
|
|
3495
3498
|
}
|
|
3496
3499
|
}
|
|
3500
|
+
for (const [artId, artEntry] of artifactMap.entries()) {
|
|
3501
|
+
if (artEntry.type === "architecture-introduction" || artId.startsWith("ARCH-INTRO-")) {
|
|
3502
|
+
const citedGoals = artEntry.frontmatter["cites-quality-goals"];
|
|
3503
|
+
if (Array.isArray(citedGoals) && citedGoals.includes(reqId)) {
|
|
3504
|
+
productTraces.push(artId);
|
|
3505
|
+
}
|
|
3506
|
+
}
|
|
3507
|
+
}
|
|
3497
3508
|
const validProductTraces = Array.from(
|
|
3498
3509
|
new Set(productTraces.filter((id) => artifactMap.has(id)))
|
|
3499
3510
|
);
|
|
@@ -7208,7 +7219,10 @@ function buildGraphElements(rootDir = process.cwd()) {
|
|
|
7208
7219
|
continue;
|
|
7209
7220
|
}
|
|
7210
7221
|
let layer = "product";
|
|
7211
|
-
if (id.startsWith("
|
|
7222
|
+
if (id.startsWith("ARCH-INTRO-") || type === "architecture-introduction") {
|
|
7223
|
+
type = "architecture-introduction";
|
|
7224
|
+
layer = "product";
|
|
7225
|
+
} else if (id.startsWith("JRN-") || type === "journey") {
|
|
7212
7226
|
type = "journey";
|
|
7213
7227
|
layer = "product";
|
|
7214
7228
|
} else if (id.startsWith("ACT-THREAT-") || type === "threat-actor") {
|
|
@@ -7301,16 +7315,18 @@ function buildGraphElements(rootDir = process.cwd()) {
|
|
|
7301
7315
|
const u = up.trim();
|
|
7302
7316
|
if (u && u !== "NINGUNO" && u !== "NONE") {
|
|
7303
7317
|
const isAbuse = u.startsWith("ABUSE-");
|
|
7318
|
+
const isArchIntro = u.startsWith("ARCH-INTRO-");
|
|
7319
|
+
const rel = isAbuse ? "mitigated-by" : isArchIntro ? "defines-goal" : "derives-from";
|
|
7304
7320
|
addEdge({
|
|
7305
7321
|
id: `edge-${u}-${r.id}`,
|
|
7306
7322
|
source: u,
|
|
7307
7323
|
target: r.id,
|
|
7308
|
-
label:
|
|
7309
|
-
relation:
|
|
7324
|
+
label: rel,
|
|
7325
|
+
relation: rel,
|
|
7310
7326
|
status
|
|
7311
7327
|
});
|
|
7312
7328
|
if (!nodeMap.has(u)) {
|
|
7313
|
-
const upType = u.startsWith("ACT-") ? "actor" : u.startsWith("UC-") ? "use-case" : u.startsWith("BR-") ? "business-rule" : u.startsWith("ABUSE-") ? "abuse-case" : "product";
|
|
7329
|
+
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";
|
|
7314
7330
|
nodeMap.set(u, {
|
|
7315
7331
|
id: u,
|
|
7316
7332
|
label: u,
|
|
@@ -7408,7 +7424,80 @@ function buildGraphElements(rootDir = process.cwd()) {
|
|
|
7408
7424
|
}
|
|
7409
7425
|
for (const art of scannedArtifactsMap.values()) {
|
|
7410
7426
|
const fm = art.frontmatter;
|
|
7411
|
-
if (art.type === "
|
|
7427
|
+
if (art.type === "architecture-introduction") {
|
|
7428
|
+
const citedActors = Array.isArray(fm["cites-product-actors"]) ? fm["cites-product-actors"] : [];
|
|
7429
|
+
for (const actId of citedActors) {
|
|
7430
|
+
if (typeof actId === "string" && actId.trim()) {
|
|
7431
|
+
const a = actId.trim();
|
|
7432
|
+
if (!nodeMap.has(a)) {
|
|
7433
|
+
nodeMap.set(a, {
|
|
7434
|
+
id: a,
|
|
7435
|
+
label: a,
|
|
7436
|
+
title: a,
|
|
7437
|
+
type: "actor",
|
|
7438
|
+
layer: "product",
|
|
7439
|
+
status: "COMPLIANT"
|
|
7440
|
+
});
|
|
7441
|
+
}
|
|
7442
|
+
addEdge({
|
|
7443
|
+
id: `edge-${art.id}-${a}`,
|
|
7444
|
+
source: art.id,
|
|
7445
|
+
target: a,
|
|
7446
|
+
label: "identifies",
|
|
7447
|
+
relation: "identifies",
|
|
7448
|
+
status: "COMPLIANT"
|
|
7449
|
+
});
|
|
7450
|
+
}
|
|
7451
|
+
}
|
|
7452
|
+
const citedUcs = Array.isArray(fm["cites-use-cases"]) ? fm["cites-use-cases"] : [];
|
|
7453
|
+
for (const ucId of citedUcs) {
|
|
7454
|
+
if (typeof ucId === "string" && ucId.trim()) {
|
|
7455
|
+
const u = ucId.trim();
|
|
7456
|
+
if (!nodeMap.has(u)) {
|
|
7457
|
+
nodeMap.set(u, {
|
|
7458
|
+
id: u,
|
|
7459
|
+
label: u,
|
|
7460
|
+
title: u,
|
|
7461
|
+
type: "use-case",
|
|
7462
|
+
layer: "product",
|
|
7463
|
+
status: "COMPLIANT"
|
|
7464
|
+
});
|
|
7465
|
+
}
|
|
7466
|
+
addEdge({
|
|
7467
|
+
id: `edge-${art.id}-${u}`,
|
|
7468
|
+
source: art.id,
|
|
7469
|
+
target: u,
|
|
7470
|
+
label: "envisions",
|
|
7471
|
+
relation: "envisions",
|
|
7472
|
+
status: "COMPLIANT"
|
|
7473
|
+
});
|
|
7474
|
+
}
|
|
7475
|
+
}
|
|
7476
|
+
const citedGoals = Array.isArray(fm["cites-quality-goals"]) ? fm["cites-quality-goals"] : [];
|
|
7477
|
+
for (const qrId of citedGoals) {
|
|
7478
|
+
if (typeof qrId === "string" && qrId.trim()) {
|
|
7479
|
+
const q = qrId.trim();
|
|
7480
|
+
if (!nodeMap.has(q)) {
|
|
7481
|
+
nodeMap.set(q, {
|
|
7482
|
+
id: q,
|
|
7483
|
+
label: q,
|
|
7484
|
+
title: q,
|
|
7485
|
+
type: q.startsWith("SEC-REQ-") ? "security-requirement" : "requirement",
|
|
7486
|
+
layer: "requirement",
|
|
7487
|
+
status: "COMPLIANT"
|
|
7488
|
+
});
|
|
7489
|
+
}
|
|
7490
|
+
addEdge({
|
|
7491
|
+
id: `edge-${art.id}-${q}`,
|
|
7492
|
+
source: art.id,
|
|
7493
|
+
target: q,
|
|
7494
|
+
label: "defines-goal",
|
|
7495
|
+
relation: "defines-goal",
|
|
7496
|
+
status: "COMPLIANT"
|
|
7497
|
+
});
|
|
7498
|
+
}
|
|
7499
|
+
}
|
|
7500
|
+
} else if (art.type === "journey") {
|
|
7412
7501
|
const persona = typeof fm.persona === "string" ? fm.persona : typeof fm.actor === "string" ? fm.actor : void 0;
|
|
7413
7502
|
if (persona) {
|
|
7414
7503
|
if (!nodeMap.has(persona)) {
|
|
@@ -8257,6 +8346,7 @@ function renderDashboardHtml(graphData, metricsData, title = "AI-SDLC: Dashboard
|
|
|
8257
8346
|
<div class="tool-row">
|
|
8258
8347
|
<select id="type-filter" class="tool-select" onchange="filterType(this.value)">
|
|
8259
8348
|
<option value="all">All Typologies</option>
|
|
8349
|
+
<option value="architecture-introduction">Vision & Goals (ARCH-INTRO)</option>
|
|
8260
8350
|
<option value="journey">Journeys (JRN)</option>
|
|
8261
8351
|
<option value="actor">Actors (ACT)</option>
|
|
8262
8352
|
<option value="use-case">Use Cases (UC)</option>
|
|
@@ -8291,6 +8381,7 @@ function renderDashboardHtml(graphData, metricsData, title = "AI-SDLC: Dashboard
|
|
|
8291
8381
|
<div class="graph-legend">
|
|
8292
8382
|
<div class="legend-header">Node Typologies</div>
|
|
8293
8383
|
<div class="legend-items">
|
|
8384
|
+
<div class="legend-item"><span class="legend-dot" style="background:#0f766e; border:2px solid #2dd4bf;"></span><strong>Vision / Goals</strong> (ARCH-INTRO)</div>
|
|
8294
8385
|
<div class="legend-item"><span class="legend-dot" style="background:#581c87; border:2px solid #c084fc;"></span><strong>Journey</strong> (JRN)</div>
|
|
8295
8386
|
<div class="legend-item"><span class="legend-dot" style="background:#065f46; border:2px solid #34d399; border-radius:50%;"></span><strong>Actor</strong> (ACT)</div>
|
|
8296
8387
|
<div class="legend-item"><span class="legend-dot" style="background:#0369a1; border:2px solid #38bdf8;"></span><strong>Use Case</strong> (UC)</div>
|
|
@@ -8710,6 +8801,19 @@ function renderDashboardHtml(graphData, metricsData, title = "AI-SDLC: Dashboard
|
|
|
8710
8801
|
}
|
|
8711
8802
|
},
|
|
8712
8803
|
// Typology Styles
|
|
8804
|
+
{
|
|
8805
|
+
selector: 'node.type-architecture-introduction',
|
|
8806
|
+
style: {
|
|
8807
|
+
'shape': 'round-rectangle',
|
|
8808
|
+
'background-color': '#0f766e',
|
|
8809
|
+
'border-color': '#2dd4bf',
|
|
8810
|
+
'border-width': 3,
|
|
8811
|
+
'width': 92,
|
|
8812
|
+
'height': 44,
|
|
8813
|
+
'font-weight': 'bold',
|
|
8814
|
+
'text-max-width': '86px'
|
|
8815
|
+
}
|
|
8816
|
+
},
|
|
8713
8817
|
{
|
|
8714
8818
|
selector: 'node.type-journey',
|
|
8715
8819
|
style: {
|
|
@@ -8826,7 +8930,7 @@ function renderDashboardHtml(graphData, metricsData, title = "AI-SDLC: Dashboard
|
|
|
8826
8930
|
},
|
|
8827
8931
|
// Fallback Layer styles if type is missing
|
|
8828
8932
|
{
|
|
8829
|
-
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)',
|
|
8933
|
+
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)',
|
|
8830
8934
|
style: { 'shape': 'diamond', 'background-color': '#0e7490', 'border-color': '#38bdf8', 'width': 50, 'height': 50 }
|
|
8831
8935
|
},
|
|
8832
8936
|
{
|
|
@@ -8855,6 +8959,10 @@ function renderDashboardHtml(graphData, metricsData, title = "AI-SDLC: Dashboard
|
|
|
8855
8959
|
}
|
|
8856
8960
|
},
|
|
8857
8961
|
// Semantic Edge Relations
|
|
8962
|
+
{
|
|
8963
|
+
selector: 'edge.relation-identifies, edge.relation-envisions, edge.relation-defines-goal',
|
|
8964
|
+
style: { 'line-color': '#2dd4bf', 'target-arrow-color': '#2dd4bf', 'width': 2 }
|
|
8965
|
+
},
|
|
8858
8966
|
{
|
|
8859
8967
|
selector: 'edge.relation-pursues',
|
|
8860
8968
|
style: { 'line-color': '#c084fc', 'target-arrow-color': '#c084fc', 'width': 2 }
|
|
@@ -8995,7 +9103,10 @@ function renderDashboardHtml(graphData, metricsData, title = "AI-SDLC: Dashboard
|
|
|
8995
9103
|
var typeName = (data.type || data.layer || 'node').toLowerCase();
|
|
8996
9104
|
var typeBadgeColor = '#334155';
|
|
8997
9105
|
var typeTitle = (data.type || data.layer || 'NODE').toUpperCase();
|
|
8998
|
-
if (typeName === '
|
|
9106
|
+
if (typeName === 'architecture-introduction') {
|
|
9107
|
+
typeBadgeColor = '#0f766e';
|
|
9108
|
+
typeTitle = 'VISION & GOALS (ARCH-INTRO)';
|
|
9109
|
+
} else if (typeName === 'journey') {
|
|
8999
9110
|
typeBadgeColor = '#581c87';
|
|
9000
9111
|
typeTitle = 'JOURNEY (JRN)';
|
|
9001
9112
|
} else if (typeName === 'actor') {
|
|
@@ -9061,6 +9172,11 @@ function renderDashboardHtml(graphData, metricsData, title = "AI-SDLC: Dashboard
|
|
|
9061
9172
|
if (!cy) return;
|
|
9062
9173
|
if (type === 'all') {
|
|
9063
9174
|
cy.elements().show();
|
|
9175
|
+
} else if (type === 'architecture-introduction') {
|
|
9176
|
+
cy.elements().hide();
|
|
9177
|
+
var nodes = cy.nodes('.type-architecture-introduction');
|
|
9178
|
+
nodes.show();
|
|
9179
|
+
nodes.connectedEdges().show();
|
|
9064
9180
|
} else if (type === 'journey') {
|
|
9065
9181
|
cy.elements().hide();
|
|
9066
9182
|
var nodes = cy.nodes('.type-journey');
|
|
@@ -9397,14 +9513,20 @@ var SPECIALIZED_AGENT_TEMPLATES = [
|
|
|
9397
9513
|
{
|
|
9398
9514
|
id: "agent-product-analyst",
|
|
9399
9515
|
title: "Product Analyst / Scribe",
|
|
9400
|
-
description: "Assist the human Product Owner in exploring, modeling, and refining product definition using ProductShape (ACT-*, UC-*, FR-*, QR-*, BR-*).",
|
|
9401
|
-
globs: "product/**, specs/product/**, templates/product
|
|
9516
|
+
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-*).",
|
|
9517
|
+
globs: "product/**, specs/product/**, templates/product/**, templates/architecture/introduction-and-goals.template.md",
|
|
9402
9518
|
body: `## Role & Mission
|
|
9403
9519
|
- **Role**: Product Analyst Agent (\`agent-product-analyst\`) and Technical Scribe (AI as Scribe) of the AI-SDLC framework.
|
|
9404
|
-
- **Mission**:
|
|
9520
|
+
- **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.
|
|
9521
|
+
|
|
9522
|
+
## Phase 0: Greenfield Product Inception (New Product Intent)
|
|
9523
|
+
- **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:
|
|
9524
|
+
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-*\`).
|
|
9525
|
+
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\`).
|
|
9526
|
+
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.
|
|
9405
9527
|
|
|
9406
9528
|
## Operational Directives & Guardrails
|
|
9407
|
-
- Every generated artifact must strictly adhere to the canonical Markdown and YAML frontmatter format in \`schemas/product
|
|
9529
|
+
- 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\`.
|
|
9408
9530
|
- \`status\` ALWAYS starts as \`draft\`. Creating artifacts directly as \`active\` or \`approved\` is forbidden.
|
|
9409
9531
|
- Always write relationships in their single canonical direction (\`derives-from: [UC-*]\`, \`primary-actor: ACT-*\`).
|
|
9410
9532
|
- In \`UC-*\`, format section \`1. Intent and Outcome\` under the standard English structure: \`As a <ACT-ID>... I want <action>... To <outcome>...\`.
|
|
@@ -9652,9 +9774,10 @@ This file defines the operational rules and specialized role mappings for Google
|
|
|
9652
9774
|
## 2. Specialized Roles Mapping
|
|
9653
9775
|
|
|
9654
9776
|
### 1. \`agent-product-analyst\` (Product Analyst / Scribe)
|
|
9655
|
-
- **Mission**:
|
|
9777
|
+
- **Mission**: Capture new product intent via NAF v4 Enterprise & Capability Vision (\`ARCH-INTRO-*\`) and define/refine the product model using ProductShape.
|
|
9778
|
+
- **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.
|
|
9656
9779
|
- **Input**: Business intent or natural language specification.
|
|
9657
|
-
- **Output**: Markdown artifacts with YAML frontmatter compliant with \`schemas/product/\` (\`ACT-*\`, \`UC-*\`, \`FR-*\`, \`QR-*\`, \`BR-*\`).
|
|
9780
|
+
- **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-*\`).
|
|
9658
9781
|
- **Guardrails**:
|
|
9659
9782
|
- \`status\` always starts in \`draft\`.
|
|
9660
9783
|
- In \`UC-*\`, format section \`1. Intent and Outcome\` under the standard English structure: \`As a <ACT-ID>... I want <action>... To <outcome>...\`.
|
|
@@ -9785,7 +9908,7 @@ Before finalizing changes or proposing commits:
|
|
|
9785
9908
|
## 4. Specialized Roles Mapping
|
|
9786
9909
|
| Role | Mission (summary) |
|
|
9787
9910
|
| :--- | :--- |
|
|
9788
|
-
| \`agent-product-analyst\` | ProductShape artifacts (\`ACT-*\`, \`UC-*\`, \`FR-*\`, \`QR-*\`, \`BR-*\`); status starts \`draft\`. |
|
|
9911
|
+
| \`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\`. |
|
|
9789
9912
|
| \`agent-threat-modeler\` | STRIDE/OWASP threat triad (\`ACT-THREAT-*\`, \`ABUSE-*\`, \`SEC-REQ-*\`). |
|
|
9790
9913
|
| \`agent-system-architect\` | Modular arc42 + NAF v4 architecture (\`CMP-*\`, Mermaid diagrams, \`ADR-*\`). |
|
|
9791
9914
|
| \`agent-qa-engineer\` | FAILING BDD/Gherkin suites before \`agent-developer\` writes code. |
|
|
@@ -9820,6 +9943,7 @@ Canonical Reference: [\`process/09_agent_protocols.md\`](process/09_agent_protoc
|
|
|
9820
9943
|
|
|
9821
9944
|
## 1. Identifier Taxonomy and JSON Schemas
|
|
9822
9945
|
Every generated or modified artifact must follow canonical naming and satisfy its schema in \`schemas/\`:
|
|
9946
|
+
- Enterprise & Capability Vision (Phase 0): \`ARCH-INTRO-[NUM3]\` (\`schemas/architecture/introduction-and-goals.schema.json\`)
|
|
9823
9947
|
- Product Actors: \`ACT-[SUFFIX]\` (\`schemas/product/actor.schema.json\`)
|
|
9824
9948
|
- Use Cases: \`UC-[SUFFIX]\` (\`schemas/product/use-case.schema.json\`)
|
|
9825
9949
|
- Functional Requirements: \`FR-[SUFFIX]-[NUM3]\` (\`schemas/product/requirement.schema.json\`)
|
|
@@ -9830,6 +9954,7 @@ Every generated or modified artifact must follow canonical naming and satisfy it
|
|
|
9830
9954
|
- Security Requirements: \`SEC-REQ-[SUFFIX]\` (\`schemas/security/security-req.schema.json\`)
|
|
9831
9955
|
|
|
9832
9956
|
## 2. "AI as Scribe" Protocol Rules
|
|
9957
|
+
- **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-*\`.
|
|
9833
9958
|
- **Initial Status**: Every new artifact strictly starts with \`status: draft\`. Creating artifacts directly as \`active\` or \`approved\` is forbidden.
|
|
9834
9959
|
- **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.
|
|
9835
9960
|
- **Security Mitigations**: Every \`SEC-REQ-*\` must include negative Gherkin tests (\`@security @mitigation\`).
|
|
@@ -9911,9 +10036,10 @@ npx tsx packages/cli/src/index.ts sdd integrate --change <chg-id>
|
|
|
9911
10036
|
## 3. Specialized Roles Mapping
|
|
9912
10037
|
|
|
9913
10038
|
### 1. \`agent-product-analyst\` (Product Analyst / Scribe)
|
|
9914
|
-
- **Mission**:
|
|
10039
|
+
- **Mission**: Capture new product intent via NAF v4 Enterprise & Capability Vision (\`ARCH-INTRO-*\`) and define/refine the product model using ProductShape.
|
|
10040
|
+
- **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.
|
|
9915
10041
|
- **Input**: Business intent or natural language specification.
|
|
9916
|
-
- **Output**: Markdown artifacts with YAML frontmatter compliant with \`schemas/product/\` (\`ACT-*\`, \`UC-*\`, \`FR-*\`, \`QR-*\`, \`BR-*\`).
|
|
10042
|
+
- **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-*\`).
|
|
9917
10043
|
- **Guardrails**: \`status\` always starts in \`draft\`. Mandatory Gherkin criteria with \`@<ID> @automated @regression\`.
|
|
9918
10044
|
|
|
9919
10045
|
### 2. \`agent-threat-modeler\` (Threat Modeler and Security Specialist)
|
|
@@ -10072,7 +10198,7 @@ Non-Negotiable Quality Thresholds (\`quality-policy.yaml\`):
|
|
|
10072
10198
|
|
|
10073
10199
|
| Role | Mission (summary) |
|
|
10074
10200
|
| :--- | :--- |
|
|
10075
|
-
| \`agent-product-analyst\` | ProductShape artifacts (\`ACT-*\`, \`UC-*\`, \`FR-*\`, \`QR-*\`, \`BR-*\`); \`status\` starts \`draft\`. |
|
|
10201
|
+
| \`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\`. |
|
|
10076
10202
|
| \`agent-threat-modeler\` | STRIDE/OWASP threat triad (\`ACT-THREAT-*\`, \`ABUSE-*\`, \`SEC-REQ-*\`). |
|
|
10077
10203
|
| \`agent-system-architect\` | Modular arc42 + NAF v4 architecture (\`CMP-*\`, Mermaid diagrams, \`ADR-*\`). |
|
|
10078
10204
|
| \`agent-qa-engineer\` | FAILING BDD/Gherkin suites before \`agent-developer\` writes production code. |
|
|
@@ -10880,7 +11006,7 @@ var ALL_ARCHITECTURE_TEMPLATES = [
|
|
|
10880
11006
|
{ filename: "cross-cutting-concepts.template.md", content: STARTER_ARCH_CROSS_CUTTING_CONCEPTS, isMinimal: false },
|
|
10881
11007
|
{ filename: "deployment-view.template.md", content: STARTER_ARCH_DEPLOYMENT_VIEW, isMinimal: false },
|
|
10882
11008
|
{ filename: "glossary.template.md", content: STARTER_ARCH_GLOSSARY, isMinimal: false },
|
|
10883
|
-
{ filename: "introduction-and-goals.template.md", content: STARTER_ARCH_INTRODUCTION_AND_GOALS, isMinimal:
|
|
11009
|
+
{ filename: "introduction-and-goals.template.md", content: STARTER_ARCH_INTRODUCTION_AND_GOALS, isMinimal: true },
|
|
10884
11010
|
{ filename: "level-1-whitebox.template.md", content: STARTER_ARCH_LEVEL_1_WHITEBOX, isMinimal: false },
|
|
10885
11011
|
{ filename: "quality-requirements.template.md", content: STARTER_ARCH_QUALITY_REQUIREMENTS, isMinimal: false },
|
|
10886
11012
|
{ filename: "risks-and-technical-debt.template.md", content: STARTER_ARCH_RISKS_AND_TECHNICAL_DEBT, isMinimal: false },
|