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