@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.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
- if (relFile.includes("architecture/") || relFile.includes("06_runtime_view") || relFile.includes("08_security_concept") || relFile.includes("09_decisions")) {
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("JRN-") || type === "journey") {
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: isAbuse ? "mitigated-by" : "derives-from",
7309
- relation: isAbuse ? "mitigated-by" : "derives-from",
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 === "journey") {
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 &amp; 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 === 'journey') {
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**: Transform natural language business intent into canonical ProductShape artifacts (\`ACT-*\`, \`JRN-*\`, \`UC-*\`, \`BR-*\`, \`TERM-*\`, \`FR-*\`, \`QR-*\`) 100% compliant with JSON schemas.
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**: Assist in defining and refining the product model using ProductShape.
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**: Assist in defining and refining the product model using ProductShape.
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: false },
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 },