@aisdlc/core 1.6.0 → 2.0.1

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
@@ -589,9 +589,11 @@ function resolveTargetFiles(rootDir, targetPath) {
589
589
  const searchDirs = [
590
590
  path4__namespace.join(rootDir, "product"),
591
591
  path4__namespace.join(rootDir, "security"),
592
+ path4__namespace.join(rootDir, "privacy"),
592
593
  path4__namespace.join(rootDir, "specs"),
593
594
  path4__namespace.join(rootDir, "examples", "product"),
594
595
  path4__namespace.join(rootDir, "examples", "security"),
596
+ path4__namespace.join(rootDir, "examples", "privacy"),
595
597
  path4__namespace.join(rootDir, "examples", "specs")
596
598
  ];
597
599
  return searchDirs.filter((d) => fs7__namespace.existsSync(d)).flatMap((d) => walkMdFiles(d));
@@ -602,10 +604,12 @@ function resolveFeatureFilePath(rootDir, filePath, id, customTarget) {
602
604
  }
603
605
  const baseDir = path4__namespace.join(rootDir, "tests", "features");
604
606
  const candidateSecurity = path4__namespace.join(baseDir, "security", `${id.toLowerCase()}.feature`);
607
+ const candidatePrivacy = path4__namespace.join(baseDir, "privacy", `${id.toLowerCase()}.feature`);
605
608
  const candidateRoot = path4__namespace.join(baseDir, `${id.toLowerCase()}.feature`);
606
609
  if (fs7__namespace.existsSync(candidateSecurity)) return candidateSecurity;
610
+ if (fs7__namespace.existsSync(candidatePrivacy)) return candidatePrivacy;
607
611
  if (fs7__namespace.existsSync(candidateRoot)) return candidateRoot;
608
- const subDir = filePath.includes("security") ? "security" : "";
612
+ const subDir = filePath.includes("security") ? "security" : filePath.includes("privacy") ? "privacy" : "";
609
613
  return path4__namespace.join(baseDir, subDir, `${id.toLowerCase()}.feature`);
610
614
  }
611
615
  function buildFeatureFileContent(rootDir, filePath, id, version, gherkinBlocks) {
@@ -832,7 +836,7 @@ function parseFeatureTags(content, relTest, reqToTestsMap) {
832
836
  }
833
837
  }
834
838
  }
835
- var REQ_ID_REGEX = /\b(FR|QR|CON|SEC-REQ)-[A-Z0-9]+(-[A-Z0-9]+)*\b/g;
839
+ var REQ_ID_REGEX = /\b(FR|QR|CON|SEC-REQ|PRIV-REQ)-[A-Z0-9]+(-[A-Z0-9]+)*\b/g;
836
840
  function parseCodeTestIds(content, relTest, reqToTestsMap) {
837
841
  const idMatches = content.match(REQ_ID_REGEX);
838
842
  if (!idMatches) return;
@@ -932,9 +936,9 @@ function computeMissingVariants(cov) {
932
936
  if (!cov.invalid) missing.push("invalid");
933
937
  return missing;
934
938
  }
935
- var REQ_PREFIXES = ["FR-", "QR-", "CON-", "SEC-REQ-"];
939
+ var REQ_PREFIXES = ["FR-", "QR-", "CON-", "SEC-REQ-", "PRIV-REQ-"];
936
940
  function isRequirementArtifact(frontmatter, id) {
937
- if (frontmatter.type === "requirement" || frontmatter.type === "security-requirement") {
941
+ if (frontmatter.type === "requirement" || frontmatter.type === "security-requirement" || frontmatter.type === "privacy-requirement") {
938
942
  return true;
939
943
  }
940
944
  return REQ_PREFIXES.some((prefix) => id.startsWith(prefix));
@@ -1448,22 +1452,31 @@ function auditUnitTestsPerFunction(results, rootDir) {
1448
1452
  }
1449
1453
  return untested;
1450
1454
  }
1455
+ function isVitestMidFlightCoverage(rel, fullPath) {
1456
+ if (!process.env.VITEST || rel !== "coverage/coverage-summary.json") return false;
1457
+ return path4__namespace.resolve(fullPath) === path4__namespace.resolve(process.cwd(), rel);
1458
+ }
1459
+ function parseCoverageSummaryFile(filePath, source) {
1460
+ try {
1461
+ const raw = JSON.parse(fs7__namespace.readFileSync(filePath, "utf-8"));
1462
+ const total = raw.total;
1463
+ if (!total) return null;
1464
+ return {
1465
+ linesPct: Number(total.lines?.pct ?? 0),
1466
+ branchesPct: Number(total.branches?.pct ?? 0),
1467
+ functionsPct: Number(total.functions?.pct ?? 0),
1468
+ source
1469
+ };
1470
+ } catch {
1471
+ return null;
1472
+ }
1473
+ }
1451
1474
  function readSummaryCoverageJson(rootDir) {
1452
1475
  for (const rel of ["coverage/coverage-summary.json", "reports/coverage-summary.json"]) {
1453
1476
  const full = path4__namespace.join(rootDir, rel);
1454
- if (!fs7__namespace.existsSync(full)) continue;
1455
- try {
1456
- const raw = JSON.parse(fs7__namespace.readFileSync(full, "utf-8"));
1457
- const total = raw.total;
1458
- if (!total) continue;
1459
- return {
1460
- linesPct: Number(total.lines?.pct ?? 0),
1461
- branchesPct: Number(total.branches?.pct ?? 0),
1462
- functionsPct: Number(total.functions?.pct ?? 0),
1463
- source: rel
1464
- };
1465
- } catch {
1466
- }
1477
+ if (!fs7__namespace.existsSync(full) || isVitestMidFlightCoverage(rel, full)) continue;
1478
+ const summary = parseCoverageSummaryFile(full, rel);
1479
+ if (summary) return summary;
1467
1480
  }
1468
1481
  return null;
1469
1482
  }
@@ -1961,11 +1974,40 @@ var CANONICAL_TYPE_MAP = {
1961
1974
  "product/business-rules/": "business-rule",
1962
1975
  "product/journeys/": "journey",
1963
1976
  "security/requirements/": "security-requirement",
1977
+ "privacy/requirements/": "privacy-requirement",
1978
+ "specs/privacy/requirements/": "privacy-requirement",
1979
+ "privacy/assets/": "data-asset",
1980
+ "privacy/data-assets/": "data-asset",
1981
+ "specs/privacy/assets/": "data-asset",
1982
+ "specs/privacy/data-assets/": "data-asset",
1983
+ "privacy/ropa/": "privacy-ropa",
1984
+ "specs/privacy/ropa/": "privacy-ropa",
1985
+ "privacy/dpia/": "dpia-request",
1986
+ "specs/privacy/dpia/": "dpia-request",
1964
1987
  "architecture/": "component"
1965
1988
  };
1989
+ var ID_PREFIX_TYPE_PAIRS = [
1990
+ ["PRIV-REQ-", "privacy-requirement"],
1991
+ ["DATA-ASSET-", "data-asset"],
1992
+ ["PRIV-ROPA-", "privacy-ropa"],
1993
+ ["DPIA-", "dpia-request"],
1994
+ ["SEC-REQ-", "security-requirement"],
1995
+ ["FR-", "requirement"],
1996
+ ["QR-", "requirement"],
1997
+ ["CON-", "requirement"],
1998
+ ["UC-", "use-case"],
1999
+ ["ACT-", "actor"],
2000
+ ["BR-", "business-rule"],
2001
+ ["CMP-", "component"]
2002
+ ];
2003
+ function resolveCanonicalArtifactType(normTarget, id) {
2004
+ if (CANONICAL_TYPE_MAP[normTarget]) return CANONICAL_TYPE_MAP[normTarget];
2005
+ const matched = ID_PREFIX_TYPE_PAIRS.find(([prefix]) => id.startsWith(prefix));
2006
+ return matched ? matched[1] : "artifact";
2007
+ }
1966
2008
  function buildCanonicalInitialContent(item, changeId, author, date) {
1967
2009
  const normTarget = item.targetDir.endsWith("/") ? item.targetDir : `${item.targetDir}/`;
1968
- const artifactType = CANONICAL_TYPE_MAP[normTarget] || "artifact";
2010
+ const artifactType = resolveCanonicalArtifactType(normTarget, item.id);
1969
2011
  const frontmatter = `id: ${item.id}
1970
2012
  type: ${artifactType}
1971
2013
  status: draft
@@ -2020,6 +2062,21 @@ function checkTasksExecution(changeDir, changeId) {
2020
2062
  }
2021
2063
  return { ok: true, completedTasks, pendingTasks, error: null };
2022
2064
  }
2065
+ function isProposalRequirementId(id) {
2066
+ return id.startsWith("FR-") || id.startsWith("QR-") || id.startsWith("CON-") || id.startsWith("SEC-REQ-");
2067
+ }
2068
+ function buildSubgraphFromProposalIds(ids) {
2069
+ const reqs = ids.filter(isProposalRequirementId);
2070
+ const privReqs = ids.filter((id) => id.startsWith("PRIV-REQ-"));
2071
+ const dataAssets = ids.filter((id) => id.startsWith("DATA-ASSET-"));
2072
+ const ropaEntries = ids.filter((id) => id.startsWith("PRIV-ROPA-"));
2073
+ return {
2074
+ requirements: reqs,
2075
+ ...privReqs.length > 0 ? { privacyRequirements: privReqs } : {},
2076
+ ...dataAssets.length > 0 ? { dataAssets } : {},
2077
+ ...ropaEntries.length > 0 ? { ropaEntries } : {}
2078
+ };
2079
+ }
2023
2080
  function resolveChangeHandoff(changeDir, changeId) {
2024
2081
  const sidecar = loadProductHandoffSidecar(changeDir);
2025
2082
  if (sidecar) return sidecar;
@@ -2028,12 +2085,12 @@ function resolveChangeHandoff(changeDir, changeId) {
2028
2085
  const propContent = fs7__namespace.readFileSync(proposalFile, "utf-8");
2029
2086
  const { frontmatter } = parseFrontmatter(propContent);
2030
2087
  const citations = Array.isArray(frontmatter.citations) ? frontmatter.citations : [];
2031
- const reqs = citations.map((c) => c.id || "").filter((id) => id.startsWith("FR-") || id.startsWith("QR-") || id.startsWith("CON-") || id.startsWith("SEC-REQ-"));
2088
+ const ids = citations.map((c) => c.id || "").filter(Boolean);
2032
2089
  return {
2033
2090
  id: `HOF-${changeId.toUpperCase()}`,
2034
2091
  type: "handoff",
2035
2092
  changeId,
2036
- subgraph: { requirements: reqs },
2093
+ subgraph: buildSubgraphFromProposalIds(ids),
2037
2094
  citations
2038
2095
  };
2039
2096
  }
@@ -2141,10 +2198,14 @@ function collectArchitectureComponents(handoff, canonicalArtifacts, targetReqs)
2141
2198
  collectSatisfyingComponents(canonicalArtifacts, targetReqs, cited);
2142
2199
  return cited;
2143
2200
  }
2201
+ function isSatisfiableRequirementId(id) {
2202
+ return id.startsWith("FR-") || id.startsWith("QR-") || id.startsWith("CON-") || id.startsWith("SEC-REQ-") || id.startsWith("PRIV-REQ-");
2203
+ }
2144
2204
  function mergeSatisfiesRequirements(fm, targetReqs) {
2145
2205
  const existing = Array.isArray(fm["satisfies-requirements"]) ? [...fm["satisfies-requirements"]] : [];
2146
2206
  let modified = false;
2147
2207
  for (const req of targetReqs) {
2208
+ if (!isSatisfiableRequirementId(req)) continue;
2148
2209
  if (!existing.includes(req)) {
2149
2210
  existing.push(req);
2150
2211
  modified = true;
@@ -2256,24 +2317,71 @@ function buildIntegrationSuccessPayload(changeId, tasksRes, targetReqs, updatedP
2256
2317
  errors
2257
2318
  };
2258
2319
  }
2320
+ function collectSubgraphPromotableIds(subgraph) {
2321
+ if (!subgraph) return [];
2322
+ const rawSub = subgraph;
2323
+ const ropaAlias = Array.isArray(rawSub.ropaEntries) ? rawSub.ropaEntries : [];
2324
+ const privacyRopa = Array.isArray(rawSub.privacyRopa) ? rawSub.privacyRopa : [];
2325
+ const combined = [
2326
+ ...subgraph.requirements || [],
2327
+ ...subgraph.securityRequirements || [],
2328
+ ...subgraph.privacyRequirements || [],
2329
+ ...subgraph.dataAssets || [],
2330
+ ...ropaAlias,
2331
+ ...privacyRopa
2332
+ ];
2333
+ return Array.from(new Set(combined));
2334
+ }
2335
+ function collectSpecAffectedNonArchIds(changeDir) {
2336
+ const specFile = path4__namespace.join(changeDir, "spec.md");
2337
+ if (!fs7__namespace.existsSync(specFile)) return [];
2338
+ const { affectedItems } = parseSpecCatalogScope(fs7__namespace.readFileSync(specFile, "utf-8"));
2339
+ return affectedItems.map((item) => item.id).filter((id) => !isArchitectureComponentId(id));
2340
+ }
2341
+ function resolveIntegrationOptions(options) {
2342
+ return {
2343
+ rootDir: options.rootDir || process.cwd(),
2344
+ changeId: options.changeId,
2345
+ author: options.author || "AI-SDLC Integration Engine",
2346
+ date: options.date || (/* @__PURE__ */ new Date()).toISOString().split("T")[0]
2347
+ };
2348
+ }
2349
+ function resolveTargetRequirements(handoff, changeDir) {
2350
+ return Array.from(
2351
+ /* @__PURE__ */ new Set([
2352
+ ...collectSubgraphPromotableIds(handoff.subgraph),
2353
+ ...collectSpecAffectedNonArchIds(changeDir)
2354
+ ])
2355
+ );
2356
+ }
2357
+ function applyArtifactUpdates(ctx, changeDir, handoff, completedTasks, errors) {
2358
+ const targetReqs = resolveTargetRequirements(handoff, changeDir);
2359
+ const createdArtifacts = materializeNewCatalogArtifacts(changeDir, ctx.rootDir, ctx.changeId, ctx.author, ctx.date, errors);
2360
+ const canonicalArtifacts = loadCanonicalArtifacts(ctx.rootDir);
2361
+ const updatedProduct = updateRequirementsArtifacts(targetReqs, createdArtifacts, canonicalArtifacts, completedTasks, ctx.changeId, ctx.date, ctx.author, errors);
2362
+ const citedComponents = collectArchitectureComponents(handoff, canonicalArtifacts, targetReqs);
2363
+ const updatedArch = updateArchitectureComponents(citedComponents, canonicalArtifacts, targetReqs, ctx.changeId, ctx.date, ctx.author, errors);
2364
+ return { targetReqs, updatedProduct, updatedArch, createdArtifacts };
2365
+ }
2259
2366
  function integrateSddChange(options) {
2260
- const rootDir = options.rootDir || process.cwd();
2261
- const changeId = options.changeId;
2262
- const author = options.author || "AI-SDLC Integration Engine";
2263
- const date = options.date || (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
2264
- const validation = validateChangeWorkspace(rootDir, changeId);
2265
- if (validation.error) return buildEmptyIntegrationResult(changeId, validation.error, validation.pendingTasks);
2266
- const { changeDir, tasksRes, handoff } = validation;
2367
+ const ctx = resolveIntegrationOptions(options);
2368
+ const validation = validateChangeWorkspace(ctx.rootDir, ctx.changeId);
2369
+ if (validation.error) return buildEmptyIntegrationResult(ctx.changeId, validation.error, validation.pendingTasks);
2267
2370
  const errors = [];
2268
- const targetReqs = [...handoff.subgraph.requirements || [], ...handoff.subgraph.securityRequirements || []];
2269
- const createdArtifacts = materializeNewCatalogArtifacts(changeDir, rootDir, changeId, author, date, errors);
2270
- const canonicalArtifacts = loadCanonicalArtifacts(rootDir);
2271
- const updatedProduct = updateRequirementsArtifacts(targetReqs, createdArtifacts, canonicalArtifacts, tasksRes.completedTasks, changeId, date, author, errors);
2272
- const citedComponents = collectArchitectureComponents(handoff, canonicalArtifacts, targetReqs);
2273
- const updatedArch = updateArchitectureComponents(citedComponents, canonicalArtifacts, targetReqs, changeId, date, author, errors);
2371
+ const { changeDir, tasksRes, handoff } = validation;
2372
+ const updates = applyArtifactUpdates(ctx, changeDir, handoff, tasksRes.completedTasks, errors);
2274
2373
  const completedAll = tasksRes.completedTasks.length > 0 && tasksRes.pendingTasks.length === 0;
2275
- const archiveRes = archiveChangeWorkspace(changeDir, changeId, rootDir, options.autoArchive !== false, completedAll);
2276
- return buildIntegrationSuccessPayload(changeId, tasksRes, targetReqs, updatedProduct, updatedArch, createdArtifacts, archiveRes, errors);
2374
+ const archiveRes = archiveChangeWorkspace(changeDir, ctx.changeId, ctx.rootDir, options.autoArchive !== false, completedAll);
2375
+ return buildIntegrationSuccessPayload(
2376
+ ctx.changeId,
2377
+ tasksRes,
2378
+ updates.targetReqs,
2379
+ updates.updatedProduct,
2380
+ updates.updatedArch,
2381
+ updates.createdArtifacts,
2382
+ archiveRes,
2383
+ errors
2384
+ );
2277
2385
  }
2278
2386
  function auditChangeRequirements(targetReqs, canonicalMap) {
2279
2387
  const integrated = [];
@@ -2304,7 +2412,7 @@ function auditChangeEntry(changeDir, changeName, canonicalMap) {
2304
2412
  const tasksFile = path4__namespace.join(changeDir, "tasks.md");
2305
2413
  const tasks = fs7__namespace.existsSync(tasksFile) ? parseTasksFromContent(fs7__namespace.readFileSync(tasksFile, "utf-8")) : [];
2306
2414
  const completed = tasks.filter((t) => t.status === "COMPLETED");
2307
- const targetReqs = handoff.subgraph?.requirements || [];
2415
+ const targetReqs = collectSubgraphPromotableIds(handoff.subgraph);
2308
2416
  const { integrated, missing, gaps } = auditChangeRequirements(targetReqs, canonicalMap);
2309
2417
  const status = resolveAuditStatus(integrated.length, targetReqs.length, gaps.length);
2310
2418
  return {
@@ -2738,14 +2846,18 @@ function syncPdacDigests(options = {}) {
2738
2846
 
2739
2847
  // src/init/starter-schemas.ts
2740
2848
  var SCHEMA_SCHEMAS_ARCHITECTURE_ADR_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/architecture/adr.schema.json",\r\n "title": "Architecture Decision Record Schema (Versionable)",\r\n "type": "object",\r\n "required": ["id", "type", "title", "status", "version", "deciders", "decision-date"],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^ADR-[0-9]{3,4}(-[A-Z0-9]+)*$"\r\n },\r\n "type": {\r\n "type": "string",\r\n "const": "architecture-decision-record"\r\n },\r\n "version": {\r\n "type": "string",\r\n "pattern": "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9A-Za-z.-]+)?$",\r\n "description": "Decision record semantic version (SemVer)."\r\n },\r\n "schema-version": {\r\n "type": "string"\r\n },\r\n "title": {\r\n "type": "string",\r\n "minLength": 3\r\n },\r\n "status": {\r\n "type": "string",\r\n "enum": ["proposed", "accepted", "rejected", "deprecated", "superseded"]\r\n },\r\n "deciders": {\r\n "type": "array",\r\n "minItems": 1,\r\n "items": { "type": "string" }\r\n },\r\n "decision-date": {\r\n "type": "string",\r\n "format": "date"\r\n },\r\n "affects-components": {\r\n "type": "array",\r\n "items": {\r\n "type": "string",\r\n "pattern": "^CMP-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n }\r\n },\r\n "supersedes": {\r\n "type": ["string", "null"],\r\n "pattern": "^ADR-[0-9]{3,4}(-[A-Z0-9]+)*$"\r\n },\r\n "superseded-by": {\r\n "type": ["string", "null"],\r\n "pattern": "^ADR-[0-9]{3,4}(-[A-Z0-9]+)*$"\r\n }\r\n },\r\n "additionalProperties": false\r\n}\r\n';
2741
- var SCHEMA_SCHEMAS_ARCHITECTURE_COMPONENT_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/architecture/component.schema.json",\r\n "title": "NAF v4 / arc42 Architecture Component Schema (Multilevel)",\r\n "type": "object",\r\n "required": [\r\n "id",\r\n "type",\r\n "title",\r\n "status",\r\n "version",\r\n "level",\r\n "implementation-type",\r\n "implements-use-cases"\r\n ],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^CMP-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "type": {\r\n "type": "string",\r\n "const": "component"\r\n },\r\n "version": {\r\n "type": "string",\r\n "pattern": "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9A-Za-z.-]+)?$",\r\n "description": "Architecture component semantic version (SemVer)."\r\n },\r\n "schema-version": {\r\n "type": "string"\r\n },\r\n "title": {\r\n "type": "string",\r\n "minLength": 3\r\n },\r\n "status": {\r\n "type": "string",\r\n "enum": ["proposed", "accepted", "deprecated", "retired"]\r\n },\r\n "level": {\r\n "type": "integer",\r\n "minimum": 1,\r\n "description": "Hierarchical architecture level (1: Bounded Context / Root System, 2: Subsystem / Container, 3: Executable Unit / DLL / Function)."\r\n },\r\n "bounded-context": {\r\n "type": "string",\r\n "description": "Domain-Driven Design (DDD) Bounded Context name this component belongs to."\r\n },\r\n "parent-component": {\r\n "type": ["string", "null"],\r\n "pattern": "^CMP-[A-Z0-9]+(-[A-Z0-9]+)*$",\r\n "description": "Parent component identifier (null if Level 1)."\r\n },\r\n "implementation-type": {\r\n "type": "string",\r\n "enum": ["service", "dll", "function", "composite"],\r\n "description": "Technical implementation paradigm: distributed service (service), dynamic/native library (dll), in-process module/function (function), or logical aggregator/Bounded Context (composite)."\r\n },\r\n "implements-use-cases": {\r\n "type": "array",\r\n "minItems": 1,\r\n "items": {\r\n "type": "string",\r\n "pattern": "^UC-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n }\r\n },\r\n "satisfies-requirements": {\r\n "type": "array",\r\n "items": {\r\n "type": "string",\r\n "pattern": "^(FR|QR|CON|SEC-REQ)-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n }\r\n },\r\n "hosted-in-enclave": {\r\n "type": "string",\r\n "pattern": "^SEC-ENC-[A-Z0-9]+(-[A-Z0-9]+)*$",\r\n "description": "Security enclave where the component resides (optional for DLLs or in-process functions)."\r\n },\r\n "interfaces": {\r\n "type": "array",\r\n "items": {\r\n "type": "object",\r\n "required": ["name", "protocol"],\r\n "properties": {\r\n "name": { "type": "string" },\r\n "protocol": {\r\n "type": "string",\r\n "enum": [\r\n "REST/HTTP",\r\n "gRPC",\r\n "WebSocket",\r\n "Kafka",\r\n "MQTT",\r\n "C-ABI",\r\n "Native-ABI",\r\n "FFI",\r\n "In-Process API",\r\n "Function-Call",\r\n "CLI",\r\n "GUI",\r\n "IPC"\r\n ]\r\n },\r\n "contract-spec": { "type": "string" }\r\n }\r\n }\r\n },\r\n "supersedes": {\r\n "type": ["string", "null"],\r\n "pattern": "^CMP-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "superseded-by": {\r\n "type": ["string", "null"],\r\n "pattern": "^CMP-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n }\r\n },\r\n "additionalProperties": false\r\n}\r\n';
2742
- var SCHEMA_SCHEMAS_ARCHITECTURE_INTRODUCTION_AND_GOALS_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/architecture/introduction-and-goals.schema.json",\r\n "title": "NAF v4 Enterprise & Capability / arc42 Introduction and System Goals Schema",\r\n "type": "object",\r\n "required": [\r\n "id",\r\n "type",\r\n "title",\r\n "status",\r\n "version",\r\n "naf-perspective",\r\n "cites-product-actors",\r\n "cites-quality-goals",\r\n "cites-use-cases"\r\n ],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^ARCH-INTRO-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "type": {\r\n "type": "string",\r\n "const": "architecture-introduction"\r\n },\r\n "version": {\r\n "type": "string",\r\n "pattern": "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9A-Za-z.-]+)?$",\r\n "description": "Artifact semantic version (SemVer)."\r\n },\r\n "schema-version": {\r\n "type": "string"\r\n },\r\n "title": {\r\n "type": "string",\r\n "minLength": 3\r\n },\r\n "status": {\r\n "type": "string",\r\n "enum": ["draft", "proposed", "accepted", "approved", "deprecated", "superseded"]\r\n },\r\n "owner": {\r\n "type": "string"\r\n },\r\n "arc42-section": {\r\n "type": "integer",\r\n "const": 1\r\n },\r\n "naf-perspective": {\r\n "type": "string",\r\n "const": "Enterprise & Capability"\r\n },\r\n "cites-product-actors": {\r\n "type": "array",\r\n "minItems": 1,\r\n "items": {\r\n "type": "string",\r\n "pattern": "^ACT-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n }\r\n },\r\n "cites-quality-goals": {\r\n "type": "array",\r\n "minItems": 1,\r\n "items": {\r\n "type": "string",\r\n "pattern": "^(QR|SEC-REQ)-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n }\r\n },\r\n "cites-use-cases": {\r\n "type": "array",\r\n "minItems": 1,\r\n "items": {\r\n "type": "string",\r\n "pattern": "^UC-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n }\r\n },\r\n "supersedes": {\r\n "type": ["string", "null"],\r\n "pattern": "^ARCH-INTRO-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "superseded-by": {\r\n "type": ["string", "null"],\r\n "pattern": "^ARCH-INTRO-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n }\r\n },\r\n "additionalProperties": false\r\n}\r\n';
2849
+ var SCHEMA_SCHEMAS_ARCHITECTURE_COMPONENT_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/architecture/component.schema.json",\r\n "title": "NAF v4 / arc42 Architecture Component Schema (Multilevel)",\r\n "type": "object",\r\n "required": [\r\n "id",\r\n "type",\r\n "title",\r\n "status",\r\n "version",\r\n "level",\r\n "implementation-type",\r\n "implements-use-cases"\r\n ],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^CMP-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "type": {\r\n "type": "string",\r\n "const": "component"\r\n },\r\n "version": {\r\n "type": "string",\r\n "pattern": "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9A-Za-z.-]+)?$",\r\n "description": "Architecture component semantic version (SemVer)."\r\n },\r\n "schema-version": {\r\n "type": "string"\r\n },\r\n "title": {\r\n "type": "string",\r\n "minLength": 3\r\n },\r\n "status": {\r\n "type": "string",\r\n "enum": ["proposed", "accepted", "deprecated", "retired"]\r\n },\r\n "level": {\r\n "type": "integer",\r\n "minimum": 1,\r\n "description": "Hierarchical architecture level (1: Bounded Context / Root System, 2: Subsystem / Container, 3: Executable Unit / DLL / Function)."\r\n },\r\n "bounded-context": {\r\n "type": "string",\r\n "description": "Domain-Driven Design (DDD) Bounded Context name this component belongs to."\r\n },\r\n "parent-component": {\r\n "type": ["string", "null"],\r\n "pattern": "^CMP-[A-Z0-9]+(-[A-Z0-9]+)*$",\r\n "description": "Parent component identifier (null if Level 1)."\r\n },\r\n "implementation-type": {\r\n "type": "string",\r\n "enum": ["service", "dll", "function", "composite"],\r\n "description": "Technical implementation paradigm: distributed service (service), dynamic/native library (dll), in-process module/function (function), or logical aggregator/Bounded Context (composite)."\r\n },\r\n "implements-use-cases": {\r\n "type": "array",\r\n "minItems": 1,\r\n "items": {\r\n "type": "string",\r\n "pattern": "^UC-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n }\r\n },\r\n "satisfies-requirements": {\r\n "type": "array",\r\n "items": {\r\n "type": "string",\r\n "pattern": "^(FR|QR|CON|SEC-REQ|SAF-REQ|PRIV-REQ)-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n }\r\n },\r\n "hosted-in-enclave": {\r\n "type": "string",\r\n "pattern": "^SEC-ENC-[A-Z0-9]+(-[A-Z0-9]+)*$",\r\n "description": "Security enclave where the component resides (optional for DLLs or in-process functions)."\r\n },\r\n "interfaces": {\r\n "type": "array",\r\n "items": {\r\n "type": "object",\r\n "required": ["name", "protocol"],\r\n "properties": {\r\n "name": { "type": "string" },\r\n "protocol": {\r\n "type": "string",\r\n "enum": [\r\n "REST/HTTP",\r\n "gRPC",\r\n "WebSocket",\r\n "Kafka",\r\n "MQTT",\r\n "C-ABI",\r\n "Native-ABI",\r\n "FFI",\r\n "In-Process API",\r\n "Function-Call",\r\n "CLI",\r\n "GUI",\r\n "IPC"\r\n ]\r\n },\r\n "contract-spec": { "type": "string" }\r\n }\r\n }\r\n },\r\n "supersedes": {\r\n "type": ["string", "null"],\r\n "pattern": "^CMP-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "superseded-by": {\r\n "type": ["string", "null"],\r\n "pattern": "^CMP-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n }\r\n },\r\n "additionalProperties": false\r\n}\r\n';
2850
+ var SCHEMA_SCHEMAS_ARCHITECTURE_INTRODUCTION_AND_GOALS_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/architecture/introduction-and-goals.schema.json",\r\n "title": "NAF v4 Enterprise & Capability / arc42 Introduction and System Goals Schema",\r\n "type": "object",\r\n "required": [\r\n "id",\r\n "type",\r\n "title",\r\n "status",\r\n "version",\r\n "naf-perspective",\r\n "cites-product-actors",\r\n "cites-quality-goals",\r\n "cites-use-cases"\r\n ],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^ARCH-INTRO-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "type": {\r\n "type": "string",\r\n "const": "architecture-introduction"\r\n },\r\n "version": {\r\n "type": "string",\r\n "pattern": "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9A-Za-z.-]+)?$",\r\n "description": "Artifact semantic version (SemVer)."\r\n },\r\n "schema-version": {\r\n "type": "string"\r\n },\r\n "title": {\r\n "type": "string",\r\n "minLength": 3\r\n },\r\n "status": {\r\n "type": "string",\r\n "enum": ["draft", "proposed", "accepted", "approved", "deprecated", "superseded"]\r\n },\r\n "owner": {\r\n "type": "string"\r\n },\r\n "arc42-section": {\r\n "type": "integer",\r\n "const": 1\r\n },\r\n "naf-perspective": {\r\n "type": "string",\r\n "const": "Enterprise & Capability"\r\n },\r\n "cites-product-actors": {\r\n "type": "array",\r\n "minItems": 1,\r\n "items": {\r\n "type": "string",\r\n "pattern": "^ACT-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n }\r\n },\r\n "cites-quality-goals": {\r\n "type": "array",\r\n "minItems": 1,\r\n "items": {\r\n "type": "string",\r\n "pattern": "^(QR|SEC-REQ|PRIV-REQ)-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n }\r\n },\r\n "cites-use-cases": {\r\n "type": "array",\r\n "minItems": 1,\r\n "items": {\r\n "type": "string",\r\n "pattern": "^UC-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n }\r\n },\r\n "supersedes": {\r\n "type": ["string", "null"],\r\n "pattern": "^ARCH-INTRO-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "superseded-by": {\r\n "type": ["string", "null"],\r\n "pattern": "^ARCH-INTRO-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n }\r\n },\r\n "additionalProperties": false\r\n}\r\n';
2743
2851
  var SCHEMA_SCHEMAS_COMPLIANCE_LICENSE_MANIFEST_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/compliance/license-manifest.schema.json",\r\n "title": "Static Dependencies License Manifest Schema",\r\n "type": "object",\r\n "required": ["evaluated_dependencies"],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^(MAN-LIC|LIC-MAN|LIC)-[A-Z0-9]+(-[A-Z0-9]+)*$",\r\n "description": "Optional canonical artifact identifier."\r\n },\r\n "type": {\r\n "type": "string",\r\n "const": "license-manifest"\r\n },\r\n "version": {\r\n "type": "string",\r\n "pattern": "^[0-9]+\\\\.[0-9]+(\\\\.[0-9]+)?(-[0-9A-Za-z.-]+)?$",\r\n "description": "Manifest format version."\r\n },\r\n "schema-version": {\r\n "type": "string"\r\n },\r\n "description": {\r\n "type": "string"\r\n },\r\n "generated_at": {\r\n "type": "string"\r\n },\r\n "evaluated_dependencies": {\r\n "type": "array",\r\n "minItems": 1,\r\n "items": {\r\n "type": "object",\r\n "required": ["package", "version", "spdx_license", "status"],\r\n "properties": {\r\n "package": {\r\n "type": "string",\r\n "minLength": 1\r\n },\r\n "version": {\r\n "type": "string",\r\n "minLength": 1\r\n },\r\n "spdx_license": {\r\n "type": "string",\r\n "minLength": 1\r\n },\r\n "status": {\r\n "type": "string",\r\n "enum": [\r\n "APPROVED",\r\n "REJECTED",\r\n "REVIEW_REQUIRED",\r\n "COMMERCIAL_APPROVAL_REQUIRED",\r\n "PENDING"\r\n ]\r\n },\r\n "reason": {\r\n "type": "string"\r\n },\r\n "approved_by": {\r\n "type": "string"\r\n }\r\n },\r\n "additionalProperties": false\r\n }\r\n }\r\n },\r\n "additionalProperties": false\r\n}\r\n';
2744
2852
  var SCHEMA_SCHEMAS_COMPLIANCE_LICENSE_POLICY_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/compliance/license-policy.schema.json",\r\n "title": "Open Source License Policy Schema",\r\n "type": "object",\r\n "required": ["version", "project", "default_action", "categories", "agent_guardrails", "ci_gates"],\r\n "properties": {\r\n "version": {\r\n "type": "string"\r\n },\r\n "project": {\r\n "type": "string"\r\n },\r\n "default_action": {\r\n "type": "string",\r\n "enum": ["ALLOW", "DENY", "REVIEW_REQUIRED"]\r\n },\r\n "categories": {\r\n "type": "object"\r\n },\r\n "agent_guardrails": {\r\n "type": "object",\r\n "required": ["enforce_pre_check", "reject_unknown_licenses"],\r\n "properties": {\r\n "enforce_pre_check": { "type": "boolean" },\r\n "reject_unknown_licenses": { "type": "boolean" },\r\n "auto_reject_categories": { "type": "array", "items": { "type": "string" } },\r\n "on_commercial_detected": { "type": "object" }\r\n }\r\n },\r\n "ci_gates": {\r\n "type": "object",\r\n "required": ["fail_on_denied", "generate_sbom"],\r\n "properties": {\r\n "fail_on_denied": { "type": "boolean" },\r\n "fail_on_missing_license": { "type": "boolean" },\r\n "generate_sbom": { "type": "boolean" },\r\n "sbom_format": { "type": "string" },\r\n "output_notices_file": { "type": "string" },\r\n "allowed_depth": { "type": "string", "enum": ["DIRECT", "TRANSITIVE"] }\r\n }\r\n }\r\n },\r\n "additionalProperties": false\r\n}\r\n';
2745
2853
  var SCHEMA_SCHEMAS_COMPLIANCE_QUALITY_POLICY_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/compliance/quality-policy.schema.json",\r\n "title": "Software Quality Policy Schema (Polyglot)",\r\n "type": "object",\r\n "required": ["version", "project", "enforcement_mode", "coding_rules", "release_thresholds", "agent_guardrails"],\r\n "properties": {\r\n "version": { "type": "string" },\r\n "project": { "type": "string" },\r\n "enforcement_mode": { "type": "string", "enum": ["STRICT", "PERMISSIVE"] },\r\n "scope": {\r\n "type": "object",\r\n "properties": {\r\n "target_directories": { "type": "array", "items": { "type": "string" } },\r\n "supported_extensions": { "type": "array", "items": { "type": "string" } },\r\n "exclude_patterns": { "type": "array", "items": { "type": "string" } }\r\n }\r\n },\r\n "language_toolchains": {\r\n "type": "object"\r\n },\r\n "coding_rules": {\r\n "type": "object",\r\n "required": ["standards", "enforce_formatting", "rules"],\r\n "properties": {\r\n "standards": { "type": "array", "items": { "type": "string" } },\r\n "enforce_formatting": { "type": "boolean" },\r\n "formatting_engine": { "type": "string" },\r\n "linter_engine": { "type": "string" },\r\n "rules": { "type": "object" }\r\n }\r\n },\r\n "release_thresholds": {\r\n "type": "object",\r\n "required": ["cyclomatic_complexity", "cognitive_complexity", "maintainability_index", "code_duplication", "test_coverage"],\r\n "properties": {\r\n "cyclomatic_complexity": {\r\n "type": "object",\r\n "required": ["max_per_function", "action_on_breach"],\r\n "properties": {\r\n "max_per_function": { "type": "integer" },\r\n "warning_at": { "type": "integer" },\r\n "action_on_breach": { "type": "string" }\r\n }\r\n },\r\n "cognitive_complexity": {\r\n "type": "object",\r\n "required": ["max_per_function", "action_on_breach"],\r\n "properties": {\r\n "max_per_function": { "type": "integer" },\r\n "warning_at": { "type": "integer" },\r\n "action_on_breach": { "type": "string" }\r\n }\r\n },\r\n "maintainability_index": {\r\n "type": "object",\r\n "required": ["min_acceptable_score", "action_on_breach"],\r\n "properties": {\r\n "min_acceptable_score": { "type": "number" },\r\n "target_score": { "type": "number" },\r\n "action_on_breach": { "type": "string" }\r\n }\r\n },\r\n "code_duplication": {\r\n "type": "object",\r\n "required": ["max_percentage", "action_on_breach"],\r\n "properties": {\r\n "max_percentage": { "type": "number" },\r\n "action_on_breach": { "type": "string" }\r\n }\r\n },\r\n "test_coverage": {\r\n "type": "object",\r\n "required": ["min_line_coverage_percent", "action_on_breach"],\r\n "properties": {\r\n "min_line_coverage_percent": { "type": "number" },\r\n "min_branch_coverage_percent": { "type": "number" },\r\n "min_function_coverage_percent": { "type": "number" },\r\n "action_on_breach": { "type": "string" }\r\n }\r\n },\r\n "technical_debt": {\r\n "type": "object"\r\n }\r\n }\r\n },\r\n "agent_guardrails": {\r\n "type": "object",\r\n "required": ["enforce_pre_commit_linter", "prevent_suppression_comments"],\r\n "properties": {\r\n "enforce_pre_commit_linter": { "type": "boolean" },\r\n "prevent_suppression_comments": { "type": "boolean" },\r\n "auto_refactor_on_high_complexity": { "type": "boolean" }\r\n }\r\n }\r\n },\r\n "additionalProperties": false\r\n}\r\n';
2746
2854
  var SCHEMA_SCHEMAS_IDE_MCP_CONFIG_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/ide/mcp-config.schema.json",\r\n "title": "IDE MCP Configuration Schema (Cursor, Antigravity, VS Code)",\r\n "type": "object",\r\n "properties": {\r\n "$schema": {\r\n "type": "string"\r\n },\r\n "id": {\r\n "type": "string",\r\n "pattern": "^(MCP-CFG|IDE-MCP|MCP)-[A-Z0-9]+(-[A-Z0-9]+)*$",\r\n "description": "Optional identifier for MCP configuration artifact."\r\n },\r\n "type": {\r\n "type": "string",\r\n "const": "mcp-config"\r\n },\r\n "mcpServers": {\r\n "type": "object",\r\n "additionalProperties": {\r\n "type": "object",\r\n "required": ["command"],\r\n "properties": {\r\n "command": {\r\n "type": "string",\r\n "minLength": 1\r\n },\r\n "args": {\r\n "type": "array",\r\n "items": {\r\n "type": "string"\r\n }\r\n },\r\n "env": {\r\n "type": "object"\r\n },\r\n "disabled": {\r\n "type": "boolean"\r\n },\r\n "alwaysAllow": {\r\n "type": "array",\r\n "items": {\r\n "type": "string"\r\n }\r\n }\r\n },\r\n "additionalProperties": false\r\n },\r\n "description": "MCP server registry format for Cursor and Antigravity."\r\n },\r\n "servers": {\r\n "type": "object",\r\n "additionalProperties": {\r\n "type": "object",\r\n "required": ["command"],\r\n "properties": {\r\n "command": {\r\n "type": "string",\r\n "minLength": 1\r\n },\r\n "args": {\r\n "type": "array",\r\n "items": {\r\n "type": "string"\r\n }\r\n },\r\n "env": {\r\n "type": "object"\r\n },\r\n "disabled": {\r\n "type": "boolean"\r\n },\r\n "alwaysAllow": {\r\n "type": "array",\r\n "items": {\r\n "type": "string"\r\n }\r\n }\r\n },\r\n "additionalProperties": false\r\n },\r\n "description": "MCP server registry format for VS Code."\r\n }\r\n },\r\n "additionalProperties": false\r\n}\r\n';
2747
2855
  var SCHEMA_SCHEMAS_MANUALS_PRODUCTION_MANUAL_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/manuals/production-manual.schema.json",\r\n "title": "AI-SDLC Production & Operations Manual Schema",\r\n "type": "object",\r\n "required": [\r\n "id",\r\n "type",\r\n "title",\r\n "status",\r\n "version",\r\n "applies-to-version",\r\n "target-audience"\r\n ],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^MAN-PROD-[A-Z0-9]+(-[A-Z0-9]+)*$",\r\n "description": "Immutable production manual identifier (e.g. MAN-PROD-SENTINELCORE)."\r\n },\r\n "type": {\r\n "type": "string",\r\n "const": "production-manual"\r\n },\r\n "version": {\r\n "type": "string",\r\n "pattern": "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9A-Za-z.-]+)?$",\r\n "description": "Document semantic version (SemVer)."\r\n },\r\n "schema-version": {\r\n "type": "string",\r\n "description": "Template schema version."\r\n },\r\n "title": {\r\n "type": "string",\r\n "minLength": 3,\r\n "description": "Descriptive title of the production manual."\r\n },\r\n "status": {\r\n "type": "string",\r\n "enum": ["draft", "active", "deprecated", "retired"]\r\n },\r\n "applies-to-version": {\r\n "type": "string",\r\n "description": "Software version or release this production manual applies to (e.g. v1.0.0)."\r\n },\r\n "target-audience": {\r\n "type": "array",\r\n "items": {\r\n "type": "string"\r\n },\r\n "minItems": 1,\r\n "description": "Target technical profiles (e.g. DevOps, SRE, Release Manager, SecOps)."\r\n },\r\n "components-covered": {\r\n "type": "array",\r\n "items": {\r\n "type": "string",\r\n "pattern": "^CMP-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "description": "Architecture components (CMP-*) deployed and covered by the manual."\r\n },\r\n "enclaves-involved": {\r\n "type": "array",\r\n "items": {\r\n "type": "string",\r\n "pattern": "^SEC-ENC-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "description": "Security enclaves (SEC-ENC-*) in which deployment executes."\r\n },\r\n "supersedes": {\r\n "type": ["string", "null"],\r\n "pattern": "^MAN-PROD-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "superseded-by": {\r\n "type": ["string", "null"],\r\n "pattern": "^MAN-PROD-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n }\r\n },\r\n "additionalProperties": false\r\n}\r\n';
2748
2856
  var SCHEMA_SCHEMAS_MANUALS_USER_MANUAL_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/manuals/user-manual.schema.json",\r\n "title": "AI-SDLC User Manual Schema",\r\n "type": "object",\r\n "required": [\r\n "id",\r\n "type",\r\n "title",\r\n "status",\r\n "version",\r\n "target-audience",\r\n "allowed-roles",\r\n "applies-to-version"\r\n ],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^MAN-USER-[A-Z0-9]+(-[A-Z0-9]+)*$",\r\n "description": "Immutable user manual identifier (e.g. MAN-USER-SENTINELCORE)."\r\n },\r\n "type": {\r\n "type": "string",\r\n "const": "user-manual"\r\n },\r\n "version": {\r\n "type": "string",\r\n "pattern": "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9A-Za-z.-]+)?$",\r\n "description": "Document semantic version (SemVer)."\r\n },\r\n "schema-version": {\r\n "type": "string",\r\n "description": "Template schema version."\r\n },\r\n "title": {\r\n "type": "string",\r\n "minLength": 3,\r\n "description": "Descriptive title of the user manual."\r\n },\r\n "status": {\r\n "type": "string",\r\n "enum": ["draft", "active", "deprecated", "retired"]\r\n },\r\n "applies-to-version": {\r\n "type": "string",\r\n "description": "Software version or release this manual applies to (e.g. v1.0.0)."\r\n },\r\n "target-audience": {\r\n "type": "array",\r\n "items": {\r\n "type": "string"\r\n },\r\n "minItems": 1,\r\n "description": "Target user profiles or roles for the manual."\r\n },\r\n "allowed-roles": {\r\n "type": "array",\r\n "items": {\r\n "type": "string"\r\n },\r\n "minItems": 1,\r\n "description": "Formal catalog of authorized roles to operate the application (linked to ACT-*)."\r\n },\r\n "journeys-covered": {\r\n "type": "array",\r\n "items": {\r\n "type": "string",\r\n "pattern": "^JRN-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "description": "Product journey identifiers (JRN-*) covered in the manual."\r\n },\r\n "use-cases-covered": {\r\n "type": "array",\r\n "items": {\r\n "type": "string",\r\n "pattern": "^UC-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "description": "Use case identifiers (UC-*) implemented across journeys."\r\n },\r\n "supersedes": {\r\n "type": ["string", "null"],\r\n "pattern": "^MAN-USER-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "superseded-by": {\r\n "type": ["string", "null"],\r\n "pattern": "^MAN-USER-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n }\r\n },\r\n "additionalProperties": false\r\n}\r\n';
2857
+ var SCHEMA_SCHEMAS_PRIVACY_DATA_ASSET_SCHEMA_JSON = '{\n "$schema": "https://json-schema.org/draft/2020-12/schema",\n "$id": "https://ai-sdlc.org/schemas/privacy/data-asset.schema.json",\n "title": "Personal Data Asset & PII Inventory Schema (DATA-ASSET-*)",\n "type": "object",\n "required": [\n "id",\n "type",\n "title",\n "status",\n "version",\n "classification",\n "pii-categories",\n "data-subjects",\n "retention-period",\n "erasure-method"\n ],\n "properties": {\n "id": {\n "type": "string",\n "pattern": "^DATA-ASSET-[A-Z0-9]+(-[A-Z0-9]+)*$"\n },\n "type": {\n "type": "string",\n "const": "data-asset"\n },\n "version": {\n "type": "string",\n "pattern": "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9A-Za-z.-]+)?$",\n "description": "Data asset semantic version (SemVer)."\n },\n "schema-version": {\n "type": "string"\n },\n "title": {\n "type": "string",\n "minLength": 3\n },\n "status": {\n "type": "string",\n "enum": ["draft", "active", "deprecated", "retired"]\n },\n "classification": {\n "type": "string",\n "enum": [\n "public",\n "internal",\n "confidential-pii",\n "special-category-sensitive"\n ],\n "description": "Data sensitivity classification aligned with privacy-policy.yaml."\n },\n "pii-categories": {\n "type": "array",\n "minItems": 1,\n "items": {\n "type": "string",\n "enum": [\n "identifiers",\n "contact",\n "authentication",\n "financial",\n "location",\n "behavioral",\n "biometric",\n "health",\n "telemetry-operator"\n ]\n }\n },\n "data-subjects": {\n "type": "array",\n "minItems": 1,\n "items": {\n "type": "string",\n "pattern": "^ACT-[A-Z0-9]+(-[A-Z0-9]+)*$"\n },\n "description": "Product actors (ACT-*) whose personal data is stored or processed."\n },\n "fields": {\n "type": "array",\n "items": {\n "type": "object",\n "required": ["name", "sensitivity", "masking-strategy"],\n "properties": {\n "name": {\n "type": "string",\n "minLength": 1\n },\n "sensitivity": {\n "type": "string",\n "enum": ["public", "internal", "pii", "special-category"]\n },\n "masking-strategy": {\n "type": "string",\n "enum": [\n "none",\n "redact",\n "sha256-salt",\n "tokenize",\n "aes-256-gcm",\n "truncate"\n ]\n }\n },\n "additionalProperties": false\n }\n },\n "retention-period": {\n "type": "string",\n "pattern": "^([0-9]+(d|m|y)|session-only|indefinite-anonymized)$",\n "description": "Maximum retention TTL (e.g. 30d, 12m, 5y, session-only, indefinite-anonymized)."\n },\n "erasure-method": {\n "type": "string",\n "enum": [\n "hard-delete",\n "crypto-shredding",\n "irreversible-anonymization"\n ]\n },\n "owner-bounded-context": {\n "type": "string",\n "pattern": "^(BC|CMP)-[A-Z0-9]+(-[A-Z0-9]+)*$"\n },\n "supersedes": {\n "type": ["string", "null"],\n "pattern": "^DATA-ASSET-[A-Z0-9]+(-[A-Z0-9]+)*$"\n },\n "superseded-by": {\n "type": ["string", "null"],\n "pattern": "^DATA-ASSET-[A-Z0-9]+(-[A-Z0-9]+)*$"\n }\n },\n "additionalProperties": false\n}\n';
2858
+ var SCHEMA_SCHEMAS_PRIVACY_PRIVACY_POLICY_SCHEMA_JSON = '{\n "$schema": "https://json-schema.org/draft/2020-12/schema",\n "$id": "https://ai-sdlc.org/schemas/privacy/privacy-policy.schema.json",\n "title": "Privacy-by-Design as Code Governance Policy Schema",\n "type": "object",\n "required": [\n "version",\n "project",\n "regulatory_frameworks",\n "default_action",\n "classifications",\n "agent_guardrails",\n "ci_gates"\n ],\n "properties": {\n "id": {\n "type": "string",\n "pattern": "^(PRIV-POL|POL-PRIV)-[A-Z0-9]+(-[A-Z0-9]+)*$"\n },\n "type": {\n "type": "string",\n "const": "privacy-policy"\n },\n "version": {\n "type": "string",\n "minLength": 1\n },\n "project": {\n "type": "string",\n "minLength": 1\n },\n "regulatory_frameworks": {\n "type": "array",\n "minItems": 1,\n "items": {\n "type": "string",\n "enum": ["GDPR", "LOPDGDD", "ISO-27701", "CCPA", "HIPAA", "LGPD"]\n }\n },\n "default_action": {\n "type": "string",\n "enum": ["DENY_UNREGISTERED_PII", "ALLOW", "REVIEW_REQUIRED"]\n },\n "classifications": {\n "type": "object",\n "required": ["public", "internal", "confidential_pii", "special_category_sensitive"],\n "additionalProperties": {\n "type": "object",\n "required": ["action", "encryption_at_rest", "encryption_in_transit", "allow_in_logs", "allow_in_ai_prompts"],\n "properties": {\n "action": {\n "type": "string",\n "enum": ["ALLOW", "STRICT_GOVERNANCE", "DPIA_APPROVAL_REQUIRED", "DENY"]\n },\n "description": { "type": "string" },\n "exception_requires": { "type": "string" },\n "require_ropa_entry": { "type": "boolean" },\n "require_dpia_artifact": { "type": "boolean" },\n "encryption_at_rest": { "type": "boolean" },\n "encryption_in_transit": { "type": "boolean" },\n "require_field_level_encryption": { "type": "boolean" },\n "allow_in_logs": { "type": "boolean" },\n "log_masking_strategy": { "type": "string" },\n "allow_in_ai_prompts": { "type": "boolean" },\n "max_retention_days": { "type": "integer", "minimum": 1 },\n "require_right_to_erasure": { "type": "boolean" }\n },\n "additionalProperties": false\n }\n },\n "cross_border_transfers": {\n "type": "object",\n "properties": {\n "allowed_regions": {\n "type": "array",\n "items": { "type": "string" }\n },\n "require_scc_for_third_countries": { "type": "boolean" },\n "approved_subprocessors": {\n "type": "array",\n "items": { "type": "string" }\n }\n },\n "additionalProperties": false\n },\n "agent_guardrails": {\n "type": "object",\n "required": [\n "forbid_real_pii_in_tests",\n "forbid_pii_in_console_or_logger",\n "require_dto_projection_for_pii"\n ],\n "properties": {\n "forbid_real_pii_in_tests": { "type": "boolean" },\n "forbid_pii_in_console_or_logger": { "type": "boolean" },\n "require_dto_projection_for_pii": { "type": "boolean" },\n "on_special_category_detected": {\n "type": "object",\n "required": ["action", "notification_tag", "message"],\n "properties": {\n "action": { "type": "string" },\n "notification_tag": { "type": "string" },\n "message": { "type": "string" }\n },\n "additionalProperties": false\n }\n },\n "additionalProperties": false\n },\n "ci_gates": {\n "type": "object",\n "required": [\n "fail_on_unregistered_pii",\n "fail_on_pii_in_logs",\n "fail_on_missing_retention_policy",\n "generate_ropa_inventory",\n "output_ropa_file",\n "output_privacy_report"\n ],\n "properties": {\n "fail_on_unregistered_pii": { "type": "boolean" },\n "fail_on_pii_in_logs": { "type": "boolean" },\n "fail_on_missing_retention_policy": { "type": "boolean" },\n "fail_on_unapproved_subprocessor": { "type": "boolean" },\n "generate_ropa_inventory": { "type": "boolean" },\n "output_ropa_file": { "type": "string" },\n "output_privacy_report": { "type": "string" }\n },\n "additionalProperties": false\n }\n },\n "additionalProperties": false\n}\n';
2859
+ var SCHEMA_SCHEMAS_PRIVACY_PRIVACY_REQ_SCHEMA_JSON = '{\n "$schema": "https://json-schema.org/draft/2020-12/schema",\n "$id": "https://ai-sdlc.org/schemas/privacy/privacy-req.schema.json",\n "title": "Privacy Requirement & Technical Control Schema (PRIV-REQ-*)",\n "type": "object",\n "required": [\n "id",\n "type",\n "title",\n "status",\n "version",\n "privacy-principle",\n "linddun-category",\n "governs-ropa"\n ],\n "properties": {\n "id": {\n "type": "string",\n "pattern": "^PRIV-REQ-[A-Z0-9]+(-[A-Z0-9]+)*$"\n },\n "type": {\n "type": "string",\n "const": "privacy-requirement"\n },\n "version": {\n "type": "string",\n "pattern": "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9A-Za-z.-]+)?$",\n "description": "Privacy requirement semantic version (SemVer)."\n },\n "schema-version": {\n "type": "string"\n },\n "title": {\n "type": "string",\n "minLength": 3\n },\n "status": {\n "type": "string",\n "enum": ["draft", "active", "deprecated", "retired"]\n },\n "privacy-principle": {\n "type": "string",\n "enum": [\n "data-minimization",\n "purpose-limitation",\n "storage-limitation",\n "accuracy",\n "integrity-and-confidentiality",\n "transparency-and-consent",\n "data-subject-rights-arco",\n "pseudonymization-anonymization"\n ]\n },\n "linddun-category": {\n "type": "string",\n "enum": [\n "linkability",\n "identifiability",\n "non-repudiation",\n "detectability",\n "disclosure-of-information",\n "unawareness",\n "non-compliance"\n ],\n "description": "LINDDUN privacy threat category mitigated by this control."\n },\n "governs-ropa": {\n "type": "array",\n "minItems": 1,\n "items": {\n "type": "string",\n "pattern": "^PRIV-ROPA-[A-Z0-9]+(-[A-Z0-9]+)*$"\n },\n "description": "Upstream ROPA records (PRIV-ROPA-*) governed by this privacy requirement."\n },\n "protects-data-assets": {\n "type": "array",\n "items": {\n "type": "string",\n "pattern": "^DATA-ASSET-[A-Z0-9]+(-[A-Z0-9]+)*$"\n }\n },\n "enforced-in-enclave": {\n "type": "string",\n "pattern": "^SEC-ENC-[A-Z0-9]+(-[A-Z0-9]+)*$"\n },\n "compliance-references": {\n "type": "array",\n "items": {\n "type": "string"\n }\n },\n "acceptance-format": {\n "type": "string",\n "enum": ["gherkin", "declarative-prose"]\n },\n "cucumber-tags": {\n "type": "array",\n "items": {\n "type": "string",\n "pattern": "^@[a-zA-Z0-9_-]+$"\n }\n },\n "supersedes": {\n "type": ["string", "null"],\n "pattern": "^PRIV-REQ-[A-Z0-9]+(-[A-Z0-9]+)*$"\n },\n "superseded-by": {\n "type": ["string", "null"],\n "pattern": "^PRIV-REQ-[A-Z0-9]+(-[A-Z0-9]+)*$"\n }\n },\n "additionalProperties": false\n}\n';
2860
+ var SCHEMA_SCHEMAS_PRIVACY_PRIVACY_ROPA_SCHEMA_JSON = '{\n "$schema": "https://json-schema.org/draft/2020-12/schema",\n "$id": "https://ai-sdlc.org/schemas/privacy/privacy-ropa.schema.json",\n "title": "Record of Processing Activities Schema (PRIV-ROPA-* / GDPR Art. 30)",\n "type": "object",\n "required": [\n "id",\n "type",\n "title",\n "status",\n "version",\n "lawful-basis",\n "processing-purpose",\n "use-cases",\n "data-assets",\n "data-subjects",\n "retention-ttl"\n ],\n "properties": {\n "id": {\n "type": "string",\n "pattern": "^PRIV-ROPA-[A-Z0-9]+(-[A-Z0-9]+)*$"\n },\n "type": {\n "type": "string",\n "const": "privacy-ropa"\n },\n "version": {\n "type": "string",\n "pattern": "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9A-Za-z.-]+)?$",\n "description": "ROPA record semantic version (SemVer)."\n },\n "schema-version": {\n "type": "string"\n },\n "title": {\n "type": "string",\n "minLength": 3\n },\n "status": {\n "type": "string",\n "enum": ["draft", "active", "deprecated", "retired"]\n },\n "lawful-basis": {\n "type": "string",\n "enum": [\n "consent",\n "contract",\n "legal-obligation",\n "vital-interests",\n "public-task",\n "legitimate-interests"\n ],\n "description": "Lawful basis for processing under GDPR Art. 6.1."\n },\n "special-category-condition": {\n "type": ["string", "null"],\n "enum": [\n null,\n "explicit-consent",\n "employment-social-security",\n "vital-interests",\n "public-interest",\n "preventive-medicine",\n "public-health"\n ],\n "description": "GDPR Art. 9.2 condition when processing special category data."\n },\n "processing-purpose": {\n "type": "string",\n "minLength": 10\n },\n "use-cases": {\n "type": "array",\n "minItems": 1,\n "items": {\n "type": "string",\n "pattern": "^UC-[A-Z0-9]+(-[A-Z0-9]+)*$"\n },\n "description": "Upstream Use Cases (UC-*) that trigger this data processing activity."\n },\n "data-assets": {\n "type": "array",\n "minItems": 1,\n "items": {\n "type": "string",\n "pattern": "^DATA-ASSET-[A-Z0-9]+(-[A-Z0-9]+)*$"\n },\n "description": "Personal Data Assets (DATA-ASSET-*) processed in this activity."\n },\n "data-subjects": {\n "type": "array",\n "minItems": 1,\n "items": {\n "type": "string",\n "pattern": "^ACT-[A-Z0-9]+(-[A-Z0-9]+)*$"\n }\n },\n "retention-ttl": {\n "type": "string",\n "pattern": "^([0-9]+(d|m|y)|session-only|indefinite-anonymized)$"\n },\n "cross-border-transfer": {\n "type": "boolean"\n },\n "transfer-safeguards": {\n "type": ["string", "null"],\n "enum": [null, "adequacy-decision", "scc", "bcr", "derogation"]\n },\n "subprocessors": {\n "type": "array",\n "items": {\n "type": "string"\n }\n },\n "dpia-required": {\n "type": "boolean"\n },\n "dpia-reference": {\n "type": ["string", "null"],\n "pattern": "^DPIA-[A-Z0-9]+(-[A-Z0-9]+)*$"\n },\n "mitigated-by": {\n "type": "array",\n "items": {\n "type": "string",\n "pattern": "^PRIV-REQ-[A-Z0-9]+(-[A-Z0-9]+)*$"\n },\n "description": "Privacy requirements (PRIV-REQ-*) governing and enforcing this processing activity."\n },\n "supersedes": {\n "type": ["string", "null"],\n "pattern": "^PRIV-ROPA-[A-Z0-9]+(-[A-Z0-9]+)*$"\n },\n "superseded-by": {\n "type": ["string", "null"],\n "pattern": "^PRIV-ROPA-[A-Z0-9]+(-[A-Z0-9]+)*$"\n }\n },\n "additionalProperties": false\n}\n';
2749
2861
  var SCHEMA_SCHEMAS_PRODUCT_ACTOR_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/product/actor.schema.json",\r\n "title": "ProductShape Actor Schema (Versionable)",\r\n "type": "object",\r\n "required": ["id", "type", "title", "status", "version", "role-type"],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^ACT-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "type": {\r\n "type": "string",\r\n "const": "actor"\r\n },\r\n "version": {\r\n "type": "string",\r\n "pattern": "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9A-Za-z.-]+)?$",\r\n "description": "Artifact semantic version (SemVer)."\r\n },\r\n "schema-version": {\r\n "type": "string",\r\n "description": "Schema specification version used."\r\n },\r\n "title": {\r\n "type": "string",\r\n "minLength": 3\r\n },\r\n "status": {\r\n "type": "string",\r\n "enum": ["draft", "active", "deprecated", "retired"]\r\n },\r\n "role-type": {\r\n "type": "string",\r\n "enum": ["human-user", "ai-agent", "external-system", "sensor-iot"]\r\n },\r\n "description": {\r\n "type": "string"\r\n },\r\n "supersedes": {\r\n "type": ["string", "null"],\r\n "pattern": "^ACT-[A-Z0-9]+(-[A-Z0-9]+)*$",\r\n "description": "Identifier of the actor superseded by this version or artifact."\r\n },\r\n "superseded-by": {\r\n "type": ["string", "null"],\r\n "pattern": "^ACT-[A-Z0-9]+(-[A-Z0-9]+)*$",\r\n "description": "Identifier of the new actor superseding this one upon deprecation/retirement."\r\n }\r\n },\r\n "additionalProperties": false\r\n}\r\n';
2750
2862
  var SCHEMA_SCHEMAS_PRODUCT_BUSINESS_RULE_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/product/business-rule.schema.json",\r\n "title": "ProductShape Business Rule Schema (Versionable)",\r\n "type": "object",\r\n "required": ["id", "type", "title", "status", "version", "enforcement-level"],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^BR-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "type": {\r\n "type": "string",\r\n "const": "business-rule"\r\n },\r\n "version": {\r\n "type": "string",\r\n "pattern": "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9A-Za-z.-]+)?$",\r\n "description": "Business rule semantic version (SemVer)."\r\n },\r\n "schema-version": {\r\n "type": "string"\r\n },\r\n "title": {\r\n "type": "string",\r\n "minLength": 3\r\n },\r\n "status": {\r\n "type": "string",\r\n "enum": ["draft", "active", "deprecated", "retired"]\r\n },\r\n "enforcement-level": {\r\n "type": "string",\r\n "enum": ["strict-invariant", "override-with-approval", "guideline"]\r\n },\r\n "defined-in": {\r\n "type": "string",\r\n "pattern": "^BC-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "uses-terms": {\r\n "type": "array",\r\n "items": {\r\n "type": "string",\r\n "pattern": "^TERM-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n }\r\n },\r\n "supersedes": {\r\n "type": ["string", "null"],\r\n "pattern": "^BR-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "superseded-by": {\r\n "type": ["string", "null"],\r\n "pattern": "^BR-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n }\r\n },\r\n "additionalProperties": false\r\n}\r\n';
2751
2863
  var SCHEMA_SCHEMAS_PRODUCT_JOURNEY_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/product/journey.schema.json",\r\n "title": "Customer / Operator Journey Schema",\r\n "type": "object",\r\n "required": [\r\n "id",\r\n "type",\r\n "title",\r\n "status",\r\n "version",\r\n "persona",\r\n "stages",\r\n "touchpoints"\r\n ],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^JRN-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "type": {\r\n "type": "string",\r\n "const": "journey"\r\n },\r\n "version": {\r\n "type": "string",\r\n "pattern": "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9A-Za-z.-]+)?$",\r\n "description": "Journey semantic version (SemVer)."\r\n },\r\n "schema-version": {\r\n "type": "string"\r\n },\r\n "title": {\r\n "type": "string",\r\n "minLength": 3\r\n },\r\n "status": {\r\n "type": "string",\r\n "enum": ["draft", "active", "deprecated", "retired"]\r\n },\r\n "persona": {\r\n "type": "string",\r\n "pattern": "^ACT-[A-Z0-9]+(-[A-Z0-9]+)*$",\r\n "description": "Actor (persona) starring in this journey."\r\n },\r\n "stages": {\r\n "type": "array",\r\n "minItems": 1,\r\n "items": {\r\n "type": "string"\r\n },\r\n "description": "Sequential journey stages (e.g. Awareness, Onboarding, Activation, Retention)."\r\n },\r\n "touchpoints": {\r\n "type": "array",\r\n "minItems": 1,\r\n "items": {\r\n "type": "string"\r\n },\r\n "description": "Touchpoints between persona and system at each stage."\r\n },\r\n "related-use-cases": {\r\n "type": "array",\r\n "items": {\r\n "type": "string",\r\n "pattern": "^UC-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "description": "System use cases related to this journey."\r\n },\r\n "pain-points": {\r\n "type": "array",\r\n "items": {\r\n "type": "string"\r\n },\r\n "description": "Frictions or issues detected along the user journey."\r\n },\r\n "supersedes": {\r\n "type": ["string", "null"]\r\n },\r\n "superseded-by": {\r\n "type": ["string", "null"]\r\n }\r\n },\r\n "additionalProperties": false\r\n}\r\n';
@@ -2755,12 +2867,12 @@ var SCHEMA_SCHEMAS_PRODUCT_USE_CASE_SCHEMA_JSON = '{\r\n "$schema": "https://js
2755
2867
  var SCHEMA_SCHEMAS_SAFETY_HAZARD_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/safety/hazard.schema.json",\r\n "title": "Hazard Schema (Operational Hazard & Safety Risk Analysis)",\r\n "type": "object",\r\n "required": [\r\n "id",\r\n "type",\r\n "title",\r\n "status",\r\n "version",\r\n "severity",\r\n "probability",\r\n "fault-tolerance-time-ms",\r\n "mitigated-by"\r\n ],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^HAZ-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "type": {\r\n "type": "string",\r\n "const": "hazard"\r\n },\r\n "version": {\r\n "type": "string",\r\n "pattern": "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9A-Za-z.-]+)?$",\r\n "description": "Hazard semantic version (SemVer)."\r\n },\r\n "schema-version": {\r\n "type": "string"\r\n },\r\n "title": {\r\n "type": "string",\r\n "minLength": 3\r\n },\r\n "status": {\r\n "type": "string",\r\n "enum": ["draft", "active", "deprecated", "retired"]\r\n },\r\n "severity": {\r\n "type": "string",\r\n "enum": ["catastrophic", "critical", "major", "minor", "negligible"],\r\n "description": "Hazard severity per functional safety classification (DO-178C / ISO 26262)."\r\n },\r\n "probability": {\r\n "type": "string",\r\n "enum": ["frequent", "probable", "occasional", "remote", "improbable", "extremely-improbable"],\r\n "description": "Probability of operational hazard occurrence."\r\n },\r\n "fault-tolerance-time-ms": {\r\n "type": "number",\r\n "minimum": 0,\r\n "description": "Fault tolerance time interval (FTTI) limit in milliseconds before entering safe state."\r\n },\r\n "mitigated-by": {\r\n "type": "array",\r\n "minItems": 1,\r\n "items": {\r\n "type": "string",\r\n "pattern": "^SAF-REQ-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "description": "Safety requirements mitigating this hazard."\r\n },\r\n "hazardous-condition": {\r\n "type": "string",\r\n "description": "Description of the dangerous operational condition."\r\n },\r\n "potential-effect": {\r\n "type": "string",\r\n "description": "Potential effect on people, aircraft, or environment if hazard materializes."\r\n },\r\n "supersedes": {\r\n "type": ["string", "null"]\r\n },\r\n "superseded-by": {\r\n "type": ["string", "null"]\r\n }\r\n },\r\n "additionalProperties": false\r\n}\r\n';
2756
2868
  var SCHEMA_SCHEMAS_SAFETY_SAFETY_REQ_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/safety/safety-req.schema.json",\r\n "title": "Safety Requirement Schema (Functional Safety & Hazard Mitigation)",\r\n "type": "object",\r\n "required": [\r\n "id",\r\n "type",\r\n "title",\r\n "status",\r\n "version",\r\n "safety-domain",\r\n "safety-integrity-level",\r\n "mitigates-hazard",\r\n "fail-safe-action"\r\n ],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^SAF-REQ-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "type": {\r\n "type": "string",\r\n "const": "safety-requirement"\r\n },\r\n "version": {\r\n "type": "string",\r\n "pattern": "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9A-Za-z.-]+)?$",\r\n "description": "Safety requirement semantic version (SemVer)."\r\n },\r\n "schema-version": {\r\n "type": "string"\r\n },\r\n "title": {\r\n "type": "string",\r\n "minLength": 3\r\n },\r\n "status": {\r\n "type": "string",\r\n "enum": ["draft", "active", "deprecated", "retired"]\r\n },\r\n "safety-domain": {\r\n "type": "string",\r\n "enum": [\r\n "flight-control",\r\n "collision-avoidance",\r\n "energy-management",\r\n "emergency-recovery",\r\n "sensor-integrity",\r\n "propulsion",\r\n "telemetry"\r\n ],\r\n "description": "Operational safety domain."\r\n },\r\n "safety-integrity-level": {\r\n "type": "string",\r\n "description": "Safety integrity level (e.g. DAL-A..D, ASIL-A..D, SIL-1..4)."\r\n },\r\n "mitigates-hazard": {\r\n "type": "array",\r\n "minItems": 1,\r\n "items": {\r\n "type": "string",\r\n "pattern": "^HAZ-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "description": "Operational hazards mitigated by safety control."\r\n },\r\n "fail-safe-action": {\r\n "type": "string",\r\n "description": "Automatic action or contingency maneuver to enter safe state."\r\n },\r\n "fault-tolerance-time-ms": {\r\n "type": "number",\r\n "description": "Fault tolerance time interval limit in milliseconds (FTTI)."\r\n },\r\n "acceptance-format": {\r\n "type": "string",\r\n "enum": ["gherkin", "declarative-prose"]\r\n },\r\n "cucumber-tags": {\r\n "type": "array",\r\n "items": {\r\n "type": "string"\r\n }\r\n },\r\n "supersedes": {\r\n "type": ["string", "null"]\r\n },\r\n "superseded-by": {\r\n "type": ["string", "null"]\r\n }\r\n },\r\n "additionalProperties": false\r\n}\r\n';
2757
2869
  var SCHEMA_SCHEMAS_SDD_DESIGN_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/sdd/design.schema.json",\r\n "title": "Spec-Driven Development Technical Design Schema (DSG-*)",\r\n "type": "object",\r\n "required": ["id", "type", "title"],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^(DSG-[A-Z0-9]+(-[A-Z0-9]+)*|CHG-[A-Z0-9]+-DESIGN|[A-Z0-9]+(-[A-Z0-9]+)*)$",\r\n "description": "Unique identifier of the technical design specification."\r\n },\r\n "type": {\r\n "type": "string",\r\n "enum": ["spec-design", "spec-change-design", "design"]\r\n },\r\n "change-id": {\r\n "type": "string",\r\n "pattern": "^(CHG|FEAT|PATCH)-[A-Z0-9]+(-[A-Z0-9]+)*$",\r\n "description": "Parent change identifier associated with this design."\r\n },\r\n "title": {\r\n "type": "string",\r\n "minLength": 3\r\n },\r\n "version": {\r\n "type": "string",\r\n "pattern": "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9A-Za-z.-]+)?$",\r\n "description": "Semantic versioning (SemVer)."\r\n },\r\n "schema-version": {\r\n "type": "string"\r\n },\r\n "handoff": {\r\n "type": "string",\r\n "pattern": "^HOF-[A-Z0-9]+(-[A-Z0-9]+)*$",\r\n "description": "Reference to the HOF-* sidecar."\r\n },\r\n "architecture-component": {\r\n "type": "string",\r\n "pattern": "^CMP-[A-Z0-9]+(-[A-Z0-9]+)*$",\r\n "description": "Associated architecture component."\r\n },\r\n "architecture-components": {\r\n "type": "array",\r\n "items": {\r\n "type": "string",\r\n "pattern": "^CMP-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "description": "List of architecture components covered by this technical design."\r\n },\r\n "enclave": {\r\n "type": "string",\r\n "pattern": "^(SEC-ENC-)?[A-Z0-9]+(-[A-Z0-9]+)*$",\r\n "description": "Zero trust security enclave."\r\n },\r\n "status": {\r\n "type": "string",\r\n "enum": [\r\n "draft",\r\n "proposed",\r\n "review",\r\n "approved",\r\n "active",\r\n "completed",\r\n "deprecated"\r\n ]\r\n },\r\n "author": {\r\n "type": "string"\r\n },\r\n "date": {\r\n "type": "string"\r\n },\r\n "contracts": {\r\n "type": "array",\r\n "description": "Explicit contract interfaces and methods designed for implementation and unit testing.",\r\n "items": {\r\n "oneOf": [\r\n { "type": "string", "minLength": 1 },\r\n {\r\n "type": "object",\r\n "required": ["methods"],\r\n "properties": {\r\n "component": { "type": "string" },\r\n "interface": { "type": "string" },\r\n "methods": {\r\n "type": "array",\r\n "minItems": 1,\r\n "items": { "type": "string", "minLength": 1 }\r\n }\r\n },\r\n "additionalProperties": false\r\n }\r\n ]\r\n }\r\n },\r\n "citations": {\r\n "type": "array",\r\n "items": {\r\n "type": "object",\r\n "required": ["id"],\r\n "properties": {\r\n "id": { "type": "string" },\r\n "digest": { "type": "string" },\r\n "comment": { "type": "string" },\r\n "anchor": { "type": "string" }\r\n },\r\n "additionalProperties": false\r\n }\r\n }\r\n },\r\n "additionalProperties": false\r\n}\r\n';
2758
- var SCHEMA_SCHEMAS_SDD_HANDOFF_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/sdd/handoff.schema.json",\r\n "title": "PDaC Product Handoff Sidecar Schema (HOF-*)",\r\n "type": "object",\r\n "required": ["id", "type", "changeId", "subgraph"],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^HOF-[A-Z0-9]+(-[A-Z0-9]+)*$",\r\n "description": "Immutable identifier emitted by PDaC handoff."\r\n },\r\n "type": {\r\n "type": "string",\r\n "enum": ["handoff", "product-handoff"]\r\n },\r\n "title": {\r\n "type": "string",\r\n "minLength": 3\r\n },\r\n "changeId": {\r\n "type": "string",\r\n "pattern": "^(CHG|FEAT)-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "version": {\r\n "type": "string",\r\n "pattern": "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9A-Za-z.-]+)?$"\r\n },\r\n "createdAt": {\r\n "type": "string"\r\n },\r\n "subgraph": {\r\n "type": "object",\r\n "required": ["requirements"],\r\n "properties": {\r\n "requirements": {\r\n "type": "array",\r\n "minItems": 1,\r\n "items": { "type": "string" }\r\n },\r\n "useCases": {\r\n "type": "array",\r\n "items": { "type": "string" }\r\n },\r\n "businessRules": {\r\n "type": "array",\r\n "items": { "type": "string" }\r\n },\r\n "securityRequirements": {\r\n "type": "array",\r\n "items": { "type": "string" }\r\n },\r\n "abuseCases": {\r\n "type": "array",\r\n "items": { "type": "string" }\r\n },\r\n "actors": {\r\n "type": "array",\r\n "items": { "type": "string" }\r\n }\r\n },\r\n "additionalProperties": true\r\n },\r\n "citations": {\r\n "type": "array",\r\n "items": {\r\n "type": "object",\r\n "required": ["id"],\r\n "properties": {\r\n "id": { "type": "string" },\r\n "digest": { "type": "string" },\r\n "anchor": { "type": "string" },\r\n "comment": { "type": "string" }\r\n }\r\n }\r\n }\r\n },\r\n "additionalProperties": true\r\n}\r\n';
2870
+ var SCHEMA_SCHEMAS_SDD_HANDOFF_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/sdd/handoff.schema.json",\r\n "title": "PDaC Product Handoff Sidecar Schema (HOF-*)",\r\n "type": "object",\r\n "required": ["id", "type", "changeId", "subgraph"],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^HOF-[A-Z0-9]+(-[A-Z0-9]+)*$",\r\n "description": "Immutable identifier emitted by PDaC handoff."\r\n },\r\n "type": {\r\n "type": "string",\r\n "enum": ["handoff", "product-handoff"]\r\n },\r\n "title": {\r\n "type": "string",\r\n "minLength": 3\r\n },\r\n "changeId": {\r\n "type": "string",\r\n "pattern": "^(CHG|FEAT)-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "version": {\r\n "type": "string",\r\n "pattern": "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9A-Za-z.-]+)?$"\r\n },\r\n "createdAt": {\r\n "type": "string"\r\n },\r\n "subgraph": {\r\n "type": "object",\r\n "required": ["requirements"],\r\n "properties": {\r\n "requirements": {\r\n "type": "array",\r\n "minItems": 1,\r\n "items": { "type": "string" }\r\n },\r\n "useCases": {\r\n "type": "array",\r\n "items": { "type": "string" }\r\n },\r\n "businessRules": {\r\n "type": "array",\r\n "items": { "type": "string" }\r\n },\r\n "securityRequirements": {\r\n "type": "array",\r\n "items": { "type": "string" }\r\n },\r\n "abuseCases": {\r\n "type": "array",\r\n "items": { "type": "string" }\r\n },\r\n "privacyRequirements": {\r\n "type": "array",\r\n "items": { "type": "string" }\r\n },\r\n "dataAssets": {\r\n "type": "array",\r\n "items": { "type": "string" }\r\n },\r\n "privacyRopa": {\r\n "type": "array",\r\n "items": { "type": "string" }\r\n },\r\n "actors": {\r\n "type": "array",\r\n "items": { "type": "string" }\r\n }\r\n },\r\n "additionalProperties": true\r\n },\r\n "citations": {\r\n "type": "array",\r\n "items": {\r\n "type": "object",\r\n "required": ["id"],\r\n "properties": {\r\n "id": { "type": "string" },\r\n "digest": { "type": "string" },\r\n "anchor": { "type": "string" },\r\n "comment": { "type": "string" }\r\n }\r\n }\r\n }\r\n },\r\n "additionalProperties": true\r\n}\r\n';
2759
2871
  var SCHEMA_SCHEMAS_SDD_PROPOSAL_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/sdd/proposal.schema.json",\r\n "title": "Spec-Driven Development Change Proposal Schema (CHG-*)",\r\n "type": "object",\r\n "required": ["id", "type", "title", "status"],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^(CHG|FEAT|PATCH)-[A-Z0-9]+(-[A-Z0-9]+)*$",\r\n "description": "Unique identifier of the change proposal."\r\n },\r\n "type": {\r\n "type": "string",\r\n "enum": ["spec-change-proposal", "proposal"]\r\n },\r\n "title": {\r\n "type": "string",\r\n "minLength": 3\r\n },\r\n "status": {\r\n "type": "string",\r\n "enum": [\r\n "draft",\r\n "proposed",\r\n "review",\r\n "approved",\r\n "applied",\r\n "active",\r\n "completed",\r\n "rejected"\r\n ]\r\n },\r\n "author": {\r\n "type": "string"\r\n },\r\n "version": {\r\n "type": "string",\r\n "pattern": "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9A-Za-z.-]+)?$",\r\n "description": "Semantic versioning (SemVer)."\r\n },\r\n "schema-version": {\r\n "type": "string"\r\n },\r\n "date": {\r\n "type": "string"\r\n },\r\n "handoff": {\r\n "type": "string",\r\n "description": "Associated handoff sidecar reference."\r\n },\r\n "sdd-framework-compat": {\r\n "type": "array",\r\n "items": {\r\n "type": "string"\r\n },\r\n "description": "Supported SDD framework adapters."\r\n },\r\n "citations": {\r\n "type": "array",\r\n "items": {\r\n "type": "object",\r\n "required": ["id"],\r\n "properties": {\r\n "id": { "type": "string" },\r\n "digest": { "type": "string" },\r\n "comment": { "type": "string" },\r\n "anchor": { "type": "string" }\r\n },\r\n "additionalProperties": false\r\n }\r\n }\r\n },\r\n "additionalProperties": false\r\n}\r\n';
2760
2872
  var SCHEMA_SCHEMAS_SDD_RELEASE_KPIS_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/sdd/release-kpis.schema.json",\r\n "title": "Release Consolidated KPIs & Attribution Telemetry Schema",\r\n "type": "object",\r\n "required": [\r\n "releaseBranch",\r\n "baseBranch",\r\n "generatedAt",\r\n "totalCommits",\r\n "totalLinesAdded",\r\n "totalLinesDeleted",\r\n "totalKloc",\r\n "totalBugs",\r\n "globalDefectDensity",\r\n "totalTimeSeconds",\r\n "totalTokens",\r\n "totalCostUsd",\r\n "authorStats",\r\n "bugList"\r\n ],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^(KPI-REL|REL-KPI)-[A-Z0-9]+(-[A-Z0-9]+)*$",\r\n "description": "Optional artifact identifier."\r\n },\r\n "type": {\r\n "type": "string",\r\n "const": "release-kpis"\r\n },\r\n "releaseBranch": {\r\n "type": "string"\r\n },\r\n "baseBranch": {\r\n "type": "string"\r\n },\r\n "generatedAt": {\r\n "type": "string"\r\n },\r\n "totalCommits": {\r\n "type": "integer",\r\n "minimum": 0\r\n },\r\n "totalLinesAdded": {\r\n "type": "integer",\r\n "minimum": 0\r\n },\r\n "totalLinesDeleted": {\r\n "type": "integer",\r\n "minimum": 0\r\n },\r\n "totalKloc": {\r\n "type": "number",\r\n "minimum": 0\r\n },\r\n "totalBugs": {\r\n "type": "integer",\r\n "minimum": 0\r\n },\r\n "globalDefectDensity": {\r\n "type": "number",\r\n "minimum": 0\r\n },\r\n "totalTimeSeconds": {\r\n "type": "number",\r\n "minimum": 0\r\n },\r\n "totalTokens": {\r\n "type": "integer",\r\n "minimum": 0\r\n },\r\n "totalCostUsd": {\r\n "type": "number",\r\n "minimum": 0\r\n },\r\n "reworkTimeSeconds": {\r\n "type": "number",\r\n "minimum": 0\r\n },\r\n "reworkTokens": {\r\n "type": "integer",\r\n "minimum": 0\r\n },\r\n "reworkCostUsd": {\r\n "type": "number",\r\n "minimum": 0\r\n },\r\n "reworkTimePercent": {\r\n "type": "number",\r\n "minimum": 0\r\n },\r\n "reworkTokensPercent": {\r\n "type": "number",\r\n "minimum": 0\r\n },\r\n "reworkCostPercent": {\r\n "type": "number",\r\n "minimum": 0\r\n },\r\n "authorStats": {\r\n "type": "array",\r\n "items": {\r\n "type": "object",\r\n "required": [\r\n "authorOrModel",\r\n "isAgent",\r\n "commits",\r\n "linesAdded",\r\n "linesDeleted",\r\n "klocProduced",\r\n "bugsInjected",\r\n "defectInjectionRate",\r\n "totalTimeSeconds",\r\n "totalTokens",\r\n "estimatedCostUsd"\r\n ],\r\n "properties": {\r\n "authorOrModel": {\r\n "type": "string"\r\n },\r\n "isAgent": {\r\n "type": "boolean"\r\n },\r\n "commits": {\r\n "type": "integer",\r\n "minimum": 0\r\n },\r\n "linesAdded": {\r\n "type": "integer",\r\n "minimum": 0\r\n },\r\n "linesDeleted": {\r\n "type": "integer",\r\n "minimum": 0\r\n },\r\n "klocProduced": {\r\n "type": "number",\r\n "minimum": 0\r\n },\r\n "bugsInjected": {\r\n "type": "integer",\r\n "minimum": 0\r\n },\r\n "defectInjectionRate": {\r\n "type": "number",\r\n "minimum": 0\r\n },\r\n "totalTimeSeconds": {\r\n "type": "number",\r\n "minimum": 0\r\n },\r\n "totalTokens": {\r\n "type": "integer",\r\n "minimum": 0\r\n },\r\n "estimatedCostUsd": {\r\n "type": "number",\r\n "minimum": 0\r\n }\r\n },\r\n "additionalProperties": false\r\n }\r\n },\r\n "bugList": {\r\n "type": "array",\r\n "items": {\r\n "type": "object",\r\n "required": ["sha", "subject", "author", "timeSeconds", "tokens"],\r\n "properties": {\r\n "sha": {\r\n "type": "string"\r\n },\r\n "subject": {\r\n "type": "string"\r\n },\r\n "author": {\r\n "type": "string"\r\n },\r\n "parentRef": {\r\n "type": "string"\r\n },\r\n "timeSeconds": {\r\n "type": "number",\r\n "minimum": 0\r\n },\r\n "tokens": {\r\n "type": "integer",\r\n "minimum": 0\r\n }\r\n },\r\n "additionalProperties": false\r\n }\r\n }\r\n },\r\n "additionalProperties": false\r\n}\r\n';
2761
2873
  var SCHEMA_SCHEMAS_SDD_SESSION_TELEMETRY_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/sdd/session-telemetry.schema.json",\r\n "title": "Agent Session Telemetry Schema (.ai-sdlc/session-telemetry.json)",\r\n "type": "object",\r\n "required": [\r\n "model",\r\n "promptTokens",\r\n "completionTokens",\r\n "activeTimeSeconds"\r\n ],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^(TEL-SES|SES-TEL|TEL)-[A-Z0-9]+(-[A-Z0-9]+)*$",\r\n "description": "Optional telemetry session identifier."\r\n },\r\n "type": {\r\n "type": "string",\r\n "const": "session-telemetry"\r\n },\r\n "model": {\r\n "type": "string",\r\n "minLength": 1,\r\n "description": "AI model name or identifier."\r\n },\r\n "promptTokens": {\r\n "type": "integer",\r\n "minimum": 0,\r\n "description": "Total prompt tokens consumed."\r\n },\r\n "completionTokens": {\r\n "type": "integer",\r\n "minimum": 0,\r\n "description": "Total completion tokens generated."\r\n },\r\n "activeTimeSeconds": {\r\n "type": "number",\r\n "minimum": 0,\r\n "description": "Active session development duration in seconds."\r\n },\r\n "author": {\r\n "type": "string"\r\n },\r\n "authorType": {\r\n "type": "string",\r\n "enum": ["agent", "human"]\r\n },\r\n "sessionId": {\r\n "type": "string"\r\n },\r\n "timestamp": {\r\n "type": "string"\r\n },\r\n "provider": {\r\n "type": "string"\r\n },\r\n "confidence": {\r\n "type": "string",\r\n "enum": ["HIGH", "MEDIUM", "LOW"]\r\n },\r\n "source": {\r\n "type": "string"\r\n }\r\n },\r\n "additionalProperties": false\r\n}\r\n';
2762
2874
  var SCHEMA_SCHEMAS_SDD_SPEC_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/sdd/spec.schema.json",\r\n "title": "Spec-Driven Development Delivery Specification Schema (SPEC-*)",\r\n "type": "object",\r\n "required": ["id", "type", "change-id"],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^SPEC-(CHG|FEAT|PATCH)-[A-Z0-9]+(-[A-Z0-9]+)*$",\r\n "description": "Unique identifier of the delivery specification."\r\n },\r\n "type": {\r\n "type": "string",\r\n "enum": ["delivery-spec", "spec"]\r\n },\r\n "change-id": {\r\n "type": "string",\r\n "pattern": "^(CHG|FEAT|PATCH)-[A-Z0-9]+(-[A-Z0-9]+)*$",\r\n "description": "Parent change identifier associated with this specification."\r\n },\r\n "profile": {\r\n "type": "string",\r\n "enum": ["patch", "standard", "critical"],\r\n "description": "Risk and governance profile of the change."\r\n },\r\n "title": {\r\n "type": "string",\r\n "minLength": 3\r\n },\r\n "version": {\r\n "type": "string",\r\n "pattern": "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9A-Za-z.-]+)?$",\r\n "description": "Semantic versioning (SemVer)."\r\n },\r\n "schema-version": {\r\n "type": "string"\r\n },\r\n "handoff": {\r\n "type": "string",\r\n "description": "Associated handoff sidecar reference."\r\n },\r\n "status": {\r\n "type": "string",\r\n "enum": [\r\n "draft",\r\n "proposed",\r\n "review",\r\n "approved",\r\n "active",\r\n "completed",\r\n "deprecated"\r\n ]\r\n },\r\n "verification": {\r\n "type": "object",\r\n "properties": {\r\n "method": {\r\n "type": "string"\r\n },\r\n "command": {\r\n "type": "string"\r\n },\r\n "target": {\r\n "type": "string"\r\n }\r\n },\r\n "additionalProperties": true\r\n },\r\n "citations": {\r\n "type": "array",\r\n "items": {\r\n "type": "object",\r\n "required": ["id"],\r\n "properties": {\r\n "id": { "type": "string" },\r\n "digest": { "type": "string" },\r\n "comment": { "type": "string" },\r\n "anchor": { "type": "string" }\r\n },\r\n "additionalProperties": false\r\n }\r\n },\r\n "acceptance-format": {\r\n "type": "string",\r\n "enum": ["gherkin"],\r\n "description": "Formato de aceptaci\xF3n BDD obligatorio para especificaciones de entrega SDD."\r\n },\r\n "cucumber-tags": {\r\n "type": "array",\r\n "items": {\r\n "type": "string",\r\n "pattern": "^@[a-zA-Z0-9_-]+$"\r\n },\r\n "description": "Etiquetas de trazabilidad BDD para ejecuci\xF3n con Cucumber."\r\n },\r\n "cucumber-feature-file": {\r\n "type": "string",\r\n "description": "Ruta personalizada de extracci\xF3n del archivo .feature para Cucumber."\r\n }\r\n },\r\n "additionalProperties": false\r\n}\r\n';
2763
- var SCHEMA_SCHEMAS_SDD_TASKS_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/sdd/tasks.schema.json",\r\n "title": "Verifiable Tasks & Human Autonomy Governance Schema",\r\n "type": "object",\r\n "required": ["id", "type", "change-id", "version", "tasks"],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^TSK-PLAN-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "type": {\r\n "type": "string",\r\n "const": "task-plan"\r\n },\r\n "change-id": {\r\n "type": "string",\r\n "pattern": "^(CHG|FEAT)-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "version": {\r\n "type": "string",\r\n "pattern": "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9A-Za-z.-]+)?$"\r\n },\r\n "schema-version": {\r\n "type": "string"\r\n },\r\n "title": {\r\n "type": "string",\r\n "minLength": 5\r\n },\r\n "status": {\r\n "type": "string",\r\n "enum": ["draft", "approved", "in-progress", "completed", "blocked"]\r\n },\r\n "governance-summary": {\r\n "type": "object",\r\n "properties": {\r\n "autonomous-tasks-count": { "type": "integer", "minimum": 0 },\r\n "human-review-plan-count": { "type": "integer", "minimum": 0 },\r\n "ambiguous-count": { "type": "integer", "minimum": 0 },\r\n "high-risk-manual-count": { "type": "integer", "minimum": 0 }\r\n }\r\n },\r\n "tasks": {\r\n "type": "array",\r\n "minItems": 1,\r\n "items": {\r\n "type": "object",\r\n "required": ["id", "title", "complexity", "risk-level", "autonomy-mode", "verification", "assigned-to", "status"],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^TSK-[0-9]{3,}$"\r\n },\r\n "title": {\r\n "type": "string",\r\n "minLength": 5\r\n },\r\n "complexity": {\r\n "type": "string",\r\n "enum": ["LOW", "MEDIUM", "HIGH"]\r\n },\r\n "risk-level": {\r\n "type": "string",\r\n "enum": ["LOW", "MEDIUM", "HIGH", "CRITICAL"]\r\n },\r\n "autonomy-mode": {\r\n "type": "string",\r\n "enum": [\r\n "AUTONOMOUS",\r\n "HUMAN_REVIEW_PLAN",\r\n "AMBIGUOUS",\r\n "HIGH_RISK_MANUAL"\r\n ],\r\n "description": "AI agent human governance and supervision mode."\r\n },\r\n "verification": {\r\n "type": "object",\r\n "required": ["method", "command-or-criteria"],\r\n "properties": {\r\n "method": {\r\n "type": "string",\r\n "enum": ["automated-unit-test", "cucumber-bdd", "quality-gate", "license-audit", "sast-scan", "manual-inspection", "smoke-test"]\r\n },\r\n "command-or-criteria": {\r\n "type": "string",\r\n "minLength": 5\r\n }\r\n }\r\n },\r\n "assigned-to": {\r\n "type": "string",\r\n "enum": [\r\n "agent-developer",\r\n "agent-security-auditor",\r\n "agent-compliance-checker",\r\n "agent-qa",\r\n "human-engineer",\r\n "human-architect",\r\n "pair-human-agent"\r\n ]\r\n },\r\n "status": {\r\n "type": "string",\r\n "enum": ["PENDING", "IN_PROGRESS", "COMPLETED", "BLOCKED"]\r\n },\r\n "blocking-reason": {\r\n "type": "string"\r\n },\r\n "implements-components": {\r\n "type": "array",\r\n "items": {\r\n "type": "string",\r\n "pattern": "^CMP-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "description": "Architecture components (CMP-*) implemented by this atomic task."\r\n },\r\n "satisfies-requirements": {\r\n "type": "array",\r\n "items": {\r\n "type": "string",\r\n "pattern": "^(FR|QR|CON|SEC-REQ|SAF-REQ)-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "description": "Requirements satisfied by this atomic task."\r\n },\r\n "implements-contracts": {\r\n "type": "array",\r\n "items": {\r\n "type": "string",\r\n "minLength": 1\r\n },\r\n "description": "Explicit interface or method contracts from design.md implemented by this task."\r\n }\r\n },\r\n "additionalProperties": false\r\n }\r\n },\r\n "supersedes": { "type": ["string", "null"] },\r\n "superseded-by": { "type": ["string", "null"] }\r\n },\r\n "additionalProperties": false\r\n}\r\n';
2875
+ var SCHEMA_SCHEMAS_SDD_TASKS_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/sdd/tasks.schema.json",\r\n "title": "Verifiable Tasks & Human Autonomy Governance Schema",\r\n "type": "object",\r\n "required": ["id", "type", "change-id", "version", "tasks"],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^TSK-PLAN-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "type": {\r\n "type": "string",\r\n "const": "task-plan"\r\n },\r\n "change-id": {\r\n "type": "string",\r\n "pattern": "^(CHG|FEAT)-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "version": {\r\n "type": "string",\r\n "pattern": "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9A-Za-z.-]+)?$"\r\n },\r\n "schema-version": {\r\n "type": "string"\r\n },\r\n "title": {\r\n "type": "string",\r\n "minLength": 5\r\n },\r\n "status": {\r\n "type": "string",\r\n "enum": ["draft", "approved", "in-progress", "completed", "blocked"]\r\n },\r\n "governance-summary": {\r\n "type": "object",\r\n "properties": {\r\n "autonomous-tasks-count": { "type": "integer", "minimum": 0 },\r\n "human-review-plan-count": { "type": "integer", "minimum": 0 },\r\n "ambiguous-count": { "type": "integer", "minimum": 0 },\r\n "high-risk-manual-count": { "type": "integer", "minimum": 0 }\r\n }\r\n },\r\n "tasks": {\r\n "type": "array",\r\n "minItems": 1,\r\n "items": {\r\n "type": "object",\r\n "required": ["id", "title", "complexity", "risk-level", "autonomy-mode", "verification", "assigned-to", "status"],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^TSK-[0-9]{3,}$"\r\n },\r\n "title": {\r\n "type": "string",\r\n "minLength": 5\r\n },\r\n "complexity": {\r\n "type": "string",\r\n "enum": ["LOW", "MEDIUM", "HIGH"]\r\n },\r\n "risk-level": {\r\n "type": "string",\r\n "enum": ["LOW", "MEDIUM", "HIGH", "CRITICAL"]\r\n },\r\n "autonomy-mode": {\r\n "type": "string",\r\n "enum": [\r\n "AUTONOMOUS",\r\n "HUMAN_REVIEW_PLAN",\r\n "AMBIGUOUS",\r\n "HIGH_RISK_MANUAL"\r\n ],\r\n "description": "AI agent human governance and supervision mode."\r\n },\r\n "verification": {\r\n "type": "object",\r\n "required": ["method", "command-or-criteria"],\r\n "properties": {\r\n "method": {\r\n "type": "string",\r\n "enum": ["automated-unit-test", "cucumber-bdd", "quality-gate", "license-audit", "sast-scan", "privacy-audit", "manual-inspection", "smoke-test"]\r\n },\r\n "command-or-criteria": {\r\n "type": "string",\r\n "minLength": 5\r\n }\r\n }\r\n },\r\n "assigned-to": {\r\n "type": "string",\r\n "enum": [\r\n "agent-developer",\r\n "agent-security-auditor",\r\n "agent-compliance-checker",\r\n "agent-privacy-officer",\r\n "agent-qa",\r\n "human-engineer",\r\n "human-architect",\r\n "pair-human-agent"\r\n ]\r\n },\r\n "status": {\r\n "type": "string",\r\n "enum": ["PENDING", "IN_PROGRESS", "COMPLETED", "BLOCKED"]\r\n },\r\n "blocking-reason": {\r\n "type": "string"\r\n },\r\n "implements-components": {\r\n "type": "array",\r\n "items": {\r\n "type": "string",\r\n "pattern": "^CMP-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "description": "Architecture components (CMP-*) implemented by this atomic task."\r\n },\r\n "satisfies-requirements": {\r\n "type": "array",\r\n "items": {\r\n "type": "string",\r\n "pattern": "^(FR|QR|CON|SEC-REQ|SAF-REQ|PRIV-REQ)-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "description": "Requirements satisfied by this atomic task."\r\n },\r\n "implements-contracts": {\r\n "type": "array",\r\n "items": {\r\n "type": "string",\r\n "minLength": 1\r\n },\r\n "description": "Explicit interface or method contracts from design.md implemented by this task."\r\n }\r\n },\r\n "additionalProperties": false\r\n }\r\n },\r\n "supersedes": { "type": ["string", "null"] },\r\n "superseded-by": { "type": ["string", "null"] }\r\n },\r\n "additionalProperties": false\r\n}\r\n';
2764
2876
  var SCHEMA_SCHEMAS_SECURITY_ABUSE_CASE_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/security/abuse-case.schema.json",\r\n "title": "Abuse Case Schema (Versionable)",\r\n "type": "object",\r\n "required": ["id", "type", "title", "status", "version", "primary-threat-actor", "targets-use-case", "stride-category", "mitigated-by"],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^ABUSE-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "type": {\r\n "type": "string",\r\n "const": "abuse-case"\r\n },\r\n "version": {\r\n "type": "string",\r\n "pattern": "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9A-Za-z.-]+)?$",\r\n "description": "Abuse case semantic version (SemVer)."\r\n },\r\n "schema-version": {\r\n "type": "string"\r\n },\r\n "title": {\r\n "type": "string",\r\n "minLength": 3\r\n },\r\n "status": {\r\n "type": "string",\r\n "enum": ["draft", "active", "deprecated", "retired"]\r\n },\r\n "primary-threat-actor": {\r\n "type": "string",\r\n "pattern": "^ACT-THREAT-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "targets-use-case": {\r\n "type": "string",\r\n "pattern": "^UC-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "stride-category": {\r\n "type": "string",\r\n "enum": ["spoofing", "tampering", "repudiation", "information-disclosure", "denial-of-service", "elevation-of-privilege"]\r\n },\r\n "mitigated-by": {\r\n "type": "array",\r\n "minItems": 1,\r\n "items": {\r\n "type": "string",\r\n "pattern": "^SEC-REQ-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n }\r\n },\r\n "asvs-controls": {\r\n "type": "array",\r\n "items": {\r\n "type": "string"\r\n }\r\n },\r\n "supersedes": {\r\n "type": ["string", "null"],\r\n "pattern": "^ABUSE-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "superseded-by": {\r\n "type": ["string", "null"],\r\n "pattern": "^ABUSE-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n }\r\n },\r\n "additionalProperties": false\r\n}\r\n';
2765
2877
  var SCHEMA_SCHEMAS_SECURITY_ENCLAVE_SCHEMA_JSON = `{\r
2766
2878
  "$schema": "https://json-schema.org/draft/2020-12/schema",\r
@@ -2865,7 +2977,7 @@ var SCHEMA_SCHEMAS_SECURITY_ENCLAVE_SCHEMA_JSON = `{\r
2865
2977
  `;
2866
2978
  var SCHEMA_SCHEMAS_SECURITY_SECURITY_REQ_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/security/security-req.schema.json",\r\n "title": "Security Requirement Schema (Strict Test Validation Enforced)",\r\n "type": "object",\r\n "required": ["id", "type", "title", "status", "version", "security-domain", "mitigates-abuse-case"],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^SEC-REQ-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "type": {\r\n "type": "string",\r\n "const": "security-requirement"\r\n },\r\n "version": {\r\n "type": "string",\r\n "pattern": "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9A-Za-z.-]+)?$",\r\n "description": "Security requirement semantic version (SemVer)."\r\n },\r\n "schema-version": {\r\n "type": "string"\r\n },\r\n "title": {\r\n "type": "string",\r\n "minLength": 3\r\n },\r\n "status": {\r\n "type": "string",\r\n "enum": ["draft", "active", "deprecated", "retired"]\r\n },\r\n "security-domain": {\r\n "type": "string",\r\n "enum": ["authentication", "authorization", "cryptography", "input-validation", "audit-logging", "communication-security", "data-protection"]\r\n },\r\n "mitigates-abuse-case": {\r\n "type": "array",\r\n "minItems": 1,\r\n "items": {\r\n "type": "string",\r\n "pattern": "^ABUSE-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "description": "Product/Security Traceability: Abuse case or threat this control neutralizes."\r\n },\r\n "enforced-in-enclave": {\r\n "type": "string",\r\n "pattern": "^SEC-ENC-[A-Z0-9]+(-[A-Z0-9]+)*$",\r\n "description": "Architecture Traceability: Perimeter or internal security enclave."\r\n },\r\n "compliance-references": {\r\n "type": "array",\r\n "items": {\r\n "type": "string"\r\n }\r\n },\r\n "acceptance-format": {\r\n "type": "string",\r\n "enum": ["gherkin", "declarative-prose"],\r\n "description": "Mitigation criteria format."\r\n },\r\n "cucumber-tags": {\r\n "type": "array",\r\n "items": {\r\n "type": "string",\r\n "pattern": "^@[a-zA-Z0-9_-]+$"\r\n }\r\n },\r\n "supersedes": {\r\n "type": ["string", "null"],\r\n "pattern": "^SEC-REQ-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "superseded-by": {\r\n "type": ["string", "null"],\r\n "pattern": "^SEC-REQ-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n }\r\n },\r\n "additionalProperties": false\r\n}\r\n';
2867
2979
  var SCHEMA_SCHEMAS_SECURITY_THREAT_ACTOR_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/security/threat-actor.schema.json",\r\n "title": "Threat Actor Schema (Versionable)",\r\n "type": "object",\r\n "required": ["id", "type", "title", "status", "version", "threat-capability", "motivation"],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^ACT-THREAT-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "type": {\r\n "type": "string",\r\n "const": "threat-actor"\r\n },\r\n "version": {\r\n "type": "string",\r\n "pattern": "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9A-Za-z.-]+)?$",\r\n "description": "Threat profile semantic version (SemVer)."\r\n },\r\n "schema-version": {\r\n "type": "string"\r\n },\r\n "title": {\r\n "type": "string",\r\n "minLength": 3\r\n },\r\n "status": {\r\n "type": "string",\r\n "enum": ["draft", "active", "deprecated", "retired"]\r\n },\r\n "threat-capability": {\r\n "type": "string",\r\n "enum": ["script-kiddie", "advanced-persistent-threat", "insider-threat", "automated-botnet", "supply-chain-attacker"]\r\n },\r\n "motivation": {\r\n "type": "string",\r\n "enum": ["financial-gain", "espionage", "sabotage", "data-theft", "reputational-damage"]\r\n },\r\n "attack-surfaces": {\r\n "type": "array",\r\n "items": {\r\n "type": "string"\r\n }\r\n },\r\n "supersedes": {\r\n "type": ["string", "null"],\r\n "pattern": "^ACT-THREAT-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n },\r\n "superseded-by": {\r\n "type": ["string", "null"],\r\n "pattern": "^ACT-THREAT-[A-Z0-9]+(-[A-Z0-9]+)*$"\r\n }\r\n },\r\n "additionalProperties": false\r\n}\r\n';
2868
- var SCHEMA_SCHEMAS_WORKFLOW_AGENT_HANDOFF_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/workflow/agent-handoff.schema.json",\r\n "title": "Agent Workflow Handoff Block Schema",\r\n "type": "object",\r\n "required": [\r\n "id",\r\n "type",\r\n "completed-phase",\r\n "acting-role",\r\n "autonomy-mode",\r\n "deliverables",\r\n "suggested-prompt"\r\n ],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^(AHOF|HOF-WORKFLOW|HOF)-[A-Z0-9]+(-[A-Z0-9]+)*$",\r\n "description": "Unique workflow handoff identifier."\r\n },\r\n "type": {\r\n "type": "string",\r\n "const": "agent-handoff"\r\n },\r\n "title": {\r\n "type": "string",\r\n "minLength": 3\r\n },\r\n "version": {\r\n "type": "string",\r\n "pattern": "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9A-Za-z.-]+)?$",\r\n "description": "Semantic versioning (SemVer)."\r\n },\r\n "schema-version": {\r\n "type": "string"\r\n },\r\n "status": {\r\n "type": "string",\r\n "enum": ["draft", "active", "completed", "transferred"]\r\n },\r\n "completed-phase": {\r\n "type": "string",\r\n "minLength": 2,\r\n "description": "Name of the completed lifecycle phase or activity."\r\n },\r\n "acting-role": {\r\n "type": "string",\r\n "enum": [\r\n "agent-product-analyst",\r\n "agent-threat-modeler",\r\n "agent-system-architect",\r\n "agent-qa-engineer",\r\n "agent-developer",\r\n "agent-expert-user",\r\n "agent-security-auditor",\r\n "agent-compliance-checker",\r\n "agent-code-reviewer",\r\n "agent-devops",\r\n "human-dev",\r\n "tech-lead",\r\n "release-manager"\r\n ],\r\n "description": "Specialized role executing the handoff."\r\n },\r\n "autonomy-mode": {\r\n "type": "string",\r\n "enum": ["AUTONOMOUS", "HUMAN_REVIEW_PLAN", "AMBIGUOUS", "HIGH_RISK_MANUAL"],\r\n "description": "Autonomy level under which the task was executed."\r\n },\r\n "deliverables": {\r\n "type": "array",\r\n "minItems": 1,\r\n "items": {\r\n "type": "string"\r\n },\r\n "description": "Paths or IDs of artifacts produced during the phase."\r\n },\r\n "recommended-next-roles": {\r\n "type": "array",\r\n "items": {\r\n "type": "object",\r\n "required": ["role", "rationale"],\r\n "properties": {\r\n "role": {\r\n "type": "string"\r\n },\r\n "rationale": {\r\n "type": "string"\r\n }\r\n },\r\n "additionalProperties": false\r\n },\r\n "description": "Recommended downstream specialist roles and technical justifications."\r\n },\r\n "suggested-prompt": {\r\n "type": "string",\r\n "minLength": 5,\r\n "description": "Suggested invocation prompt to initiate the next agent."\r\n },\r\n "human-action-window": {\r\n "type": "object",\r\n "properties": {\r\n "review-and-validate": {\r\n "type": "boolean"\r\n },\r\n "edit-directly": {\r\n "type": "boolean"\r\n },\r\n "pause-or-divert": {\r\n "type": "boolean"\r\n },\r\n "delegate": {\r\n "type": "boolean"\r\n }\r\n },\r\n "additionalProperties": false,\r\n "description": "Actions available to the human engineer within the sovereign action window."\r\n }\r\n },\r\n "additionalProperties": false\r\n}\r\n';
2980
+ var SCHEMA_SCHEMAS_WORKFLOW_AGENT_HANDOFF_SCHEMA_JSON = '{\r\n "$schema": "https://json-schema.org/draft/2020-12/schema",\r\n "$id": "https://ai-sdlc.org/schemas/workflow/agent-handoff.schema.json",\r\n "title": "Agent Workflow Handoff Block Schema",\r\n "type": "object",\r\n "required": [\r\n "id",\r\n "type",\r\n "completed-phase",\r\n "acting-role",\r\n "autonomy-mode",\r\n "deliverables",\r\n "suggested-prompt"\r\n ],\r\n "properties": {\r\n "id": {\r\n "type": "string",\r\n "pattern": "^(AHOF|HOF-WORKFLOW|HOF)-[A-Z0-9]+(-[A-Z0-9]+)*$",\r\n "description": "Unique workflow handoff identifier."\r\n },\r\n "type": {\r\n "type": "string",\r\n "const": "agent-handoff"\r\n },\r\n "title": {\r\n "type": "string",\r\n "minLength": 3\r\n },\r\n "version": {\r\n "type": "string",\r\n "pattern": "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9A-Za-z.-]+)?$",\r\n "description": "Semantic versioning (SemVer)."\r\n },\r\n "schema-version": {\r\n "type": "string"\r\n },\r\n "status": {\r\n "type": "string",\r\n "enum": ["draft", "active", "completed", "transferred"]\r\n },\r\n "completed-phase": {\r\n "type": "string",\r\n "minLength": 2,\r\n "description": "Name of the completed lifecycle phase or activity."\r\n },\r\n "acting-role": {\r\n "type": "string",\r\n "enum": [\r\n "agent-product-analyst",\r\n "agent-threat-modeler",\r\n "agent-privacy-officer",\r\n "agent-system-architect",\r\n "agent-qa-engineer",\r\n "agent-developer",\r\n "agent-expert-user",\r\n "agent-security-auditor",\r\n "agent-compliance-checker",\r\n "agent-code-reviewer",\r\n "agent-devops",\r\n "human-dev",\r\n "tech-lead",\r\n "release-manager",\r\n "dpo"\r\n ],\r\n "description": "Specialized role executing the handoff."\r\n },\r\n "autonomy-mode": {\r\n "type": "string",\r\n "enum": ["AUTONOMOUS", "HUMAN_REVIEW_PLAN", "AMBIGUOUS", "HIGH_RISK_MANUAL"],\r\n "description": "Autonomy level under which the task was executed."\r\n },\r\n "deliverables": {\r\n "type": "array",\r\n "minItems": 1,\r\n "items": {\r\n "type": "string"\r\n },\r\n "description": "Paths or IDs of artifacts produced during the phase."\r\n },\r\n "recommended-next-roles": {\r\n "type": "array",\r\n "items": {\r\n "type": "object",\r\n "required": ["role", "rationale"],\r\n "properties": {\r\n "role": {\r\n "type": "string"\r\n },\r\n "rationale": {\r\n "type": "string"\r\n }\r\n },\r\n "additionalProperties": false\r\n },\r\n "description": "Recommended downstream specialist roles and technical justifications."\r\n },\r\n "suggested-prompt": {\r\n "type": "string",\r\n "minLength": 5,\r\n "description": "Suggested invocation prompt to initiate the next agent."\r\n },\r\n "human-action-window": {\r\n "type": "object",\r\n "properties": {\r\n "review-and-validate": {\r\n "type": "boolean"\r\n },\r\n "edit-directly": {\r\n "type": "boolean"\r\n },\r\n "pause-or-divert": {\r\n "type": "boolean"\r\n },\r\n "delegate": {\r\n "type": "boolean"\r\n }\r\n },\r\n "additionalProperties": false,\r\n "description": "Actions available to the human engineer within the sovereign action window."\r\n }\r\n },\r\n "additionalProperties": false\r\n}\r\n';
2869
2981
  var STARTER_SCHEMAS_MAP = {
2870
2982
  "schemas/architecture/adr.schema.json": JSON.parse(SCHEMA_SCHEMAS_ARCHITECTURE_ADR_SCHEMA_JSON),
2871
2983
  "schemas/architecture/component.schema.json": JSON.parse(SCHEMA_SCHEMAS_ARCHITECTURE_COMPONENT_SCHEMA_JSON),
@@ -2876,6 +2988,10 @@ var STARTER_SCHEMAS_MAP = {
2876
2988
  "schemas/ide/mcp-config.schema.json": JSON.parse(SCHEMA_SCHEMAS_IDE_MCP_CONFIG_SCHEMA_JSON),
2877
2989
  "schemas/manuals/production-manual.schema.json": JSON.parse(SCHEMA_SCHEMAS_MANUALS_PRODUCTION_MANUAL_SCHEMA_JSON),
2878
2990
  "schemas/manuals/user-manual.schema.json": JSON.parse(SCHEMA_SCHEMAS_MANUALS_USER_MANUAL_SCHEMA_JSON),
2991
+ "schemas/privacy/data-asset.schema.json": JSON.parse(SCHEMA_SCHEMAS_PRIVACY_DATA_ASSET_SCHEMA_JSON),
2992
+ "schemas/privacy/privacy-policy.schema.json": JSON.parse(SCHEMA_SCHEMAS_PRIVACY_PRIVACY_POLICY_SCHEMA_JSON),
2993
+ "schemas/privacy/privacy-req.schema.json": JSON.parse(SCHEMA_SCHEMAS_PRIVACY_PRIVACY_REQ_SCHEMA_JSON),
2994
+ "schemas/privacy/privacy-ropa.schema.json": JSON.parse(SCHEMA_SCHEMAS_PRIVACY_PRIVACY_ROPA_SCHEMA_JSON),
2879
2995
  "schemas/product/actor.schema.json": JSON.parse(SCHEMA_SCHEMAS_PRODUCT_ACTOR_SCHEMA_JSON),
2880
2996
  "schemas/product/business-rule.schema.json": JSON.parse(SCHEMA_SCHEMAS_PRODUCT_BUSINESS_RULE_SCHEMA_JSON),
2881
2997
  "schemas/product/journey.schema.json": JSON.parse(SCHEMA_SCHEMAS_PRODUCT_JOURNEY_SCHEMA_JSON),
@@ -2917,6 +3033,11 @@ var TYPE_TO_SCHEMA_MAP = {
2917
3033
  "security-enclave": "schemas/security/enclave.schema.json",
2918
3034
  "security-requirement": "schemas/security/security-req.schema.json",
2919
3035
  "threat-actor": "schemas/security/threat-actor.schema.json",
3036
+ // Privacy & Data Protection
3037
+ "data-asset": "schemas/privacy/data-asset.schema.json",
3038
+ "privacy-ropa": "schemas/privacy/privacy-ropa.schema.json",
3039
+ "privacy-requirement": "schemas/privacy/privacy-req.schema.json",
3040
+ "privacy-policy": "schemas/privacy/privacy-policy.schema.json",
2920
3041
  // Architecture
2921
3042
  "architecture-introduction": "schemas/architecture/introduction-and-goals.schema.json",
2922
3043
  "architecture-decision-record": "schemas/architecture/adr.schema.json",
@@ -2959,6 +3080,11 @@ var PREFIX_TAXONOMY = [
2959
3080
  ["ABUSE-", "abuse-case"],
2960
3081
  ["SEC-ENC-", "security-enclave"],
2961
3082
  ["SEC-REQ-", "security-requirement"],
3083
+ ["DATA-ASSET-", "data-asset"],
3084
+ ["PRIV-ROPA-", "privacy-ropa"],
3085
+ ["PRIV-REQ-", "privacy-requirement"],
3086
+ ["PRIV-POL-", "privacy-policy"],
3087
+ ["POL-PRIV-", "privacy-policy"],
2962
3088
  ["HAZ-", "hazard"],
2963
3089
  ["SAF-REQ-", "safety-requirement"],
2964
3090
  ["SAF-", "safety-requirement"],
@@ -3864,11 +3990,28 @@ function createGreenfieldRequirement(rootDir, name, padNum, canonicalId, author,
3864
3990
  const digest = computeCanonicalSha256(reqContent);
3865
3991
  return { reqId, ucId, reqFilePath, digest };
3866
3992
  }
3993
+ function resolveMissingDraftDestination(rootDir, id) {
3994
+ if (id.startsWith("PRIV-REQ-")) {
3995
+ return { dir: path4__namespace.join(rootDir, "specs", "privacy", "requirements"), type: "privacy-requirement" };
3996
+ }
3997
+ if (id.startsWith("DATA-ASSET-")) {
3998
+ return { dir: path4__namespace.join(rootDir, "specs", "privacy", "assets"), type: "data-asset" };
3999
+ }
4000
+ if (id.startsWith("PRIV-ROPA-")) {
4001
+ return { dir: path4__namespace.join(rootDir, "specs", "privacy", "ropa"), type: "privacy-ropa" };
4002
+ }
4003
+ if (id.startsWith("UC-")) {
4004
+ return { dir: path4__namespace.join(rootDir, "specs", "product"), type: "use-case" };
4005
+ }
4006
+ if (id.startsWith("SEC-REQ-") || id.startsWith("SAF-REQ-")) {
4007
+ return { dir: path4__namespace.join(rootDir, "specs", "product"), type: "security-requirement" };
4008
+ }
4009
+ return { dir: path4__namespace.join(rootDir, "specs", "product"), type: "requirement" };
4010
+ }
3867
4011
  function createMissingDraftRequirement(rootDir, name, id, canonicalId, createdFiles) {
3868
- const productDir = path4__namespace.join(rootDir, "specs", "product");
3869
- if (!fs7__namespace.existsSync(productDir)) fs7__namespace.mkdirSync(productDir, { recursive: true });
3870
- const reqFilePath = path4__namespace.join(productDir, `${id}.md`);
3871
- const reqType = id.startsWith("UC-") ? "use-case" : id.startsWith("SEC-REQ-") ? "security-requirement" : "requirement";
4012
+ const { dir, type: reqType } = resolveMissingDraftDestination(rootDir, id);
4013
+ if (!fs7__namespace.existsSync(dir)) fs7__namespace.mkdirSync(dir, { recursive: true });
4014
+ const reqFilePath = path4__namespace.join(dir, `${id}.md`);
3872
4015
  const header = MISSING_DRAFT_HEADER.replaceAll("{{ID}}", id).replaceAll("{{TYPE}}", reqType).replaceAll("{{NAME}}", name);
3873
4016
  const body = MISSING_DRAFT_BODY.replaceAll("{{ID}}", id).replaceAll("{{NAME}}", name).replaceAll("{{CANONICAL_ID}}", canonicalId);
3874
4017
  const reqContent = `${header}
@@ -3898,13 +4041,30 @@ function discoverDerivedRequirements(id, artifactMap, subRequirements, citedArti
3898
4041
  function appendUnique(list, item) {
3899
4042
  if (!list.includes(item)) list.push(item);
3900
4043
  }
3901
- function classifyExistingCitation(id, existing, artifactMap, col) {
4044
+ function recordCitedArtifact(existing, col) {
3902
4045
  col.citedArtifacts.push({
3903
4046
  id: existing.id,
3904
4047
  digest: `sha256:${existing.digest}`,
3905
4048
  title: existing.title,
3906
4049
  comment: `Citaci\xF3n de ${existing.frontmatter.type || "artefacto"} (${existing.title || existing.id})`
3907
4050
  });
4051
+ }
4052
+ function classifyPrivacyCitation(id, col) {
4053
+ if (id.startsWith("PRIV-REQ-")) {
4054
+ appendUnique(col.subPrivReqs, id);
4055
+ return true;
4056
+ }
4057
+ if (id.startsWith("DATA-ASSET-")) {
4058
+ appendUnique(col.subDataAssets, id);
4059
+ return true;
4060
+ }
4061
+ if (id.startsWith("PRIV-ROPA-")) {
4062
+ appendUnique(col.subRopa, id);
4063
+ return true;
4064
+ }
4065
+ return false;
4066
+ }
4067
+ function classifyProductCitation(id, artifactMap, col) {
3908
4068
  if (/^(FR|QR|CON)-/.test(id)) {
3909
4069
  appendUnique(col.subRequirements, id);
3910
4070
  } else if (id.startsWith("UC-")) {
@@ -3916,9 +4076,18 @@ function classifyExistingCitation(id, existing, artifactMap, col) {
3916
4076
  appendUnique(col.subRules, id);
3917
4077
  }
3918
4078
  }
4079
+ function classifyExistingCitation(id, existing, artifactMap, col) {
4080
+ recordCitedArtifact(existing, col);
4081
+ if (!classifyPrivacyCitation(id, col)) {
4082
+ classifyProductCitation(id, artifactMap, col);
4083
+ }
4084
+ }
3919
4085
  function routeMissingCitationId(id, col) {
3920
4086
  if (id.startsWith("UC-")) col.subUseCases.push(id);
3921
4087
  else if (id.startsWith("SEC-REQ-")) col.subSecReqs.push(id);
4088
+ else if (id.startsWith("PRIV-REQ-")) col.subPrivReqs.push(id);
4089
+ else if (id.startsWith("DATA-ASSET-")) col.subDataAssets.push(id);
4090
+ else if (id.startsWith("PRIV-ROPA-")) col.subRopa.push(id);
3922
4091
  else col.subRequirements.push(id);
3923
4092
  }
3924
4093
  function collectExplicitCitations(inputFromIds, name, canonicalId, artifactMap, col, rootDir, createdFiles) {
@@ -3948,16 +4117,31 @@ function collectGreenfieldCitations(rootDir, name, padNum, canonicalId, author,
3948
4117
  col.subUseCases.push(gf.ucId);
3949
4118
  }
3950
4119
  }
4120
+ function initEmptyCitations() {
4121
+ return {
4122
+ citedArtifacts: [],
4123
+ subRequirements: [],
4124
+ subUseCases: [],
4125
+ subSecReqs: [],
4126
+ subRules: [],
4127
+ subPrivReqs: [],
4128
+ subDataAssets: [],
4129
+ subRopa: []
4130
+ };
4131
+ }
4132
+ function ensureFallbackRequirement(col, padNum, name) {
4133
+ if (col.subRequirements.length === 0) {
4134
+ col.subRequirements.push(`FR-${padNum}-${slugify(name).toUpperCase()}-001`);
4135
+ }
4136
+ }
3951
4137
  function collectChangeCitations(rootDir, name, padNum, canonicalId, author, dateStr, inputFromIds, artifactMap, createdFiles) {
3952
- const col = { citedArtifacts: [], subRequirements: [], subUseCases: [], subSecReqs: [], subRules: [] };
4138
+ const col = initEmptyCitations();
3953
4139
  if (inputFromIds.length === 0) {
3954
4140
  collectGreenfieldCitations(rootDir, name, padNum, canonicalId, author, dateStr, createdFiles, col);
3955
4141
  } else {
3956
4142
  collectExplicitCitations(inputFromIds, name, canonicalId, artifactMap, col, rootDir, createdFiles);
3957
4143
  }
3958
- if (col.subRequirements.length === 0) {
3959
- col.subRequirements.push(`FR-${padNum}-${slugify(name).toUpperCase()}-001`);
3960
- }
4144
+ ensureFallbackRequirement(col, padNum, name);
3961
4145
  return col;
3962
4146
  }
3963
4147
  function renderProposalFile(changeDir, canonicalId, name, author, citationsYamlBlock) {
@@ -4071,6 +4255,9 @@ function buildHandoffSubgraph(citations) {
4071
4255
  if (citations.subUseCases.length > 0) subgraph.useCases = citations.subUseCases;
4072
4256
  if (citations.subSecReqs.length > 0) subgraph.securityRequirements = citations.subSecReqs;
4073
4257
  if (citations.subRules.length > 0) subgraph.businessRules = citations.subRules;
4258
+ if (citations.subPrivReqs.length > 0) subgraph.privacyRequirements = citations.subPrivReqs;
4259
+ if (citations.subDataAssets.length > 0) subgraph.dataAssets = citations.subDataAssets;
4260
+ if (citations.subRopa.length > 0) subgraph.privacyRopa = citations.subRopa;
4074
4261
  return subgraph;
4075
4262
  }
4076
4263
  function buildHandoffPayload(canonicalId, name, citations) {
@@ -4116,7 +4303,7 @@ function buildScaffoldFailure(profile, error, slug = "", canonicalId = "", chang
4116
4303
  }
4117
4304
  function renderAndCollectArtifactFiles(changeDir, canonicalId, name, author, dateStr, profile, citations, createdFiles) {
4118
4305
  const citationsBlock = renderCitationsYamlBlock(citations.citedArtifacts);
4119
- const reqIds = [...citations.subRequirements, ...citations.subSecReqs];
4306
+ const reqIds = [...citations.subRequirements, ...citations.subSecReqs, ...citations.subPrivReqs];
4120
4307
  createdFiles.push(renderProposalFile(changeDir, canonicalId, name, author, citationsBlock));
4121
4308
  const { specPath, specFmObj } = renderSpecFile(changeDir, canonicalId, name, profile);
4122
4309
  createdFiles.push(specPath);
@@ -4569,28 +4756,28 @@ function buildHandoffList(rootDir, artifactMap) {
4569
4756
  }
4570
4757
  return handoffList;
4571
4758
  }
4759
+ function indexSubgraphIds(ids, hof, map) {
4760
+ if (!Array.isArray(ids)) return;
4761
+ for (const reqId of ids) {
4762
+ map.set(reqId, hof);
4763
+ }
4764
+ }
4572
4765
  function indexRequirementsToHandoff(handoffList) {
4573
4766
  const reqToHandoffMap = /* @__PURE__ */ new Map();
4574
4767
  for (const hof of handoffList) {
4575
- if (hof.subgraph && Array.isArray(hof.subgraph.requirements)) {
4576
- for (const reqId of hof.subgraph.requirements) {
4577
- reqToHandoffMap.set(reqId, hof);
4578
- }
4579
- }
4580
- if (hof.subgraph && Array.isArray(hof.subgraph.securityRequirements)) {
4581
- for (const reqId of hof.subgraph.securityRequirements) {
4582
- reqToHandoffMap.set(reqId, hof);
4583
- }
4584
- }
4768
+ if (!hof.subgraph) continue;
4769
+ indexSubgraphIds(hof.subgraph.requirements, hof, reqToHandoffMap);
4770
+ indexSubgraphIds(hof.subgraph.securityRequirements, hof, reqToHandoffMap);
4771
+ indexSubgraphIds(hof.subgraph.privacyRequirements, hof, reqToHandoffMap);
4585
4772
  }
4586
4773
  return reqToHandoffMap;
4587
4774
  }
4588
- var TARGET_REQ_PREFIXES = ["FR-", "QR-", "SEC-REQ-", "CON-"];
4775
+ var TARGET_REQ_PREFIXES = ["FR-", "QR-", "SEC-REQ-", "CON-", "PRIV-REQ-"];
4589
4776
  function isRequirementToVerify(data, id) {
4590
4777
  if (data.file.includes("templates/") || data.file.includes(".template.") || data.file.includes("process/")) {
4591
4778
  return false;
4592
4779
  }
4593
- if (data.type === "requirement" || data.type === "security-requirement") {
4780
+ if (data.type === "requirement" || data.type === "security-requirement" || data.type === "privacy-requirement") {
4594
4781
  return true;
4595
4782
  }
4596
4783
  return TARGET_REQ_PREFIXES.some((prefix) => id.startsWith(prefix));
@@ -4628,6 +4815,8 @@ function collectHandoffSubgraphTraces(subgraph) {
4628
4815
  if (subgraph.useCases) traces.push(...subgraph.useCases);
4629
4816
  if (subgraph.businessRules) traces.push(...subgraph.businessRules);
4630
4817
  if (subgraph.abuseCases) traces.push(...subgraph.abuseCases);
4818
+ if (subgraph.privacyRopa) traces.push(...subgraph.privacyRopa);
4819
+ if (subgraph.dataAssets) traces.push(...subgraph.dataAssets);
4631
4820
  return traces;
4632
4821
  }
4633
4822
  function collectArchIntroTraces(reqId, artifactMap) {
@@ -4646,6 +4835,8 @@ function resolveProductTraces(fm, reqId, associatedHandoff, artifactMap) {
4646
4835
  const traces = [
4647
4836
  ...extractArrayOrSingle(fm["derives-from"]),
4648
4837
  ...extractArrayOrSingle(fm["mitigates-abuse-case"]),
4838
+ ...extractArrayOrSingle(fm["governs-ropa"]),
4839
+ ...extractArrayOrSingle(fm["protects-data-assets"]),
4649
4840
  ...collectHandoffSubgraphTraces(associatedHandoff?.subgraph),
4650
4841
  ...collectArchIntroTraces(reqId, artifactMap)
4651
4842
  ];
@@ -5082,7 +5273,8 @@ function extractHandoffExpectedScope(changeDir, maxUc = 1, violations) {
5082
5273
  }
5083
5274
  const reqs = handoff.subgraph.requirements || [];
5084
5275
  const secReqs = handoff.subgraph.securityRequirements || [];
5085
- return [...reqs, ...secReqs];
5276
+ const privReqs = handoff.subgraph.privacyRequirements || [];
5277
+ return [...reqs, ...secReqs, ...privReqs];
5086
5278
  }
5087
5279
  function collectTaskCoveredScope(tasks) {
5088
5280
  const covered = /* @__PURE__ */ new Set();
@@ -7445,6 +7637,503 @@ function detectPromptInjection(content) {
7445
7637
  checkMultilinePromptInjection(content, findings);
7446
7638
  return findings;
7447
7639
  }
7640
+ var DEFAULT_PRIVACY_POLICY = {
7641
+ version: "1.0",
7642
+ project: "AI-SDLC Standard Organization",
7643
+ regulatory_frameworks: ["GDPR", "LOPDGDD", "ISO-27701"],
7644
+ default_action: "DENY_UNREGISTERED_PII",
7645
+ classifications: {
7646
+ public: {
7647
+ action: "ALLOW",
7648
+ encryption_at_rest: false,
7649
+ encryption_in_transit: true,
7650
+ allow_in_logs: true,
7651
+ allow_in_ai_prompts: true
7652
+ },
7653
+ internal: {
7654
+ action: "ALLOW",
7655
+ encryption_at_rest: true,
7656
+ encryption_in_transit: true,
7657
+ allow_in_logs: true,
7658
+ allow_in_ai_prompts: true
7659
+ },
7660
+ confidential_pii: {
7661
+ action: "STRICT_GOVERNANCE",
7662
+ require_ropa_entry: true,
7663
+ encryption_at_rest: true,
7664
+ encryption_in_transit: true,
7665
+ allow_in_logs: false,
7666
+ log_masking_strategy: "REDACT_OR_SHA256_SALT",
7667
+ allow_in_ai_prompts: false,
7668
+ max_retention_days: 365,
7669
+ require_right_to_erasure: true
7670
+ },
7671
+ special_category_sensitive: {
7672
+ action: "DPIA_APPROVAL_REQUIRED",
7673
+ require_ropa_entry: true,
7674
+ require_dpia_artifact: true,
7675
+ encryption_at_rest: true,
7676
+ encryption_in_transit: true,
7677
+ require_field_level_encryption: true,
7678
+ allow_in_logs: false,
7679
+ allow_in_ai_prompts: false
7680
+ }
7681
+ },
7682
+ cross_border_transfers: {
7683
+ allowed_regions: ["EU-EEA", "ADEQUACY_DECISION"],
7684
+ require_scc_for_third_countries: true,
7685
+ approved_subprocessors: []
7686
+ },
7687
+ agent_guardrails: {
7688
+ forbid_real_pii_in_tests: true,
7689
+ forbid_pii_in_console_or_logger: true,
7690
+ require_dto_projection_for_pii: true
7691
+ },
7692
+ ci_gates: {
7693
+ fail_on_unregistered_pii: true,
7694
+ fail_on_pii_in_logs: true,
7695
+ fail_on_missing_retention_policy: true,
7696
+ fail_on_unapproved_subprocessor: true,
7697
+ generate_ropa_inventory: true,
7698
+ output_ropa_file: "reports/ROPA_INVENTORY.md",
7699
+ output_privacy_report: "reports/PRIVACY_SCAN_REPORT.md"
7700
+ }
7701
+ };
7702
+ var PII_SAST_RULES = [
7703
+ {
7704
+ id: "PRIV-001-PII-IN-LOGS",
7705
+ type: "PII_IN_LOGS",
7706
+ severity: "HIGH",
7707
+ description: "Direct exposure of unmasked PII or sensitive fields in logger or console output (GDPR Art. 25 / Art. 32)",
7708
+ pattern: /(?:console\.(?:log|info|warn|error|debug)|logger\.(?:info|warn|error|debug|trace)|log\.(?:info|warn|error|debug))\s*\([^)]*\b(?:user\.(?:email|phone|ssn|dni|nif|password|creditCard|biometric)|req\.body\.(?:email|phone|ssn|dni|nif|password|creditCard)|rawPii|patientRecord|creditCardNumber|socialSecurityNumber)\b/i
7709
+ },
7710
+ {
7711
+ id: "PRIV-002-PII-IN-LLM-PROMPT",
7712
+ type: "PII_IN_LLM_PROMPT",
7713
+ severity: "CRITICAL",
7714
+ description: "Unmasked personal or special-category data interpolated into external AI/LLM prompt payload",
7715
+ pattern: /(?:(?:prompt|userPrompt|systemPrompt|llmPrompt)\s*(?::=|\+=|=)|(?:generateContent|chat\.completions\.create)\s*\()[^;\n]*\$\{[^}]*\b(?:user\.(?:email|phone|ssn|dni|nif|biometric)|patient\.(?:diagnosis|health|medicalRecord)|rawPii|creditCard)\b[^}]*\}/i
7716
+ },
7717
+ {
7718
+ id: "PRIV-004-HARDCODED-REAL-PII",
7719
+ type: "HARDCODED_PII_IN_CODE",
7720
+ severity: "HIGH",
7721
+ description: "Hardcoded real-world personal identifier (SSN / National ID / Credit Card) detected in source or test file",
7722
+ pattern: /\b(?:ssn|dni|nif|tax_?id|national_?id)\s*[:=]\s*['"](?:\d{3}-\d{2}-\d{4}|\d{8}[A-HJ-NP-TV-Z])['"]/i
7723
+ }
7724
+ ];
7725
+ function loadPrivacyPolicy(rootDir, policyPath) {
7726
+ const candidate = policyPath ? path4__namespace.isAbsolute(policyPath) ? policyPath : path4__namespace.join(rootDir, policyPath) : path4__namespace.join(rootDir, "privacy-policy.yaml");
7727
+ if (!fs7__namespace.existsSync(candidate)) return DEFAULT_PRIVACY_POLICY;
7728
+ try {
7729
+ const parsed = yaml3__default.default.load(fs7__namespace.readFileSync(candidate, "utf-8"));
7730
+ if (!parsed || typeof parsed !== "object") return DEFAULT_PRIVACY_POLICY;
7731
+ return {
7732
+ ...DEFAULT_PRIVACY_POLICY,
7733
+ ...parsed,
7734
+ classifications: { ...DEFAULT_PRIVACY_POLICY.classifications, ...parsed.classifications || {} },
7735
+ agent_guardrails: { ...DEFAULT_PRIVACY_POLICY.agent_guardrails, ...parsed.agent_guardrails || {} },
7736
+ ci_gates: { ...DEFAULT_PRIVACY_POLICY.ci_gates, ...parsed.ci_gates || {} }
7737
+ };
7738
+ } catch {
7739
+ return DEFAULT_PRIVACY_POLICY;
7740
+ }
7741
+ }
7742
+ function isLineExemptFromPrivacyScan(line) {
7743
+ return line.includes("ai-sdlc:allow-pii") || line.includes("ai-sdlc:allow-sast") || line.includes("nosec");
7744
+ }
7745
+ function shouldApplyPiiRule(rule, policy) {
7746
+ if (rule.type === "PII_IN_LOGS" && !policy.ci_gates.fail_on_pii_in_logs) {
7747
+ return false;
7748
+ }
7749
+ if (rule.type === "HARDCODED_PII_IN_CODE" && !policy.agent_guardrails.forbid_real_pii_in_tests) {
7750
+ return false;
7751
+ }
7752
+ return true;
7753
+ }
7754
+ function scanFileForPrivacyViolations(filePath, rootDir, policy = DEFAULT_PRIVACY_POLICY) {
7755
+ const violations = [];
7756
+ try {
7757
+ const content = fs7__namespace.readFileSync(filePath, "utf-8");
7758
+ const lines = content.split(/\r?\n/);
7759
+ const relPath = path4__namespace.relative(rootDir, filePath).replace(/\\/g, "/");
7760
+ for (let i = 0; i < lines.length; i++) {
7761
+ const line = lines[i];
7762
+ if (isLineExemptFromPrivacyScan(line)) continue;
7763
+ for (const rule of PII_SAST_RULES) {
7764
+ if (!shouldApplyPiiRule(rule, policy)) continue;
7765
+ rule.pattern.lastIndex = 0;
7766
+ if (rule.pattern.test(line)) {
7767
+ violations.push({
7768
+ ruleId: rule.id,
7769
+ type: rule.type,
7770
+ severity: rule.severity,
7771
+ filePath,
7772
+ relPath,
7773
+ lineNumber: i + 1,
7774
+ snippet: line.trim(),
7775
+ message: rule.description
7776
+ });
7777
+ }
7778
+ }
7779
+ }
7780
+ } catch {
7781
+ }
7782
+ return violations;
7783
+ }
7784
+ var EXCLUDED_ARTIFACT_PREFIXES = [
7785
+ "templates/",
7786
+ "node_modules/",
7787
+ "dist/",
7788
+ ".git/",
7789
+ "reports/",
7790
+ ".agent/",
7791
+ ".agents/",
7792
+ ".claude/",
7793
+ ".cursor/",
7794
+ ".github/",
7795
+ "process/"
7796
+ ];
7797
+ function isExcludedPrivacyMd(relPath) {
7798
+ return EXCLUDED_ARTIFACT_PREFIXES.some((prefix) => relPath.startsWith(prefix));
7799
+ }
7800
+ function toStringArray2(val) {
7801
+ if (Array.isArray(val)) return val.map((v) => String(v));
7802
+ if (typeof val === "string" && val.trim().length > 0) return [val.trim()];
7803
+ return [];
7804
+ }
7805
+ function parseDataAsset(fm, relPath) {
7806
+ return {
7807
+ id: String(fm.id || ""),
7808
+ title: String(fm.title || ""),
7809
+ classification: String(fm.classification || "internal"),
7810
+ piiCategories: toStringArray2(fm["pii-categories"]),
7811
+ dataSubjects: toStringArray2(fm["data-subjects"]),
7812
+ retentionPeriod: String(fm["retention-period"] || ""),
7813
+ erasureMethod: String(fm["erasure-method"] || ""),
7814
+ filePath: relPath
7815
+ };
7816
+ }
7817
+ function parseRopaRecord(fm, relPath) {
7818
+ return {
7819
+ id: String(fm.id || ""),
7820
+ title: String(fm.title || ""),
7821
+ lawfulBasis: String(fm["lawful-basis"] || ""),
7822
+ processingPurpose: String(fm["processing-purpose"] || ""),
7823
+ useCases: toStringArray2(fm["use-cases"]),
7824
+ dataAssets: toStringArray2(fm["data-assets"]),
7825
+ dataSubjects: toStringArray2(fm["data-subjects"]),
7826
+ retentionTtl: String(fm["retention-ttl"] || ""),
7827
+ crossBorderTransfer: Boolean(fm["cross-border-transfer"]),
7828
+ subprocessors: toStringArray2(fm.subprocessors),
7829
+ dpiaRequired: Boolean(fm["dpia-required"]),
7830
+ dpiaReference: typeof fm["dpia-reference"] === "string" ? fm["dpia-reference"] : null,
7831
+ mitigatedBy: toStringArray2(fm["mitigated-by"]),
7832
+ filePath: relPath
7833
+ };
7834
+ }
7835
+ function isDataAssetArtifact(type, id) {
7836
+ return type === "data-asset" || id.startsWith("DATA-ASSET-");
7837
+ }
7838
+ function isRopaArtifact(type, id) {
7839
+ return type === "privacy-ropa" || id.startsWith("PRIV-ROPA-");
7840
+ }
7841
+ function isPrivacyReqArtifact(type, id) {
7842
+ return type === "privacy-requirement" || id.startsWith("PRIV-REQ-");
7843
+ }
7844
+ function isDpiaArtifact(type, id) {
7845
+ return type === "dpia-request" || id.startsWith("DPIA-");
7846
+ }
7847
+ function classifyPrivacyMarkdown(fm, relPath, acc) {
7848
+ const id = String(fm.id || "");
7849
+ const type = String(fm.type || "");
7850
+ if (isDataAssetArtifact(type, id)) {
7851
+ acc.dataAssets.push(parseDataAsset(fm, relPath));
7852
+ } else if (isRopaArtifact(type, id)) {
7853
+ acc.ropaRecords.push(parseRopaRecord(fm, relPath));
7854
+ } else if (isPrivacyReqArtifact(type, id)) {
7855
+ acc.privacyReqs.push({ id, governsRopa: toStringArray2(fm["governs-ropa"]), filePath: relPath });
7856
+ } else if (isDpiaArtifact(type, id)) {
7857
+ acc.dpiaStatuses.set(id, String(fm.status || "draft"));
7858
+ }
7859
+ }
7860
+ function discoverPrivacyArtifacts(rootDir) {
7861
+ const acc = {
7862
+ dataAssets: [],
7863
+ ropaRecords: [],
7864
+ privacyReqs: [],
7865
+ dpiaStatuses: /* @__PURE__ */ new Map()
7866
+ };
7867
+ for (const file of walkMdFiles(rootDir)) {
7868
+ const relPath = path4__namespace.relative(rootDir, file).replace(/\\/g, "/");
7869
+ if (isExcludedPrivacyMd(relPath)) continue;
7870
+ try {
7871
+ const fm = extractFrontmatter(fs7__namespace.readFileSync(file, "utf-8"));
7872
+ if (fm && fm.id) classifyPrivacyMarkdown(fm, relPath, acc);
7873
+ } catch {
7874
+ }
7875
+ }
7876
+ return acc;
7877
+ }
7878
+ var SENSITIVE_CLASSIFICATIONS = /* @__PURE__ */ new Set([
7879
+ "confidential-pii",
7880
+ "confidential_pii",
7881
+ "special-category-sensitive",
7882
+ "special_category_sensitive"
7883
+ ]);
7884
+ function isSensitiveClassification(classification) {
7885
+ return SENSITIVE_CLASSIFICATIONS.has(classification);
7886
+ }
7887
+ function createViolation(ruleId, type, severity, fullPath, relPath, message) {
7888
+ return { ruleId, type, severity, filePath: fullPath, relPath, message };
7889
+ }
7890
+ function checkAssetRetention(asset, policy, fullPath) {
7891
+ if (!policy.ci_gates.fail_on_missing_retention_policy) return null;
7892
+ if (asset.retentionPeriod && asset.erasureMethod) return null;
7893
+ return createViolation(
7894
+ "PRIV-003-MISSING-RETENTION-POLICY",
7895
+ "MISSING_RETENTION_POLICY",
7896
+ "HIGH",
7897
+ fullPath,
7898
+ asset.filePath,
7899
+ `Data asset '${asset.id}' (${asset.classification}) is missing a valid retention-period or erasure-method`
7900
+ );
7901
+ }
7902
+ function checkAssetRopaRegistration(asset, ropaRecords, policy, fullPath) {
7903
+ if (!policy.ci_gates.fail_on_unregistered_pii) return null;
7904
+ if (ropaRecords.some((r) => r.dataAssets.includes(asset.id))) return null;
7905
+ return createViolation(
7906
+ "PRIV-005-UNREGISTERED-ROPA",
7907
+ "UNREGISTERED_ROPA",
7908
+ "HIGH",
7909
+ fullPath,
7910
+ asset.filePath,
7911
+ `Personal data asset '${asset.id}' is not registered in any GDPR Art. 30 ROPA artifact (PRIV-ROPA-*)`
7912
+ );
7913
+ }
7914
+ function auditDataAssetGovernance(asset, ropaRecords, policy, rootDir) {
7915
+ if (!isSensitiveClassification(asset.classification)) return [];
7916
+ const fullPath = path4__namespace.join(rootDir, asset.filePath);
7917
+ const v1 = checkAssetRetention(asset, policy, fullPath);
7918
+ const v2 = checkAssetRopaRegistration(asset, ropaRecords, policy, fullPath);
7919
+ return [v1, v2].filter((v) => v !== null);
7920
+ }
7921
+ function checkRopaControlLink(ropa, governedRopaIds, fullPath) {
7922
+ if (ropa.mitigatedBy.length > 0 || governedRopaIds.has(ropa.id)) return [];
7923
+ return [
7924
+ createViolation(
7925
+ "PRIV-006-MISSING-PRIVACY-CONTROL",
7926
+ "MISSING_PRIVACY_CONTROL",
7927
+ "HIGH",
7928
+ fullPath,
7929
+ ropa.filePath,
7930
+ `ROPA activity '${ropa.id}' lacks a governing technical privacy control (PRIV-REQ-*)`
7931
+ )
7932
+ ];
7933
+ }
7934
+ function checkRopaSubprocessors(ropa, policy, fullPath) {
7935
+ if (!policy.ci_gates.fail_on_unapproved_subprocessor) return [];
7936
+ const approved = new Set(policy.cross_border_transfers?.approved_subprocessors || []);
7937
+ return ropa.subprocessors.filter((sub) => !approved.has(sub)).map(
7938
+ (sub) => createViolation(
7939
+ "PRIV-007-UNAPPROVED-SUBPROCESSOR",
7940
+ "UNAPPROVED_SUBPROCESSOR",
7941
+ "HIGH",
7942
+ fullPath,
7943
+ ropa.filePath,
7944
+ `ROPA activity '${ropa.id}' references unapproved subprocessor '${sub}' not listed in privacy-policy.yaml`
7945
+ )
7946
+ );
7947
+ }
7948
+ function checkRopaControlsAndSubprocessors(ropa, governedRopaIds, policy, fullPath) {
7949
+ return [
7950
+ ...checkRopaControlLink(ropa, governedRopaIds, fullPath),
7951
+ ...checkRopaSubprocessors(ropa, policy, fullPath)
7952
+ ];
7953
+ }
7954
+ function ropaProcessesSpecialCategory(ropa, dataAssets) {
7955
+ return ropa.dataAssets.some((id) => {
7956
+ const found = dataAssets.find((a) => a.id === id);
7957
+ return Boolean(found && found.classification.includes("special"));
7958
+ });
7959
+ }
7960
+ function isDpiaMissingOrUnapproved(dpiaId, dpiaStatuses) {
7961
+ if (!dpiaId) return true;
7962
+ const status = dpiaStatuses.get(dpiaId);
7963
+ return Boolean(status && status !== "approved");
7964
+ }
7965
+ function checkRopaDpiaApproval(ropa, dataAssets, dpiaStatuses, fullPath) {
7966
+ const requiresDpia = ropa.dpiaRequired || ropaProcessesSpecialCategory(ropa, dataAssets);
7967
+ if (!requiresDpia) return { violations: [], dpiaRequired: false };
7968
+ if (!isDpiaMissingOrUnapproved(ropa.dpiaReference, dpiaStatuses)) {
7969
+ return { violations: [], dpiaRequired: true };
7970
+ }
7971
+ return {
7972
+ dpiaRequired: true,
7973
+ violations: [
7974
+ createViolation(
7975
+ "PRIV-008-DPIA-APPROVAL-REQUIRED",
7976
+ "DPIA_APPROVAL_REQUIRED",
7977
+ "CRITICAL",
7978
+ fullPath,
7979
+ ropa.filePath,
7980
+ `ROPA activity '${ropa.id}' processes special-category/high-risk data and requires an approved DPIA-* signed by the DPO`
7981
+ )
7982
+ ]
7983
+ };
7984
+ }
7985
+ function collectSourceFilesForPrivacy(rootDir, targetDirs) {
7986
+ const files = [];
7987
+ for (const dir of targetDirs) {
7988
+ const fullDir = path4__namespace.join(rootDir, dir);
7989
+ if (fs7__namespace.existsSync(fullDir)) {
7990
+ files.push(...walkSourceFiles(fullDir, rootDir));
7991
+ }
7992
+ }
7993
+ return files;
7994
+ }
7995
+ function formatRopaTableRow(r) {
7996
+ const ucs = r.useCases.join(", ") || "\u2014";
7997
+ const assets = r.dataAssets.join(", ") || "\u2014";
7998
+ const controls = r.mitigatedBy.join(", ") || "\u2014";
7999
+ return `| \`${r.id}\` | ${r.title} | \`${r.lawfulBasis}\` | ${ucs} | ${assets} | \`${r.retentionTtl}\` | ${controls} |`;
8000
+ }
8001
+ function formatAssetTableRow(a) {
8002
+ const cats = a.piiCategories.join(", ");
8003
+ return `| \`${a.id}\` | ${a.title} | \`${a.classification}\` | ${cats} | \`${a.retentionPeriod}\` | \`${a.erasureMethod}\` |`;
8004
+ }
8005
+ function buildRopaSectionLines(ropaRecords) {
8006
+ const rows = ropaRecords.map(formatRopaTableRow);
8007
+ const emptyRopa = `| \u2014 | No processing activities registered | \u2014 | \u2014 | \u2014 | \u2014 | \u2014 |`;
8008
+ return [
8009
+ `## 1. Processing Activities Register (\`PRIV-ROPA-*\`)`,
8010
+ ``,
8011
+ `| ROPA ID | Processing Activity | Lawful Basis | Triggering Use Cases | Data Assets | Retention TTL | Privacy Controls |`,
8012
+ `| :--- | :--- | :--- | :--- | :--- | :---: | :--- |`,
8013
+ ...rows.length > 0 ? rows : [emptyRopa]
8014
+ ];
8015
+ }
8016
+ function buildAssetSectionLines(dataAssets) {
8017
+ const assetRows = dataAssets.map(formatAssetTableRow);
8018
+ const emptyAsset = `| \u2014 | No personal data assets registered | \u2014 | \u2014 | \u2014 | \u2014 |`;
8019
+ return [
8020
+ `## 2. Personal Data Assets Inventory (\`DATA-ASSET-*\`)`,
8021
+ ``,
8022
+ `| Asset ID | Title | Classification | PII Categories | Retention | Erasure Method |`,
8023
+ `| :--- | :--- | :--- | :--- | :---: | :--- |`,
8024
+ ...assetRows.length > 0 ? assetRows : [emptyAsset]
8025
+ ];
8026
+ }
8027
+ function generateRopaInventoryMarkdown(result, policy = DEFAULT_PRIVACY_POLICY) {
8028
+ return [
8029
+ `# \u{1F510} GDPR Art. 30 Record of Processing Activities (ROPA Inventory)`,
8030
+ ``,
8031
+ `> **Project:** ${policy.project}`,
8032
+ `> **Regulatory Frameworks:** ${policy.regulatory_frameworks.join(", ")}`,
8033
+ `> **Total Data Assets:** ${result.dataAssetsCount} | **Active ROPA Entries:** ${result.ropaRecordsCount} | **Privacy Controls:** ${result.privacyRequirementsCount}`,
8034
+ ``,
8035
+ ...buildRopaSectionLines(result.ropaRecords),
8036
+ ``,
8037
+ ...buildAssetSectionLines(result.dataAssets),
8038
+ ``
8039
+ ].join("\n");
8040
+ }
8041
+ function formatViolationRow(v) {
8042
+ const loc = v.lineNumber ? `${v.relPath}:${v.lineNumber}` : v.relPath;
8043
+ return `| **${v.severity}** | \`${v.ruleId}\` | \`${v.type}\` | \`${loc}\` | ${v.message} |`;
8044
+ }
8045
+ function buildReportFindingsSection(violations) {
8046
+ if (violations.length === 0) {
8047
+ return [
8048
+ `## Compliance Summary`,
8049
+ ``,
8050
+ `Zero unmasked PII leaks in logs or AI prompts, zero hardcoded personal identifiers, and 100% of declared personal data assets comply with GDPR Art. 25 & Art. 30 governance.`
8051
+ ];
8052
+ }
8053
+ return [
8054
+ `## Detected Privacy & Data Protection Findings`,
8055
+ ``,
8056
+ `| Severity | Rule | Finding Type | Location | Details |`,
8057
+ `| :---: | :--- | :--- | :--- | :--- |`,
8058
+ ...violations.map(formatViolationRow)
8059
+ ];
8060
+ }
8061
+ function generatePrivacyReportMarkdown(result, policy = DEFAULT_PRIVACY_POLICY) {
8062
+ const verdict = result.success ? "\u2705 COMPLIANT (Privacy-by-Design as Code verified)" : `\u274C BLOCKED (${result.violationsCount} privacy violations detected)`;
8063
+ return [
8064
+ `# \u{1F6E1}\uFE0F Privacy-by-Design & Data Protection Audit (Gate 12)`,
8065
+ ``,
8066
+ `> **Verdict:** ${verdict}`,
8067
+ `> **Regulatory Baseline:** ${policy.regulatory_frameworks.join(", ")}`,
8068
+ `> **Audited Source Files:** ${result.totalFilesScanned} | **Data Assets:** ${result.dataAssetsCount} | **ROPA Records:** ${result.ropaRecordsCount} | **Privacy Reqs:** ${result.privacyRequirementsCount}`,
8069
+ ``,
8070
+ `---`,
8071
+ ``,
8072
+ ...buildReportFindingsSection(result.violations),
8073
+ ``
8074
+ ].join("\n");
8075
+ }
8076
+ function writePrivacyOutputsIfNeeded(result, options, policy, rootDir) {
8077
+ if (options.generateRopa) {
8078
+ const relRopa = options.ropaOutputPath || policy.ci_gates.output_ropa_file || "reports/ROPA_INVENTORY.md";
8079
+ const fullRopa = path4__namespace.isAbsolute(relRopa) ? relRopa : path4__namespace.join(rootDir, relRopa);
8080
+ fs7__namespace.mkdirSync(path4__namespace.dirname(fullRopa), { recursive: true });
8081
+ fs7__namespace.writeFileSync(fullRopa, result.ropaMarkdown, "utf-8");
8082
+ result.ropaOutputPath = fullRopa;
8083
+ }
8084
+ if (options.reportOutputPath) {
8085
+ const fullReport = path4__namespace.isAbsolute(options.reportOutputPath) ? options.reportOutputPath : path4__namespace.join(rootDir, options.reportOutputPath);
8086
+ fs7__namespace.mkdirSync(path4__namespace.dirname(fullReport), { recursive: true });
8087
+ fs7__namespace.writeFileSync(fullReport, result.reportMarkdown, "utf-8");
8088
+ result.reportOutputPath = fullReport;
8089
+ }
8090
+ }
8091
+ function evaluateDiscoveredPrivacyGovernance(discovered, policy, rootDir) {
8092
+ const governedRopaIds = new Set(discovered.privacyReqs.flatMap((r) => r.governsRopa));
8093
+ const violations = [];
8094
+ for (const asset of discovered.dataAssets) {
8095
+ violations.push(...auditDataAssetGovernance(asset, discovered.ropaRecords, policy, rootDir));
8096
+ }
8097
+ let dpiaRequiredCount = 0;
8098
+ for (const ropa of discovered.ropaRecords) {
8099
+ const fullPath = path4__namespace.join(rootDir, ropa.filePath);
8100
+ violations.push(...checkRopaControlsAndSubprocessors(ropa, governedRopaIds, policy, fullPath));
8101
+ const dpiaCheck = checkRopaDpiaApproval(ropa, discovered.dataAssets, discovered.dpiaStatuses, fullPath);
8102
+ if (dpiaCheck.dpiaRequired) dpiaRequiredCount++;
8103
+ violations.push(...dpiaCheck.violations);
8104
+ }
8105
+ return { violations, dpiaRequiredCount };
8106
+ }
8107
+ function buildInitialPrivacyResult(totalFilesScanned, discovered, violations, dpiaRequiredCount) {
8108
+ return {
8109
+ success: violations.length === 0,
8110
+ totalFilesScanned,
8111
+ dataAssetsCount: discovered.dataAssets.length,
8112
+ ropaRecordsCount: discovered.ropaRecords.length,
8113
+ privacyRequirementsCount: discovered.privacyReqs.length,
8114
+ violationsCount: violations.length,
8115
+ dpiaRequiredCount,
8116
+ dataAssets: discovered.dataAssets,
8117
+ ropaRecords: discovered.ropaRecords,
8118
+ violations,
8119
+ ropaMarkdown: "",
8120
+ reportMarkdown: ""
8121
+ };
8122
+ }
8123
+ function verifyPrivacy(options = {}) {
8124
+ const rootDir = options.rootDir || process.cwd();
8125
+ const policy = loadPrivacyPolicy(rootDir, options.policyPath);
8126
+ const sourceFiles = collectSourceFilesForPrivacy(rootDir, options.targetDirectories || ["src", "packages"]);
8127
+ const codeViolations = sourceFiles.flatMap((file) => scanFileForPrivacyViolations(file, rootDir, policy));
8128
+ const discovered = discoverPrivacyArtifacts(rootDir);
8129
+ const gov = evaluateDiscoveredPrivacyGovernance(discovered, policy, rootDir);
8130
+ const violations = [...codeViolations, ...gov.violations];
8131
+ const result = buildInitialPrivacyResult(sourceFiles.length, discovered, violations, gov.dpiaRequiredCount);
8132
+ result.ropaMarkdown = generateRopaInventoryMarkdown(result, policy);
8133
+ result.reportMarkdown = generatePrivacyReportMarkdown(result, policy);
8134
+ writePrivacyOutputsIfNeeded(result, options, policy, rootDir);
8135
+ return result;
8136
+ }
7448
8137
  function calculateRating(mi, cc) {
7449
8138
  if (mi >= 75 && cc <= 5) return "A";
7450
8139
  if (mi >= 60 && cc <= 10) return "B";
@@ -8885,7 +9574,9 @@ var NON_GRAPH_TYPES = /* @__PURE__ */ new Set([
8885
9574
  "mcp-config",
8886
9575
  "user-manual",
8887
9576
  "production-manual",
8888
- "architecture-glossary"
9577
+ "architecture-glossary",
9578
+ "dpia-request",
9579
+ "privacy-policy"
8889
9580
  ]);
8890
9581
  var PREFIX_MAP = {
8891
9582
  "ARCH-INTRO": { type: "architecture-introduction", layer: "product" },
@@ -8895,11 +9586,14 @@ var PREFIX_MAP = {
8895
9586
  "UC": { type: "use-case", layer: "product" },
8896
9587
  "BR": { type: "business-rule", layer: "product" },
8897
9588
  "ABUSE": { type: "abuse-case", layer: "product" },
9589
+ "DATA-ASSET": { type: "data-asset", layer: "product" },
9590
+ "PRIV-ROPA": { type: "privacy-ropa", layer: "product" },
8898
9591
  "HAZ": { type: "hazard", layer: "product" },
8899
9592
  "SEC-ENC": { type: "security-enclave", layer: "architecture" },
8900
9593
  "CMP": { type: "component", layer: "architecture" },
8901
9594
  "ADR": { type: "adr", layer: "architecture" },
8902
- "SEC-REQ": { type: "security-requirement", layer: "requirement" }
9595
+ "SEC-REQ": { type: "security-requirement", layer: "requirement" },
9596
+ "PRIV-REQ": { type: "privacy-requirement", layer: "requirement" }
8903
9597
  };
8904
9598
  var TYPE_LOOKUP = {
8905
9599
  "architecture-introduction": { type: "architecture-introduction", layer: "product" },
@@ -8911,15 +9605,18 @@ var TYPE_LOOKUP = {
8911
9605
  "business-rule": { type: "business-rule", layer: "product" },
8912
9606
  "rule": { type: "business-rule", layer: "product" },
8913
9607
  "abuse-case": { type: "abuse-case", layer: "product" },
9608
+ "data-asset": { type: "data-asset", layer: "product" },
9609
+ "privacy-ropa": { type: "privacy-ropa", layer: "product" },
8914
9610
  "hazard": { type: "hazard", layer: "product" },
8915
9611
  "security-enclave": { type: "security-enclave", layer: "architecture" },
8916
9612
  "component": { type: "component", layer: "architecture" },
8917
9613
  "architecture-decision-record": { type: "adr", layer: "architecture" },
8918
9614
  "adr": { type: "adr", layer: "architecture" },
8919
- "security-requirement": { type: "security-requirement", layer: "requirement" }
9615
+ "security-requirement": { type: "security-requirement", layer: "requirement" },
9616
+ "privacy-requirement": { type: "privacy-requirement", layer: "requirement" }
8920
9617
  };
8921
9618
  function classifyArtifactLayerAndType(id, declaredType) {
8922
- if (NON_GRAPH_TYPES.has(declaredType) || /^(TERM|HOF|AHOF|CHG|DSG|SPEC|TSK|UDF|AUDIT)-/.test(id)) {
9619
+ if (NON_GRAPH_TYPES.has(declaredType) || /^(TERM|HOF|AHOF|CHG|DSG|SPEC|TSK|UDF|AUDIT|DPIA)-/.test(id)) {
8923
9620
  return null;
8924
9621
  }
8925
9622
  for (const [prefix, mapping] of Object.entries(PREFIX_MAP)) {
@@ -8963,7 +9660,7 @@ function parseAndCatalogArtifactFile(rootDir, filePath, scannedMap, archViewByBa
8963
9660
  function scanWorkspaceArtifacts(rootDir) {
8964
9661
  const scannedArtifactsMap = /* @__PURE__ */ new Map();
8965
9662
  const archViewByBasename = /* @__PURE__ */ new Map();
8966
- const artifactDirs = ["product", "architecture", "specs", "security"];
9663
+ const artifactDirs = ["product", "architecture", "specs", "security", "privacy"];
8967
9664
  for (const dirName of artifactDirs) {
8968
9665
  const fullDirPath = path4__namespace.join(rootDir, dirName);
8969
9666
  if (fs7__namespace.existsSync(fullDirPath)) {
@@ -8980,6 +9677,8 @@ function resolveUpstreamType(u) {
8980
9677
  if (u.startsWith("UC-")) return "use-case";
8981
9678
  if (u.startsWith("BR-")) return "business-rule";
8982
9679
  if (u.startsWith("ABUSE-")) return "abuse-case";
9680
+ if (u.startsWith("DATA-ASSET-")) return "data-asset";
9681
+ if (u.startsWith("PRIV-ROPA-")) return "privacy-ropa";
8983
9682
  return "product";
8984
9683
  }
8985
9684
  function addTraceUpstreamEdges(r, status, nodeMap, addEdge) {
@@ -9058,7 +9757,7 @@ function addTraceTestEdges(r, status, rootDir, nodeMap, addEdge) {
9058
9757
  }
9059
9758
  }
9060
9759
  function buildReqNode(r, status) {
9061
- const reqType = r.id.startsWith("SEC-REQ-") ? "security-requirement" : "requirement";
9760
+ const reqType = r.id.startsWith("SEC-REQ-") ? "security-requirement" : r.id.startsWith("PRIV-REQ-") ? "privacy-requirement" : "requirement";
9062
9761
  return {
9063
9762
  id: r.id,
9064
9763
  label: r.id,
@@ -9132,7 +9831,7 @@ function connectIntroRelationships(art, nodeMap, addEdge) {
9132
9831
  for (const qrId of list) {
9133
9832
  if (typeof qrId === "string" && qrId.trim()) {
9134
9833
  const q = qrId.trim();
9135
- const qType = q.startsWith("SEC-REQ-") ? "security-requirement" : "requirement";
9834
+ const qType = q.startsWith("SEC-REQ-") ? "security-requirement" : q.startsWith("PRIV-REQ-") ? "privacy-requirement" : "requirement";
9136
9835
  connectTargets(art.id, [q], "defines-goal", nodeMap, addEdge, qType, "requirement");
9137
9836
  }
9138
9837
  }
@@ -9211,6 +9910,28 @@ function connectAbuseCaseRelationships(art, nodeMap, addEdge) {
9211
9910
  connectAbuseTargets(fm["targets-use-case"] || fm["targets-use-cases"] || fm["targets"], art.id, nodeMap, addEdge);
9212
9911
  connectAbuseMitigations(fm["mitigated-by"], art.id, nodeMap, addEdge);
9213
9912
  }
9913
+ function connectDataAssetRelationships(art, nodeMap, addEdge) {
9914
+ const fm = art.frontmatter;
9915
+ for (const subj of toList(fm["data-subjects"])) {
9916
+ connectTargets(subj.trim(), [art.id], "owns-data", nodeMap, addEdge, "actor", "product");
9917
+ }
9918
+ const owner = typeof fm["owner-bounded-context"] === "string" ? fm["owner-bounded-context"].trim() : "";
9919
+ if (owner && owner.startsWith("CMP-")) {
9920
+ connectTargets(art.id, [owner], "satisfies", nodeMap, addEdge, "component", "architecture");
9921
+ }
9922
+ }
9923
+ function connectPrivacyRopaRelationships(art, nodeMap, addEdge) {
9924
+ const fm = art.frontmatter;
9925
+ for (const uc of toList(fm["use-cases"])) {
9926
+ connectTargets(uc.trim(), [art.id], "derives-from", nodeMap, addEdge, "use-case", "product");
9927
+ }
9928
+ for (const asset of toList(fm["data-assets"])) {
9929
+ connectTargets(asset.trim(), [art.id], "governs", nodeMap, addEdge, "data-asset", "product");
9930
+ }
9931
+ for (const req of toList(fm["mitigated-by"])) {
9932
+ connectTargets(art.id, [req.trim()], "mitigated-by", nodeMap, addEdge, "privacy-requirement", "requirement");
9933
+ }
9934
+ }
9214
9935
  function connectRequirementMitigations(art, nodeMap, addEdge) {
9215
9936
  for (const ab of toList(art.frontmatter["mitigates-abuse-case"])) {
9216
9937
  const id = ab.trim();
@@ -9218,6 +9939,18 @@ function connectRequirementMitigations(art, nodeMap, addEdge) {
9218
9939
  connectTargets(id, [art.id], "mitigated-by", nodeMap, addEdge, "abuse-case", "product");
9219
9940
  }
9220
9941
  }
9942
+ for (const ropa of toList(art.frontmatter["governs-ropa"])) {
9943
+ const id = ropa.trim();
9944
+ if (id) {
9945
+ connectTargets(id, [art.id], "mitigated-by", nodeMap, addEdge, "privacy-ropa", "product");
9946
+ }
9947
+ }
9948
+ for (const asset of toList(art.frontmatter["protects-data-assets"])) {
9949
+ const id = asset.trim();
9950
+ if (id) {
9951
+ connectTargets(id, [art.id], "governs", nodeMap, addEdge, "data-asset", "product");
9952
+ }
9953
+ }
9221
9954
  }
9222
9955
  function connectAdrRelationships(art, nodeMap, addEdge) {
9223
9956
  for (const cmp of toList(art.frontmatter["affects-components"])) {
@@ -9241,8 +9974,11 @@ var CONNECTOR_MAP = {
9241
9974
  "use-case": connectUseCaseRelationships,
9242
9975
  "business-rule": (art, _map, addEdge) => connectBusinessRuleRelationships(art, addEdge),
9243
9976
  "abuse-case": connectAbuseCaseRelationships,
9977
+ "data-asset": connectDataAssetRelationships,
9978
+ "privacy-ropa": connectPrivacyRopaRelationships,
9244
9979
  "requirement": connectRequirementMitigations,
9245
9980
  "security-requirement": connectRequirementMitigations,
9981
+ "privacy-requirement": connectRequirementMitigations,
9246
9982
  "adr": connectAdrRelationships,
9247
9983
  "security-enclave": connectEnclaveRelationships
9248
9984
  };
@@ -9862,6 +10598,28 @@ var DASHBOARD_CLIENT_SCRIPT = `
9862
10598
  'height': 46
9863
10599
  }
9864
10600
  },
10601
+ {
10602
+ selector: 'node.type-data-asset',
10603
+ style: {
10604
+ 'shape': 'barrel',
10605
+ 'background-color': '#134e4a',
10606
+ 'border-color': '#5eead4',
10607
+ 'border-width': 2.5,
10608
+ 'width': 68,
10609
+ 'height': 42
10610
+ }
10611
+ },
10612
+ {
10613
+ selector: 'node.type-privacy-ropa',
10614
+ style: {
10615
+ 'shape': 'round-rectangle',
10616
+ 'background-color': '#1e3a8a',
10617
+ 'border-color': '#60a5fa',
10618
+ 'border-width': 2.5,
10619
+ 'width': 72,
10620
+ 'height': 40
10621
+ }
10622
+ },
9865
10623
  {
9866
10624
  selector: 'node.type-security-enclave',
9867
10625
  style: {
@@ -9874,7 +10632,7 @@ var DASHBOARD_CLIENT_SCRIPT = `
9874
10632
  }
9875
10633
  },
9876
10634
  {
9877
- selector: 'node.type-requirement, node.type-security-requirement',
10635
+ selector: 'node.type-requirement, node.type-security-requirement, node.type-privacy-requirement',
9878
10636
  style: {
9879
10637
  'shape': 'round-rectangle',
9880
10638
  'background-color': '#1e293b',
@@ -9907,7 +10665,7 @@ var DASHBOARD_CLIENT_SCRIPT = `
9907
10665
  }
9908
10666
  },
9909
10667
  {
9910
- 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)',
10668
+ 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):not(.type-data-asset):not(.type-privacy-ropa)',
9911
10669
  style: { 'shape': 'diamond', 'background-color': '#0e7490', 'border-color': '#38bdf8', 'width': 50, 'height': 50 }
9912
10670
  },
9913
10671
  {
@@ -10105,7 +10863,15 @@ var DASHBOARD_CLIENT_SCRIPT = `
10105
10863
  typeBadgeColor = '#881337';
10106
10864
  typeTitle = 'ABUSE CASE (ABUSE)';
10107
10865
  typologyKey = 'abuse-case';
10108
- } else if (typeName === 'requirement' || typeName === 'security-requirement') {
10866
+ } else if (typeName === 'data-asset') {
10867
+ typeBadgeColor = '#134e4a';
10868
+ typeTitle = 'DATA ASSET (DATA-ASSET)';
10869
+ typologyKey = 'data-asset';
10870
+ } else if (typeName === 'privacy-ropa') {
10871
+ typeBadgeColor = '#1e3a8a';
10872
+ typeTitle = 'PRIVACY ROPA (PRIV-ROPA)';
10873
+ typologyKey = 'privacy-ropa';
10874
+ } else if (typeName === 'requirement' || typeName === 'security-requirement' || typeName === 'privacy-requirement') {
10109
10875
  typeBadgeColor = '#1e293b';
10110
10876
  typeTitle = 'REQUIREMENT (' + (data.id.split('-')[0] || 'REQ') + ')';
10111
10877
  typologyKey = 'requirement';
@@ -10159,7 +10925,9 @@ var DASHBOARD_CLIENT_SCRIPT = `
10159
10925
  'use-case': '.type-use-case, .type-usecase',
10160
10926
  'business-rule': '.type-business-rule, .type-rule',
10161
10927
  'abuse-case': '.type-abuse-case, .type-threat-actor',
10162
- 'requirement': '.type-requirement, .type-security-requirement, .layer-requirement',
10928
+ 'data-asset': '.type-data-asset',
10929
+ 'privacy-ropa': '.type-privacy-ropa',
10930
+ 'requirement': '.type-requirement, .type-security-requirement, .type-privacy-requirement, .layer-requirement',
10163
10931
  'architecture': '.type-component, .type-adr, .type-security-enclave, .layer-architecture',
10164
10932
  'test': '.type-bdd-feature, .type-code-test, .layer-test'
10165
10933
  };
@@ -10569,7 +11337,9 @@ var GRAPH_LEGEND_HTML = `
10569
11337
  <div class="legend-item" data-type="use-case" onclick="handleTypologyClick(event, 'use-case')" title="Filter Use Case"><span class="legend-dot" style="background:#0369a1; border:2px solid #38bdf8;"></span><strong>Use Case</strong> (UC)</div>
10570
11338
  <div class="legend-item" data-type="business-rule" onclick="handleTypologyClick(event, 'business-rule')" title="Filter Business Rule"><span class="legend-dot" style="background:#b45309; border:2px solid #fbbf24; transform:rotate(45deg);"></span><strong>Business Rule</strong> (BR)</div>
10571
11339
  <div class="legend-item" data-type="abuse-case" onclick="handleTypologyClick(event, 'abuse-case')" title="Filter Abuse Case"><span class="legend-dot" style="background:#881337; border:2px solid #f43f5e;"></span><strong>Abuse Case</strong> (ABUSE)</div>
10572
- <div class="legend-item" data-type="requirement" onclick="handleTypologyClick(event, 'requirement')" title="Filter Requirement"><span class="legend-dot" style="background:#1e293b; border:2px solid #64748b;"></span><strong>Requirement</strong> (FR/QR/SEC)</div>
11340
+ <div class="legend-item" data-type="data-asset" onclick="handleTypologyClick(event, 'data-asset')" title="Filter Data Asset"><span class="legend-dot" style="background:#134e4a; border:2px solid #5eead4;"></span><strong>Data Asset</strong> (DATA-ASSET)</div>
11341
+ <div class="legend-item" data-type="privacy-ropa" onclick="handleTypologyClick(event, 'privacy-ropa')" title="Filter Privacy ROPA"><span class="legend-dot" style="background:#1e3a8a; border:2px solid #60a5fa;"></span><strong>Privacy ROPA</strong> (PRIV-ROPA)</div>
11342
+ <div class="legend-item" data-type="requirement" onclick="handleTypologyClick(event, 'requirement')" title="Filter Requirement"><span class="legend-dot" style="background:#1e293b; border:2px solid #64748b;"></span><strong>Requirement</strong> (FR/QR/SEC/PRIV)</div>
10573
11343
  <div class="legend-item" data-type="architecture" onclick="handleTypologyClick(event, 'architecture')" title="Filter Architecture"><span class="legend-dot" style="background:#312e81; border:2px solid #818cf8;"></span><strong>Architecture</strong> (CMP/ADR)</div>
10574
11344
  <div class="legend-item" data-type="test" onclick="handleTypologyClick(event, 'test')" title="Filter Test"><span class="legend-dot" style="background:#047857; border:2px solid #10b981;"></span><strong>Test</strong> (BDD/Test)</div>
10575
11345
  </div>
@@ -10610,7 +11380,7 @@ function renderGraphToolbarHtml() {
10610
11380
  ` <div class="graph-toolbar">`,
10611
11381
  ` <div class="tool-row"><button class="tool-btn" onclick="cyZoom(0.2)">Zoom +</button><button class="tool-btn" onclick="cyZoom(-0.2)">Zoom -</button><button class="tool-btn" onclick="cy.fit(30)">Center</button><button class="tool-btn" onclick="resetHighlight()">Reset</button></div>`,
10612
11382
  ` <div class="tool-row"><select id="layout-select" class="tool-select" onchange="applyLayout(this.value)"><option value="breadthfirst">Hierarchical (Layers)</option><option value="cose">Force-directed (COSE)</option><option value="concentric">Concentric</option><option value="circle">Circular</option></select></div>`,
10613
- ` <div class="tool-row"><select id="type-filter" class="tool-select" onchange="filterType(this.value)"><option value="all">All Typologies</option><option value="architecture-introduction">Vision &amp; Goals (ARCH-INTRO)</option><option value="journey">Journeys (JRN)</option><option value="actor">Actors (ACT)</option><option value="use-case">Use Cases (UC)</option><option value="business-rule">Business Rules (BR)</option><option value="abuse-case">Abuse Cases (ABUSE)</option><option value="requirement">Requirements (FR/QR/SEC)</option><option value="architecture">Architecture (CMP/ADR)</option><option value="test">Testing (BDD/Test)</option></select></div>`,
11383
+ ` <div class="tool-row"><select id="type-filter" class="tool-select" onchange="filterType(this.value)"><option value="all">All Typologies</option><option value="architecture-introduction">Vision &amp; Goals (ARCH-INTRO)</option><option value="journey">Journeys (JRN)</option><option value="actor">Actors (ACT)</option><option value="use-case">Use Cases (UC)</option><option value="business-rule">Business Rules (BR)</option><option value="abuse-case">Abuse Cases (ABUSE)</option><option value="data-asset">Data Assets (DATA-ASSET)</option><option value="privacy-ropa">Privacy ROPA (PRIV-ROPA)</option><option value="requirement">Requirements (FR/QR/SEC/PRIV)</option><option value="architecture">Architecture (CMP/ADR)</option><option value="test">Testing (BDD/Test)</option></select></div>`,
10614
11384
  ` <div class="tool-row"><select id="layer-filter" class="tool-select" onchange="filterLayer(this.value)"><option value="all">All Layers</option><option value="product">Layer 1: Product (Upstream)</option><option value="requirement">Layer 2: Requirements</option><option value="architecture">Layer 3: Architecture (Midstream)</option><option value="test">Layer 4: Testing (Downstream)</option></select></div>`,
10615
11385
  ` <div class="tool-row"><select id="status-filter" class="tool-select" onchange="filterStatus(this.value)"><option value="all">All Statuses</option><option value="COMPLIANT">Only Compliant (Green)</option><option value="issues">Only Orphans / Drift (Red)</option></select></div>`,
10616
11386
  ` <div class="tool-row"><input type="text" id="node-search" class="tool-input" placeholder="Search node ID..." oninput="searchNode(this.value)"></div>`,
@@ -11387,7 +12157,32 @@ var SPECIALIZED_AGENT_TEMPLATES = [
11387
12157
  - In the **Technical Security Feedback Loop** (arriving from \`agent-system-architect\`), analyze infrastructure, persistence, middleware, and API decisions to issue system/software-level \`ACT-THREAT-*\` and \`SEC-REQ-*\`.
11388
12158
  - Every \`SEC-REQ-*\` must include negative BDD attack and rejection scenarios tagged \`@security @mitigation\`.
11389
12159
  - Run \`pnpm run verify:schemas\` before delivering the draft.
11390
- - If autonomy is $\\ge$ \`HUMAN_REVIEW_PLAN\`, conclude by emitting the Workflow Handoff block (\`templates/workflow/agent-handoff.template.md\`) suggesting \`agent-system-architect\` (or \`agent-qa-engineer\` once technical modeling is complete) and opening the Human Action Window. In \`AUTONOMOUS\` mode, omit interactive handoff.`
12160
+ - If autonomy is $\\ge$ \`HUMAN_REVIEW_PLAN\`, conclude by emitting the Workflow Handoff block (\`templates/workflow/agent-handoff.template.md\`) suggesting \`agent-privacy-officer\` (to model LINDDUN privacy threats, \`DATA-ASSET-*\`, \`PRIV-ROPA-*\`, and \`PRIV-REQ-*\` before \`agent-system-architect\` or \`agent-qa-engineer\`) and opening the Human Action Window. In \`AUTONOMOUS\` mode, omit interactive handoff.`
12161
+ },
12162
+ {
12163
+ id: "agent-privacy-officer",
12164
+ title: "Data Protection & Privacy-by-Design Specialist",
12165
+ description: "Model personal data assets (DATA-ASSET-*), GDPR Art. 30 records of processing (PRIV-ROPA-*), and LINDDUN/ISO 27701 privacy requirements (PRIV-REQ-*) on handoff from cybersecurity, and audit code diffs against privacy-policy.yaml.",
12166
+ globs: "privacy/**, specs/privacy/**, privacy-policy.yaml, templates/privacy/**, schemas/privacy/**",
12167
+ body: `## Role & Mission
12168
+ - **Role**: Data Protection & Privacy-by-Design Specialist Agent (\`agent-privacy-officer\`).
12169
+ - **Mission**: Receive the handoff from \`agent-threat-modeler\` to model personal data assets (\`DATA-ASSET-*\`), GDPR Art. 30 records of processing (\`PRIV-ROPA-*\`), and LINDDUN / GDPR Art. 25 / ISO 27701 privacy requirements (\`PRIV-REQ-*\`), and audit code changes in Pre-Merge against \`privacy-policy.yaml\`.
12170
+
12171
+ ## Operational Directives & Guardrails
12172
+ - Operate under bimodal discipline depending on the lifecycle phase:
12173
+ 1. **Shift-Left Design Mode (Post-Cybersecurity Handoff)**:
12174
+ - Inspect \`UC-*\`, \`FR-*\`, \`ABUSE-*\`, and \`SEC-REQ-*\` (and \`CMP-*\` during the technical security/privacy feedback loop from \`agent-system-architect\`).
12175
+ - Apply **LINDDUN** (Linkability, Identifiability, Non-repudiation, Detectability, Disclosure of information, Unawareness, Non-compliance) and **GDPR / LOPDGDD / ISO 27701** to generate the PDaC privacy triad in \`specs/privacy/\` conforming to \`schemas/privacy/\`:
12176
+ - \`DATA-ASSET-*\` (\`type: data-asset\`): personal data inventory classifying fields (\`PUBLIC\`, \`INTERNAL\`, \`CONFIDENTIAL_PII\`, \`RESTRICTED_SENSITIVE_PII\`), retention (\`retention-period\`), and erasure strategy (\`CRYPTO_SHREDDING\`, \`HARD_DELETE\`, \`ANONYMIZATION\`, \`RETENTION_LOCK\`).
12177
+ - \`PRIV-ROPA-*\` (\`type: privacy-ropa\`): GDPR Art. 30 Record of Processing Activity linking \`processes-use-cases\` (\`UC-*\`), \`data-assets\` (\`DATA-ASSET-*\`), \`lawful-basis\` (Art. 6), \`special-category-basis\` (Art. 9), and \`cross-border-transfer\`.
12178
+ - \`PRIV-REQ-*\` (\`type: privacy-requirement\`): technical and organizational privacy requirements (minimization, pseudonymization, masking in logs/LLM prompts, ARCO+/GDPR Art. 15\u201322 rights, retention/erasure) with Gherkin scenarios tagged \`@<PRIV-REQ-ID> @privacy @gdpr @automated @regression\`.
12179
+ - \`status\` ALWAYS starts as \`draft\`.
12180
+ - **DPIA Escalation Gate**: If \`RESTRICTED_SENSITIVE_PII\` (GDPR Art. 9 special categories), biometric/health data, systematic profiling, or unapproved cross-border transfers are detected, generate a \`DPIA-*\` request (\`templates/privacy/dpia-request.template.md\`), set \`dpia-required: true\`, and block autonomous progression until the human DPO / Legal Counsel approves.
12181
+ 2. **Pre-Merge Privacy Audit Mode (Downstream / PR Gate)**:
12182
+ - Execute deterministic verification via \`pnpm run verify:privacy\` (\`npx aisdlc verify privacy\`) and inspect PR diffs for PII leaks in logs/telemetry (\`PRIV-001\`), unmasked PII in external LLM prompts (\`PRIV-002\`), missing retention/erasure on PII assets (\`PRIV-003\`), hardcoded real PII in tests/seeds (\`PRIV-004\`), unregistered ROPA (\`PRIV-005\`), or unapproved subprocessors (\`PRIV-007\`).
12183
+ - Block any PR with \`CRITICAL\` or \`HIGH\` privacy violations (exit code \`5\`).
12184
+ - Run \`pnpm run verify:schemas\` and \`pnpm run verify:privacy\` before delivering artifacts or audit verdicts.
12185
+ - If autonomy is $\\ge$ \`HUMAN_REVIEW_PLAN\`, conclude by emitting the Workflow Handoff block (\`templates/workflow/agent-handoff.template.md\`) suggesting \`agent-system-architect\` (or \`agent-qa-engineer\` after technical loop, or the human Tech Lead / DPO in Pre-Merge) and opening the Human Action Window. In \`AUTONOMOUS\` mode, omit interactive handoff.`
11391
12186
  },
11392
12187
  {
11393
12188
  id: "agent-system-architect",
@@ -11399,22 +12194,22 @@ var SPECIALIZED_AGENT_TEMPLATES = [
11399
12194
  - **Mission**: Translate approved product definition into a modular technical architecture based on arc42 enriched with NAF v4.
11400
12195
 
11401
12196
  ## Operational Directives & Guardrails
11402
- - Decompose the system into building blocks \`CMP-*\` ensuring each component declares which use cases \`UC-*\` it implements and which requirements (\`FR-*\`, \`QR-*\`, \`SEC-REQ-*\`) it fulfills under \`satisfies-requirements\`.
12197
+ - Decompose the system into building blocks \`CMP-*\` ensuring each component declares which use cases \`UC-*\` it implements and which requirements (\`FR-*\`, \`QR-*\`, \`SEC-REQ-*\`, \`PRIV-REQ-*\`) it fulfills under \`satisfies-requirements\`.
11403
12198
  - **Contract-First Full-Stack Integration**: Whenever a feature or change spans Frontend (UI) and Backend (API/services), define an explicit shared typed contract (Zod schemas, shared TypeScript DTOs, or OpenAPI specification) in \`design.md\` before implementation so both layers compile against a single source of truth.
11404
12199
  - Generate interaction and sequence diagrams in native Mermaid syntax.
11405
12200
  - Document critical technological decisions using immutable \`ADR-*\` records conforming to \`schemas/architecture/adr.schema.json\`.
11406
- - Validate that architectural choices comply with legal constraints in \`license-policy.yaml\`.
11407
- - **Technical Security Feedback Loop**: If architectural decisions (databases, queues, distributed caching, third-party APIs, authentication schemes) introduce new attack vectors, emit a return handoff to \`agent-threat-modeler\` for technical modeling prior to the testing phase.
11408
- - If autonomy is $\\ge$ \`HUMAN_REVIEW_PLAN\`, conclude by emitting the Workflow Handoff block (\`templates/workflow/agent-handoff.template.md\`) suggesting \`agent-qa-engineer\` (or \`agent-threat-modeler\` if technical security loop is required) and opening the Human Action Window. In \`AUTONOMOUS\` mode, omit interactive handoff.`
12201
+ - Validate that architectural choices comply with legal constraints in \`license-policy.yaml\` and data protection constraints in \`privacy-policy.yaml\`.
12202
+ - **Technical Security & Privacy Feedback Loop**: If architectural decisions (databases, queues, distributed caching, third-party APIs, LLM providers, authentication schemes) introduce new attack vectors or PII data flows, emit a return handoff to \`agent-threat-modeler\` (which chains to \`agent-privacy-officer\`) for technical modeling prior to the testing phase.
12203
+ - If autonomy is $\\ge$ \`HUMAN_REVIEW_PLAN\`, conclude by emitting the Workflow Handoff block (\`templates/workflow/agent-handoff.template.md\`) suggesting \`agent-qa-engineer\` (or \`agent-threat-modeler\` if technical security/privacy loop is required) and opening the Human Action Window. In \`AUTONOMOUS\` mode, omit interactive handoff.`
11409
12204
  },
11410
12205
  {
11411
12206
  id: "agent-qa-engineer",
11412
12207
  title: "QA Engineer and SDET",
11413
- description: "Translate approved requirements (FR-*, SEC-REQ-*, QR-*) into comprehensive FAILING (red) BDD/Gherkin, End-to-End (E2E), UI, and unit test suites before production code is written.",
12208
+ description: "Translate approved requirements (FR-*, SEC-REQ-*, PRIV-REQ-*, QR-*) into comprehensive FAILING (red) BDD/Gherkin, End-to-End (E2E), UI, and unit test suites before production code is written.",
11414
12209
  globs: "tests/**, specs/changes/**/spec.md",
11415
12210
  body: `## Role & Mission
11416
12211
  - **Role**: QA Engineer and SDET (Software Development Engineer in Test) Agent (\`agent-qa-engineer\`).
11417
- - **Mission**: Translate approved requirements (\`FR-*\`, \`SEC-REQ-*\`, \`QR-*\`) into comprehensive FAILING (red) BDD/Gherkin, End-to-End (E2E), UI, and unit test suites before \`agent-developer\` writes a single line of production code.
12212
+ - **Mission**: Translate approved requirements (\`FR-*\`, \`SEC-REQ-*\`, \`PRIV-REQ-*\`, \`QR-*\`) into comprehensive FAILING (red) BDD/Gherkin, End-to-End (E2E), UI, and unit test suites before \`agent-developer\` writes a single line of production code.
11418
12213
 
11419
12214
  ## Operational Directives & Guardrails
11420
12215
  - Read exclusively requirements cited in the \`handoff.yaml\` sidecar (\`HOF-*\`) and their referenced artifacts.
@@ -11429,7 +12224,7 @@ var SPECIALIZED_AGENT_TEMPLATES = [
11429
12224
  2. **Boundary Cases** (\`@boundary\` \`Scenario Outline\` + \`Examples\` table): values at the extremes of the accepted range.
11430
12225
  3. **Out-of-Range / Invalid Cases** (\`@invalid\` \`Scenario Outline\` + \`Examples\` table): null, empty, wrong types, values exceeding bounds.
11431
12226
  - **Use Case Variant Coverage**: Inspect every \`UC-*\` in \`handoff.yaml\` and generate BDD scenarios covering 100% of its \`alternative-flows\` and \`exception-flows\`.
11432
- - Apply conditional categories when applicable: Security (\`@security @mitigation\`), Performance (\`@performance\`), Idempotency (\`@idempotence\`), Postconditions, and Interface Contracts.
12227
+ - Apply conditional categories when applicable: Security (\`@security @mitigation\`), Privacy (\`@privacy @gdpr\`), Performance (\`@performance\`), Idempotency (\`@idempotence\`), Postconditions, and Interface Contracts.
11433
12228
  - **Zero-Mock Integration Rule**: When an \`FR-*\` spans UI and Backend, unit tests mocking \`fetch\`/HTTP in isolation are insufficient; include integration/contract or E2E test scenarios verifying real request/response wiring and UI state transitions (\`Loading\`, \`Empty\`, \`Error\`, \`Nominal\`).
11434
12229
  - Tag all scenarios with \`@<FR-ID> @automated @regression\`.
11435
12230
  - **STRICTLY FORBIDDEN**: Including production code, suggesting implementation, or anticipating technical solutions.
@@ -11458,16 +12253,16 @@ Execute every implementation task following this strict sequential order:
11458
12253
 
11459
12254
  ## Operational Directives & Guardrails
11460
12255
  - Respect the autonomy mode assigned to each task in \`tasks.md\` (\`AUTONOMOUS\`, \`HUMAN_REVIEW_PLAN\`, \`AMBIGUOUS\`, \`HIGH_RISK_MANUAL\`).
11461
- - **100% Design & Handoff Scope Coverage in Tasks**: Ensure every task in \`tasks.md\` declares \`implements-components\` (\`CMP-*\`), \`satisfies-requirements\` (\`FR-*\`, \`SEC-REQ-*\`), and \`implements-contracts\` so 100% of \`design.md\` and \`handoff.yaml\` is mapped and implemented.
12256
+ - **100% Design & Handoff Scope Coverage in Tasks**: Ensure every task in \`tasks.md\` declares \`implements-components\` (\`CMP-*\`), \`satisfies-requirements\` (\`FR-*\`, \`SEC-REQ-*\`, \`PRIV-REQ-*\`), and \`implements-contracts\` so 100% of \`design.md\` and \`handoff.yaml\` is mapped and implemented.
11462
12257
  - Apply Test-Driven Development (TDD): make failing tests delivered by \`agent-qa-engineer\` pass green without altering tests to accommodate buggy code, and write direct unit tests in \`tests/unit/\` for every exported function and contract method declared in \`design.md\` or implemented in \`src/\`.
11463
- - Cite implemented \`FR-*\` or \`SEC-REQ-*\` IDs in test header comments to maintain 360\xB0 reverse traceability.
12258
+ - Cite implemented \`FR-*\`, \`SEC-REQ-*\`, or \`PRIV-REQ-*\` IDs in test header comments to maintain 360\xB0 reverse traceability.
11464
12259
  - **Zero Fake-Wiring Guardrail**: Strictly forbidden from marking a task \`COMPLETED\` with hardcoded \`mockData\` arrays in production views, \`setTimeout\` simulating network calls, or empty UI event handlers (\`onClick={() => {}}\`, \`onSubmit={() => {}}\`). Frontend components must wire directly to the shared contract and real Backend endpoints.
11465
12260
  - **Mandatory 4 UI States Matrix**: Every data-driven UI component or screen must explicitly implement all 4 usability states: \`Loading\` (spinner/skeleton + disabled submit), \`Empty\` (clear message + CTA), \`Error\` (visible error recovery banner, never silent failure), and \`Nominal/Success\` (accessible semantic DOM + keyboard navigation).
11466
12261
  - **Live Runtime Smoke Verification**: For tasks touching UI or UI-to-Backend integration, unit tests alone are insufficient. Before emitting handoff, boot the real Backend and Frontend servers and verify (via Playwright E2E or Chrome DevTools MCP) that browser \`console.error\` and \`pageerror\` counts are \`0\` and API calls return real \`2xx\` responses without CORS or schema mismatches.
11467
12262
  - Before adding any external dependency, verify its SPDX license is permitted in \`license-policy.yaml\`.
11468
12263
  - Respect non-negotiable \`quality-policy.yaml\` thresholds: Cyclomatic Complexity $\\le 10$, Cognitive Complexity $\\le 15$, Maintainability Index $\\ge 50$, Function Length $\\le 40$ lines.
11469
12264
  - Run unified pre-flight with auto-fix (\`pnpm run check:fix\`) and full verification (\`pnpm run verify:all\`).
11470
- - Upon completing green implementation, suggest handoff to \`agent-expert-user\` for Post-Development Functional Validation prior to security audit.`
12265
+ - Upon completing green implementation, suggest handoff to \`agent-expert-user\` for Post-Development Functional Validation prior to security and privacy audit.`
11471
12266
  },
11472
12267
  {
11473
12268
  id: "agent-security-auditor",
@@ -11514,7 +12309,7 @@ Execute every implementation task following this strict sequential order:
11514
12309
  1. **Design Mode (Upstream)**: Adopt the primary actor persona under real-world field conditions (stress, latency, constrained viewports). Separate strict Minimum Viable Product (MVP) core from future roadmap ideas using \`templates/product/user-design-feedback.template.md\`.
11515
12310
  2. **Functional Validation Mode (Downstream / Pre-PR / Post-Development Functional Validation)**: Inspect \`agent-developer\` deliverables once unit tests pass green by executing the real application (via Playwright or Chrome DevTools MCP when UI is present). Contrast actual UI, CLI, and API behavior against approved \`UC-*\` and \`FR-*\` criteria, verifying real Backend connectivity, the 4 UI usability states (\`Loading\`, \`Empty\`, \`Error\`, \`Nominal\`), keyboard/ARIA accessibility, and \`0\` browser \`console.error\` / network failures.
11516
12311
  - Formulate decisive questions under \`open-questions\` for the human Product Owner.
11517
- - Emit handoff block suggesting the Pre-Merge Audit Triad (\`agent-code-reviewer\`, \`agent-security-auditor\`, \`agent-compliance-checker\`) if compliant, or return to \`agent-developer\` on functional drift or fake-wiring.`
12312
+ - Emit handoff block suggesting the Pre-Merge Audit Triad (\`agent-code-reviewer\`, \`agent-security-auditor\`, \`agent-privacy-officer\`, \`agent-compliance-checker\`) if compliant, or return to \`agent-developer\` on functional drift or fake-wiring.`
11518
12313
  },
11519
12314
  {
11520
12315
  id: "agent-code-reviewer",
@@ -11530,7 +12325,7 @@ Execute every implementation task following this strict sequential order:
11530
12325
  - Detect improper coupling, code smells, magic numbers, ambiguous identifiers, and encapsulation breaches.
11531
12326
  - Flag premature abstractions and speculative code violating YAGNI.
11532
12327
  - **Block Fake-Wiring & Disconnected UI**: Flag as \`[BLOCKING]\` any production UI component containing hardcoded mock data (\`mockData\`), empty event handlers (\`onClick={() => {}}\`), missing error/loading state handling, or API calls bypassing shared contracts.
11533
- - Coordinate Pre-Merge Audit Triad with \`agent-security-auditor\` and \`agent-compliance-checker\`.
12328
+ - Coordinate Pre-Merge Audit Triad with \`agent-security-auditor\`, \`agent-privacy-officer\`, and \`agent-compliance-checker\`.
11534
12329
  - Categorize findings into: \`[BLOCKING]\` (quality violation or broken pattern), \`[CLEAN_CODE_SUGGESTION]\` (non-blocking improvement), and \`[COMPLIANT]\`.
11535
12330
  - If autonomy is $\\ge$ \`HUMAN_REVIEW_PLAN\`, conclude by emitting the Workflow Handoff block (\`templates/workflow/agent-handoff.template.md\`) to the human Tech Lead for final approval and merge, opening the Human Action Window. In \`AUTONOMOUS\` mode, omit interactive handoff.`
11536
12331
  },
@@ -11610,16 +12405,16 @@ var LIFECYCLE_SKILL_TEMPLATES = [
11610
12405
  id: "aisdlc-greenfield",
11611
12406
  title: "Greenfield Project Inception & Delivery Playbook",
11612
12407
  description: "Orchestrate end-to-end AI-SDLC onboarding and Phase 0 Inception for brand-new (Greenfield) projects, from repository initialization (aisdlc init) and NAF v4 Vision (ARCH-INTRO-*) through ProductShape, STRIDE Threat Modeling, arc42 Architecture, and initial SDD increment delivery.",
11613
- references: "[`process/02_product_definition.md`](../../process/02_product_definition.md), [`process/05_architecture_arc42_nafv4.md`](../../process/05_architecture_arc42_nafv4.md), [`process/06_spec_driven_development.md`](../../process/06_spec_driven_development.md), and [`process/09_agent_protocols.md`](../../process/09_agent_protocols.md).",
12408
+ references: "[`process/02_product_definition.md`](../../process/02_product_definition.md), [`process/04b_data_protection_and_privacy.md`](../../process/04b_data_protection_and_privacy.md), [`process/05_architecture_arc42_nafv4.md`](../../process/05_architecture_arc42_nafv4.md), [`process/06_spec_driven_development.md`](../../process/06_spec_driven_development.md), and [`process/09_agent_protocols.md`](../../process/09_agent_protocols.md).",
11614
12409
  body: `## Purpose & Trigger
11615
- Use this skill when starting a **brand-new software project from scratch (Greenfield)** or when \`specs/product/\` has no canonical baseline yet. It coordinates the sequential execution of AI-SDLC MCP/CLI tools and specialized role agents so no code is written before product vision, security enclaves, and architecture contracts exist.
12410
+ Use this skill when starting a **brand-new software project from scratch (Greenfield)** or when \`specs/product/\` has no canonical baseline yet. It coordinates the sequential execution of AI-SDLC MCP/CLI tools and specialized role agents so no code is written before product vision, security enclaves, privacy-by-design controls, and architecture contracts exist.
11616
12411
 
11617
12412
  ## End-to-End Execution Playbook
11618
12413
 
11619
12414
  ### Step 1: Repository Turnkey Initialization
11620
12415
  1. If the workspace has not been initialized with AI-SDLC schemas, policies, and templates, run MCP tool \`new\` (or CLI \`npx @aisdlc/cli init\`).
11621
12416
  2. Install the Git telemetry hook via \`npx aisdlc git hook install\` (\`pnpm run git:hook:install\`).
11622
- 3. Verify \`quality-policy.yaml\` and \`license-policy.yaml\` are present in the repository root.
12417
+ 3. Verify \`quality-policy.yaml\`, \`license-policy.yaml\`, and \`privacy-policy.yaml\` are present in the repository root.
11623
12418
 
11624
12419
  ### Step 2: Phase 0 Product Inception (\`agent-product-analyst\`)
11625
12420
  1. Delegate to or adopt [\`agent-product-analyst\`](../agent-product-analyst/SKILL.md).
@@ -11634,19 +12429,21 @@ Use this skill when starting a **brand-new software project from scratch (Greenf
11634
12429
  5. Validate schemas and duplicates via MCP tools \`verify_schemas\` and \`verify_duplicates\` (or \`npx aisdlc check --fix\`).
11635
12430
  6. **Mandatory Upstream UX & MVP Boundary Gate (\`agent-expert-user\`)**: Invoke [\`agent-expert-user\`](../agent-expert-user/SKILL.md) in **Design Mode** to stress-test the proposed workflows, enforce strict MVP boundaries, and separate core MVP \`UC-*\` from future roadmap backlog (\`templates/product/user-design-feedback.template.md\`).
11636
12431
 
11637
- ### Step 3: Shift-Left Cybersecurity & Threat Modeling (\`agent-threat-modeler\`)
12432
+ ### Step 3: Shift-Left Cybersecurity & Privacy-by-Design (\`agent-threat-modeler\` \u2794 \`agent-privacy-officer\`)
11638
12433
  1. Delegate to or adopt [\`agent-threat-modeler\`](../agent-threat-modeler/SKILL.md).
11639
12434
  2. Analyze every \`UC-*\` and \`FR-*\` using STRIDE and OWASP ASVS to create in \`specs/security/\`:
11640
12435
  - Threat Actors (\`ACT-THREAT-*\`)
11641
12436
  - Abuse Cases (\`ABUSE-*\` targeting \`UC-*\`)
11642
12437
  - Security Requirements (\`SEC-REQ-*\` with \`@security @mitigation\` negative Gherkin scenarios and \`SEC-ENC-*\` Zero Trust enclave bindings).
11643
- 3. Run \`verify_schemas\` (\`npx aisdlc verify schemas --path specs/security\`).
12438
+ 3. Hand off to [\`agent-privacy-officer\`](../agent-privacy-officer/SKILL.md) to apply LINDDUN and GDPR/LOPDGDD/ISO 27701 in \`specs/privacy/\`:
12439
+ - Personal Data Assets (\`DATA-ASSET-*\`), GDPR Art. 30 Records of Processing (\`PRIV-ROPA-*\`), and Privacy Requirements (\`PRIV-REQ-*\` with \`@privacy @gdpr\` Gherkin scenarios).
12440
+ 4. Run \`verify_schemas\` and \`verify_privacy\` (\`npx aisdlc verify privacy\`).
11644
12441
 
11645
12442
  ### Step 4: Modular Systems Architecture (\`agent-system-architect\`)
11646
12443
  1. Delegate to or adopt [\`agent-system-architect\`](../agent-system-architect/SKILL.md).
11647
- 2. Define building blocks (\`CMP-*\`) and Architectural Decision Records (\`ADR-*\`) in \`specs/architecture/\` using \`templates/architecture/\`, ensuring every \`CMP-*\` cites \`implements-use-cases\` (\`UC-*\`) and \`satisfies-requirements\` (\`FR-*\`, \`QR-*\`, \`SEC-REQ-*\`).
11648
- 3. Inspect third-party stack choices against \`license-policy.yaml\` via \`verify_licenses\`.
11649
- 4. **Technical Security Feedback Loop**: If new infrastructure, persistence, or auth decisions introduce attack vectors, return to \`agent-threat-modeler\` to add technical \`SEC-REQ-*\` mitigations before coding.
12444
+ 2. Define building blocks (\`CMP-*\`) and Architectural Decision Records (\`ADR-*\`) in \`specs/architecture/\` using \`templates/architecture/\`, ensuring every \`CMP-*\` cites \`implements-use-cases\` (\`UC-*\`) and \`satisfies-requirements\` (\`FR-*\`, \`QR-*\`, \`SEC-REQ-*\`, \`PRIV-REQ-*\`).
12445
+ 3. Inspect third-party stack choices against \`license-policy.yaml\` via \`verify_licenses\` and subprocessors against \`privacy-policy.yaml\` via \`verify_privacy\`.
12446
+ 4. **Technical Security & Privacy Feedback Loop**: If new infrastructure, persistence, LLM, or auth decisions introduce attack vectors or PII flows, return to \`agent-threat-modeler\` \u2794 \`agent-privacy-officer\` to add technical \`SEC-REQ-*\` and \`PRIV-REQ-*\` mitigations before coding.
11650
12447
 
11651
12448
  ### Step 5: Release Milestone & Topological Wave SDD Plan (\`1 UC-* = 1 CHG-*\`)
11652
12449
  1. **Open Release Milestone (\`Tier 2: release/v1.0.0\`)**: Group the approved MVP Use Cases (\`UC-001\`, \`UC-002\`, ...) under the initial release milestone (\`release/v1.0.0\`) and visualize the branch hierarchy via \`npx aisdlc git plan\`.
@@ -11665,29 +12462,30 @@ Use this skill when starting a **brand-new software project from scratch (Greenf
11665
12462
  id: "aisdlc-legacy-onboarding",
11666
12463
  title: "Legacy / Brownfield Retro-Inception Playbook",
11667
12464
  description: "Orchestrate progressive AI-SDLC adoption and Brownfield retro-inception on existing or legacy repositories without breaking production code, reverse-engineering architecture (ARCH-INTRO-*, CMP-*) and establishing baseline quality, security, and license audits before new SDD increments.",
11668
- references: "[`process/02_product_definition.md`](../../process/02_product_definition.md), [`process/04_open_source_license_compliance.md`](../../process/04_open_source_license_compliance.md), [`process/05_architecture_arc42_nafv4.md`](../../process/05_architecture_arc42_nafv4.md), [`process/10_quality_management_and_release_gates.md`](../../process/10_quality_management_and_release_gates.md), and [`process/09_agent_protocols.md`](../../process/09_agent_protocols.md).",
12465
+ references: "[`process/02_product_definition.md`](../../process/02_product_definition.md), [`process/04_open_source_license_compliance.md`](../../process/04_open_source_license_compliance.md), [`process/04b_data_protection_and_privacy.md`](../../process/04b_data_protection_and_privacy.md), [`process/05_architecture_arc42_nafv4.md`](../../process/05_architecture_arc42_nafv4.md), [`process/10_quality_management_and_release_gates.md`](../../process/10_quality_management_and_release_gates.md), and [`process/09_agent_protocols.md`](../../process/09_agent_protocols.md).",
11669
12466
  body: `## Purpose & Trigger
11670
- Use this skill when **adopting AI-SDLC in an existing or legacy codebase (Brownfield)** that already has production source code (\`src/\`, \`packages/\`, etc.) but lacks canonical PDaC specifications, arc42 architecture views, or deterministic quality/license gates.
12467
+ Use this skill when **adopting AI-SDLC in an existing or legacy codebase (Brownfield)** that already has production source code (\`src/\`, \`packages/\`, etc.) but lacks canonical PDaC specifications, arc42 architecture views, or deterministic quality/license/privacy gates.
11671
12468
 
11672
12469
  ## End-to-End Execution Playbook
11673
12470
 
11674
12471
  ### Step 1: Non-Destructive Framework Scaffolding
11675
12472
  1. Run MCP tool \`new\` (or CLI \`npx @aisdlc/cli init\`) on the existing repository.
11676
- - AI-SDLC enforces strict **no-clobber protection**: existing \`package.json\`, \`CLAUDE.md\`, or CI pipelines are preserved while injecting missing schemas (\`schemas/\`), templates (\`templates/\`), policies (\`quality-policy.yaml\`, \`license-policy.yaml\`), and MCP configs.
12473
+ - AI-SDLC enforces strict **no-clobber protection**: existing \`package.json\`, \`CLAUDE.md\`, or CI pipelines are preserved while injecting missing schemas (\`schemas/\`), templates (\`templates/\`), policies (\`quality-policy.yaml\`, \`license-policy.yaml\`, \`privacy-policy.yaml\`), and MCP configs.
11677
12474
  2. Install the Git commit trailer hook via \`npx aisdlc git hook install\`.
11678
12475
 
11679
12476
  ### Step 2: Baseline Diagnostic Audit (Read-Only Assessment)
11680
- Before modifying any code or creating SDD changes, run diagnostic verifiers to quantify existing technical, legal, and security debt:
12477
+ Before modifying any code or creating SDD changes, run diagnostic verifiers to quantify existing technical, legal, privacy, and security debt:
11681
12478
  1. **License & Dependency Audit (\`agent-compliance-checker\`)**: Run MCP tool \`verify_licenses\` (\`npx aisdlc verify licenses\`). Identify any viral (\`GPL\`/\`AGPL\`) or commercial (\`BSL\`/\`SSPL\`) dependencies already present in the lockfile and document exceptions or remediation plans.
11682
12479
  2. **Shift-Left Security Scan (\`agent-security-auditor\`)**: Run MCP tool \`verify_security\` (\`npx aisdlc verify security\`) to detect hardcoded secrets (Gate 11) or OWASP SAST vulnerabilities in legacy files.
11683
- 3. **AST Code Quality Baseline (\`agent-code-reviewer\`)**: Run MCP tool \`report_quality\` (\`npx aisdlc report quality\`) to generate \`reports/QUALITY_REPORT.md\` and identify legacy hotspots exceeding Cyclomatic Complexity ($\\le 10$), Cognitive Complexity ($\\le 15$), or Maintainability Index ($\\ge 50$).
12480
+ 3. **Privacy & PII Scan (\`agent-privacy-officer\`)**: Run MCP tool \`verify_privacy\` (\`npx aisdlc verify privacy\`) to detect PII in logs/telemetry or hardcoded real PII in legacy tests/seeds.
12481
+ 4. **AST Code Quality Baseline (\`agent-code-reviewer\`)**: Run MCP tool \`report_quality\` (\`npx aisdlc report quality\`) to generate \`reports/QUALITY_REPORT.md\` and identify legacy hotspots exceeding Cyclomatic Complexity ($\\le 10$), Cognitive Complexity ($\\le 15$), or Maintainability Index ($\\ge 50$).
11684
12482
 
11685
12483
  ### Step 3: Brownfield Retro-Inception (\`agent-system-architect\` & \`agent-product-analyst\`)
11686
12484
  Instead of attempting to document 100% of a legacy monolith upfront, apply **bounded retro-inception** focused on the system boundary and the domain areas under active evolution:
11687
12485
  1. **System Vision & Context (\`ARCH-INTRO-001\`)**: Use [\`agent-product-analyst\`](../agent-product-analyst/SKILL.md) to document the current system's mission, primary actors (\`ACT-*\`), and top quality goals (\`QR-*\`) in \`specs/architecture/ARCH-INTRO-001.md\`.
11688
12486
  2. **As-Is Component Mapping (\`CMP-*\` & \`ADR-*\`)**: Use [\`agent-system-architect\`](../agent-system-architect/SKILL.md) to map existing core modules/services into \`specs/architecture/CMP-*.md\` and capture historical architectural constraints (\`CON-*\`, \`ADR-*\`).
11689
12487
  3. **Core Use Cases Extraction (\`UC-*\`, \`FR-*\`)**: Extract canonical \`UC-*\` and \`FR-*\` artifacts in \`specs/product/\` for the specific bounded context or module that will be modified or extended next, including Gherkin acceptance scenarios reflecting current expected behavior (characterization specs).
11690
- 4. **Threat & Trust Boundary Mapping (\`agent-threat-modeler\`)**: Map existing trust zones (\`SEC-ENC-*\`) and active threat vectors (\`ACT-THREAT-*\`, \`ABUSE-*\`, \`SEC-REQ-*\`) on the target module.
12488
+ 4. **Threat & Privacy Boundary Mapping (\`agent-threat-modeler\` \u2794 \`agent-privacy-officer\`)**: Map existing trust zones (\`SEC-ENC-*\`), active threat vectors (\`ACT-THREAT-*\`, \`ABUSE-*\`, \`SEC-REQ-*\`), and personal data inventories (\`DATA-ASSET-*\`, \`PRIV-ROPA-*\`, \`PRIV-REQ-*\`) on the target module.
11691
12489
 
11692
12490
  ### Step 4: Characterization Testing & Synchronization
11693
12491
  1. Run MCP tool \`sdd_check_fix\` (\`npx aisdlc check --fix\`) to extract \`.feature\` files and compute canonical SHA-256 digests.
@@ -11707,16 +12505,17 @@ Once the target domain's baseline artifacts (\`ARCH-INTRO-*\`, \`UC-*\`, \`FR-*\
11707
12505
  description: "Orchestrate the complete Spec-Driven Development (SDD) lifecycle for bounded feature increments, enhancements, and bugfixes (CHG-* / TSK-*), from upstream requirement derivation and 4-tier Git branching through Red-Green-Refactor TDD, Pre-Merge Audit Triad, all 11 Quality Gates, and canonical baseline integration.",
11708
12506
  references: "[`process/06_spec_driven_development.md`](../../process/06_spec_driven_development.md), [`process/08_citation_contract_and_drift.md`](../../process/08_citation_contract_and_drift.md), [`process/10_quality_management_and_release_gates.md`](../../process/10_quality_management_and_release_gates.md), [`process/11_git_branching_and_lifecycle.md`](../../process/11_git_branching_and_lifecycle.md), and [`process/09_agent_protocols.md`](../../process/09_agent_protocols.md).",
11709
12507
  body: `## Purpose & Trigger
11710
- Use this skill for **every evolutionary increment (new feature, enhancement, refactoring, or bugfix)** on a project that already has an AI-SDLC baseline. It enforces strict 360\xB0 traceability from upstream ProductShape (\`UC-*\`, \`FR-*\`) through SDD (\`CHG-*\`, \`HOF-*\`, \`TSK-*\`), TDD implementation, the 11 Quality Gates, and baseline promotion.
12508
+ Use this skill for **every evolutionary increment (new feature, enhancement, refactoring, or bugfix)** on a project that already has an AI-SDLC baseline. It enforces strict 360\xB0 traceability from upstream ProductShape (\`UC-*\`, \`FR-*\`) through SDD (\`CHG-*\`, \`HOF-*\`, \`TSK-*\`), TDD implementation, the 12 Quality Gates, and baseline promotion.
11711
12509
 
11712
12510
  ## End-to-End Execution Playbook
11713
12511
 
11714
- ### Step 1: Upstream Product & Security Delta (\`agent-product-analyst\` & \`agent-threat-modeler\`)
12512
+ ### Step 1: Upstream Product, Security & Privacy Delta (\`agent-product-analyst\`, \`agent-threat-modeler\` & \`agent-privacy-officer\`)
11715
12513
  1. Inspect active changes via MCP tool \`get_active_handoff\` and verify whether the target Use Case (\`UC-*\`) or Requirement (\`FR-*\`) already exists in \`specs/product/\`.
11716
12514
  2. If the increment introduces new behavior or modifies business rules:
11717
12515
  - Use [\`agent-product-analyst\`](../agent-product-analyst/SKILL.md) to create or update the \`UC-*\`, \`BR-*\`, and \`FR-*\` (with \`@nominal\`, \`@boundary\`, \`@invalid\` Gherkin scenarios).
11718
12516
  - Run MCP tool \`verify_duplicates\` (\`npx aisdlc verify duplicates\`) to block lexical or functional collisions early.
11719
12517
  - Use [\`agent-threat-modeler\`](../agent-threat-modeler/SKILL.md) to model any new \`ABUSE-*\` and \`SEC-REQ-*\` mitigations.
12518
+ - Hand off to [\`agent-privacy-officer\`](../agent-privacy-officer/SKILL.md) to model any personal data assets (\`DATA-ASSET-*\`), GDPR Art. 30 processing activities (\`PRIV-ROPA-*\`), and privacy requirements (\`PRIV-REQ-*\`).
11720
12519
  3. Run \`sdd_check_fix\` (\`npx aisdlc check --fix\`) to sync Gherkin \`.feature\` files and validate schemas.
11721
12520
 
11722
12521
  ### Step 2: SDD Change Scaffolding & Architectural Design (\`agent-system-architect\`)
@@ -11743,7 +12542,7 @@ Use this skill for **every evolutionary increment (new feature, enhancement, ref
11743
12542
  1. Delegate to or adopt [\`agent-developer\`](../agent-developer/SKILL.md).
11744
12543
  2. Execute the **Mandatory 4-Step Implementation Order**:
11745
12544
  - (1) Clean Architecture boundaries, (2) Inter-module interfaces first, (3) Concrete component implementation (zero fake-wiring; all 4 UI states \`Loading\`, \`Empty\`, \`Error\`, \`Nominal\`), (4) Exhaustive per-function unit tests in \`tests/unit/\` (Happy Path, Sad Path, Boundary, Null/Empty).
11746
- 3. Verify any new dependency against \`license-policy.yaml\` via \`verify_licenses\`.
12545
+ 3. Verify any new dependency against \`license-policy.yaml\` via \`verify_licenses\` and PII handling against \`privacy-policy.yaml\` via \`verify_privacy\`.
11747
12546
  4. Run \`sdd_check_fix\` (\`npx aisdlc check --fix\`) and \`verify_quality\` (\`npx aisdlc verify quality\`) until Cyclomatic Complexity $\\le 10$, Cognitive $\\le 15$, Maintainability $\\ge 50$, and Function Length $\\le 40$ lines pass with zero violations.
11748
12547
 
11749
12548
  ### Step 6: Post-Development Functional Validation & Pre-Merge Audit Triad
@@ -11751,11 +12550,12 @@ Use this skill for **every evolutionary increment (new feature, enhancement, ref
11751
12550
  2. **Pre-Merge Audit Triad**: Execute concurrent review across:
11752
12551
  - [\`agent-code-reviewer\`](../agent-code-reviewer/SKILL.md) (SOLID, DRY, YAGNI, AST thresholds, zero fake-wiring)
11753
12552
  - [\`agent-security-auditor\`](../agent-security-auditor/SKILL.md) (\`verify_security\`: Gitleaks secrets + OWASP SAST)
12553
+ - [\`agent-privacy-officer\`](../agent-privacy-officer/SKILL.md) (\`verify_privacy\`: GDPR/LOPDGDD ROPA + PII-SAST)
11754
12554
  - [\`agent-compliance-checker\`](../agent-compliance-checker/SKILL.md) (\`verify_licenses\`: SPDX & SBOM compliance)
11755
- 3. **Consolidated Release Gate**: Run MCP tool \`verify\` (\`npx aisdlc verify all\`) and confirm all **11 Quality Gates** pass green.
12555
+ 3. **Consolidated Release Gate**: Run MCP tool \`verify\` (\`npx aisdlc verify all\`) and confirm all **12 Quality Gates** pass green.
11756
12556
 
11757
12557
  ### Step 7: Human PR Sign-Off, Baseline Integration & Release Closure
11758
- 1. **Feature Merge (\`feat/CHG-*\` \u2794 \`release/vX.Y.Z\`)**: Present the PR, KPI summary (\`kpi_pr\`), and autogenerated reports (\`reports/QUALITY_REPORT.md\`, \`reports/TRACEABILITY_MATRIX.md\`) to the human Tech Lead for review and approval (never auto-approve or auto-merge).
12558
+ 1. **Feature Merge (\`feat/CHG-*\` \u2794 \`release/vX.Y.Z\`)**: Present the PR, KPI summary (\`kpi_pr\`), and autogenerated reports (\`reports/QUALITY_REPORT.md\`, \`reports/TRACEABILITY_MATRIX.md\`, \`reports/ROPA_INVENTORY.md\`) to the human Tech Lead for review and approval (never auto-approve or auto-merge).
11759
12559
  2. **Canonical Baseline Promotion**: Once tasks in \`tasks.md\` are marked \`COMPLETED\` and approved, promote the change into the canonical baseline via MCP tool \`sdd_integrate\` (\`npx aisdlc sdd integrate --auto\`), which promotes \`FR-*\` to \`active\`, links \`CMP-*\`, and archives the change under \`specs/changes/completed/\`.
11760
12560
  3. **Release Milestone Closure (\`release/vX.Y.Z\` \u2794 \`main\`)**: When all \`CHG-*\` increments planned for \`release/vX.Y.Z\` are integrated:
11761
12561
  - Run full verification (\`verify\`), generate CycloneDX SBOM & legal notices (\`npx aisdlc verify licenses --sbom reports/sbom.cdx.json --notices THIRD_PARTY_NOTICES.md\`), compute release telemetry (\`kpi_release\` / \`npx aisdlc kpi release --release release/vX.Y.Z\`), and refresh the interactive dashboard (\`report_dashboard\`).
@@ -11763,7 +12563,7 @@ Use this skill for **every evolutionary increment (new feature, enhancement, ref
11763
12563
 
11764
12564
  ## Non-Negotiable Guardrails
11765
12565
  - **Single-Use-Case Scope (\`1 UC-* = 1 CHG-*\`)**: Each SDD change (\`CHG-*\`) must deliver at most 1 Use Case (\`UC-*\`). Bundling multiple \`UC-*\` into one \`handoff.yaml\` is blocked by \`verify_governance\` (\`Greenfield monolith detected\`). Scale throughput via parallel \`CHG-*\` branches/worktrees, not monolithic changes.
11766
- - **100% Design & Handoff Coverage in \`tasks.md\`**: Every \`CMP-*\`, \`FR-*\`, and \`SEC-REQ-*\` declared in \`design.md\` and \`handoff.yaml\` must be explicitly assigned to at least one \`TSK-*\` in \`tasks.md\`.`
12566
+ - **100% Design & Handoff Coverage in \`tasks.md\`**: Every \`CMP-*\`, \`FR-*\`, \`SEC-REQ-*\`, and \`PRIV-REQ-*\` declared in \`design.md\` and \`handoff.yaml\` must be explicitly assigned to at least one \`TSK-*\` in \`tasks.md\`.`
11767
12567
  }
11768
12568
  ];
11769
12569
  function renderAntigravitySkillFile(skill) {
@@ -11793,7 +12593,7 @@ This file defines the operational rules and specialized role mappings for Google
11793
12593
  1. **FORBIDDEN TO AUTO-APPROVE OR AUTO-MERGE | PROHIBIDO AUTO-APROBAR O AUTO-FUSIONAR**: No agent may auto-approve PRs or perform direct merges to protected branches (\`main\`, \`release/*\`). Only a human engineer may approve or merge.
11794
12594
  2. **FORBIDDEN TO INVENT PRODUCT OR ARCHITECTURE DECISIONS**: When facing ambiguous requirements, formulate clarifying questions (\`open-questions\`). Never assume unspecified intentions.
11795
12595
  3. **FORBIDDEN TO INTRODUCE DEPENDENCIES WITHOUT LICENSE INSPECTION**: Always consult \`license-policy.yaml\`. Dependencies with viral licenses (\`GPL\`/\`AGPL\`) or commercial paid licenses (\`BSL\`/\`SSPL\`) are strictly forbidden without authorization.
11796
- 4. **FORBIDDEN TO IGNORE CYBERSECURITY (SECURITY-BY-DEFAULT)**: Validate inputs, sanitize data, and add mitigation tests (\`SEC-TEST-*\`). Disabling linters or suppressing typing errors is prohibited.
12596
+ 4. **FORBIDDEN TO IGNORE CYBERSECURITY & PRIVACY (SECURITY-BY-DEFAULT & PRIVACY-BY-DEFAULT)**: Validate inputs, sanitize data, protect PII according to \`privacy-policy.yaml\`, and add mitigation tests (\`SEC-TEST-*\`, \`@privacy\`). Disabling linters or suppressing typing errors is prohibited.
11797
12597
  5. **MANDATORY CRYPTOGRAPHIC CITATION**: Every derived artifact must cite upstream artifacts using canonical identifiers and their Unix LF-normalized SHA-256 cryptographic hashes.
11798
12598
 
11799
12599
  ---
@@ -11814,23 +12614,31 @@ This file defines the operational rules and specialized role mappings for Google
11814
12614
  ### 2. \`agent-threat-modeler\` (Threat Modeler and Security Specialist)
11815
12615
  - **Mission**: Analyze use cases and proactively model adversaries, STRIDE attack vectors, and OWASP ASVS mitigations, both at product level and in the technical security feedback loop over architecture.
11816
12616
  - **Input**: Use cases \`UC-*\`, functional requirements \`FR-*\`, or architecture components (\`CMP-*\`, Mermaid diagrams, ADRs).
11817
- - **Output**: Cybersecurity triad (\`ACT-THREAT-*\`, \`ABUSE-*\`, \`SEC-REQ-*\`) compliant with \`schemas/security/\`.
12617
+ - **Output**: Cybersecurity triad (\`ACT-THREAT-*\`, \`ABUSE-*\`, \`SEC-REQ-*\`) compliant with \`schemas/security/\`, followed by handoff to \`agent-privacy-officer\`.
11818
12618
  - **Guardrails**:
11819
12619
  - \`status\` always starts in \`draft\`.
11820
12620
  - Negative BDD attack and rejection scenarios tagged with \`@security @mitigation\`.
11821
12621
  - Assignment of Zero Trust enclaves \`SEC-ENC-*\`.
11822
12622
 
11823
- ### 3. \`agent-system-architect\` (System Architect)
12623
+ ### 3. \`agent-privacy-officer\` (Data Protection & Privacy-by-Design Specialist)
12624
+ - **Mission**: Receive handoff from \`agent-threat-modeler\` to model personal data assets (\`DATA-ASSET-*\`), GDPR Art. 30 processing activities (\`PRIV-ROPA-*\`), and LINDDUN / GDPR / ISO 27701 privacy requirements (\`PRIV-REQ-*\`), and audit PR diffs against \`privacy-policy.yaml\`.
12625
+ - **Output**: Privacy triad (\`DATA-ASSET-*\`, \`PRIV-ROPA-*\`, \`PRIV-REQ-*\`) in \`specs/privacy/\` compliant with \`schemas/privacy/\`, and \`DPIA-*\` requests when Art. 9 sensitive data is detected.
12626
+ - **Guardrails**:
12627
+ - \`status\` always starts in \`draft\`.
12628
+ - Every \`PRIV-REQ-*\` includes Gherkin scenarios tagged with \`@<PRIV-REQ-ID> @privacy @gdpr @automated @regression\`.
12629
+ - Run \`pnpm run verify:privacy\` to block PII in logs/prompts and enforce ROPA & retention/erasure policies.
12630
+
12631
+ ### 4. \`agent-system-architect\` (System Architect)
11824
12632
  - **Mission**: Translate the approved product definition into a modular technical architecture based on arc42 enriched with NAF v4.
11825
12633
  - **Output**: Architecture components (\`CMP-*\`), Mermaid diagrams, and immutable \`ADR-*\` records compliant with \`schemas/architecture/\`.
11826
12634
  - **Guardrails**:
11827
- - Every \`CMP-*\` must declare \`satisfies-requirements\` linking \`FR-*\`, \`QR-*\`, and \`SEC-REQ-*\`.
11828
- - Emit a return handoff to \`agent-threat-modeler\` in the technical security feedback loop when infrastructure or persistence decisions introduce new attack vectors.
12635
+ - Every \`CMP-*\` must declare \`satisfies-requirements\` linking \`FR-*\`, \`QR-*\`, \`SEC-REQ-*\`, and \`PRIV-REQ-*\`.
12636
+ - Emit a return handoff to \`agent-threat-modeler\` (chaining to \`agent-privacy-officer\`) in the technical security/privacy feedback loop when infrastructure or persistence decisions introduce new attack vectors or PII flows.
11829
12637
 
11830
- ### 4. \`agent-qa-engineer\` (QA Engineer and SDET)
11831
- - **Mission**: Translate approved requirements (\`FR-*\`, \`SEC-REQ-*\`, \`QR-*\`) into comprehensive FAILING (red) BDD/Gherkin, End-to-End (E2E), UI, and unit test suites, before \`agent-developer\` writes production code.
12638
+ ### 5. \`agent-qa-engineer\` (QA Engineer and SDET)
12639
+ - **Mission**: Translate approved requirements (\`FR-*\`, \`SEC-REQ-*\`, \`PRIV-REQ-*\`, \`QR-*\`) into comprehensive FAILING (red) BDD/Gherkin, End-to-End (E2E), UI, and unit test suites, before \`agent-developer\` writes production code.
11832
12640
  - **Input**: Approved requirements from the \`handoff.yaml\` sidecar (\`HOF-*\`).
11833
- - **Output**: Failing Gherkin, E2E, and UI test suites covering: nominal case, boundary cases, out-of-range cases, per-interactive-element tests (Happy Path, Sad Path, Boundary Values), and conditional categories (security, performance, idempotency, postconditions, interface contract).
12641
+ - **Output**: Failing Gherkin, E2E, and UI test suites covering: nominal case, boundary cases, out-of-range cases, per-interactive-element tests (Happy Path, Sad Path, Boundary Values), and conditional categories (security, privacy, performance, idempotency, postconditions, interface contract).
11834
12642
  - **Guardrails**:
11835
12643
  - FORBIDDEN to include production code or anticipate implementations.
11836
12644
  - **Agreed Project Technology**: Always use the testing frameworks, E2E/UI runners, and technology stack agreed upon for the project (if any), without requiring the user to specify it in the prompt.
@@ -11840,7 +12648,7 @@ This file defines the operational rules and specialized role mappings for Google
11840
12648
  - Mandatory tags: \`@<FR-ID> @automated @regression\`.
11841
12649
  - Run \`pnpm run verify:testing\` before emitting handoff.
11842
12650
 
11843
- ### 5. \`agent-developer\` (Software Developer)
12651
+ ### 6. \`agent-developer\` (Software Developer)
11844
12652
  - **Mission**: Implement atomic tasks from SDD specifications (\`tasks.md\`) with clean, strictly typed code and thorough tests.
11845
12653
  - **Directives**:
11846
12654
  - **Mandatory 4-Step Implementation Order**: (1) Define/refine Clean Architecture layers & boundaries, (2) Define interfaces/ports for all inter-module interactions to avoid direct module coupling, (3) Implement components consuming/fulfilling those interfaces, (4) Write unit tests for every function covering Happy Path, Sad Path, Boundary Values, and Unexpected/Null/Empty values.
@@ -11848,36 +12656,36 @@ This file defines the operational rules and specialized role mappings for Google
11848
12656
  - Make tests delivered by \`agent-qa-engineer\` pass green without altering them to accommodate code.
11849
12657
  - Respect \`quality-policy.yaml\` thresholds: CC $\\le 10$, Cognitive $\\le 15$, MI $\\ge 50$, LOC $\\le 40$.
11850
12658
  - Run pre-flight with auto-fix: \`pnpm run check:fix\` and full verification: \`pnpm run verify:all\`.
11851
- - Upon completing green implementation, suggest handoff to \`agent-expert-user\` for post-development functional validation prior to security audit.
12659
+ - Upon completing green implementation, suggest handoff to \`agent-expert-user\` for post-development functional validation prior to security and privacy audit.
11852
12660
 
11853
- ### 6. \`agent-security-auditor\` (Adversarial Code Auditor)
12661
+ ### 7. \`agent-security-auditor\` (Adversarial Code Auditor)
11854
12662
  - **Mission**: Rigorously examine Pull Requests for business logic vulnerabilities, injection vectors, secret leaks, and authorization flaws as part of the Pre-Merge Audit Triad.
11855
12663
  - **Directives**:
11856
12664
  - Analyze code diffs with an attacker mindset and run \`pnpm run verify:security\`.
11857
12665
  - Issue findings with CVSS v3.1 severity scoring and block any PR introducing CRITICAL or HIGH security risks.
11858
12666
 
11859
- ### 7. \`agent-compliance-checker\` (Open Source License Compliance Auditor)
12667
+ ### 8. \`agent-compliance-checker\` (Open Source License Compliance Auditor)
11860
12668
  - **Mission**: Audit dependency manifests and ensure every direct and transitive third-party package complies with \`license-policy.yaml\` as part of the Pre-Merge Audit Triad.
11861
12669
  - **Directives**:
11862
12670
  - Verify SPDX identifiers via \`pnpm run verify:licenses\`, immediately blocking viral (\`GPL\`, \`AGPL\`) or unapproved commercial (\`BSL\`, \`SSPL\`) licenses.
11863
12671
 
11864
- ### 8. \`agent-expert-user\` (Expert User and Domain Evaluator)
12672
+ ### 9. \`agent-expert-user\` (Expert User and Domain Evaluator)
11865
12673
  - **Mission**: Contrast design and specifications (design phase) and functionally validate finished software against \`UC-*\` and \`FR-*\` (post-development phase).
11866
12674
  - **Directives**:
11867
12675
  - Design mode (upstream): Adopt the primary actor's profile under stressful field conditions, applying bimodal discrimination (strict MVP core vs. roadmap suggestion backlog in \`templates/product/user-design-feedback.template.md\`).
11868
12676
  - Functional validation mode (downstream / pre-PR / post-development functional validation): Thoroughly contrast interface and actual CLI execution against \`UC-*\` and \`FR-*\` acceptance criteria before pre-merge security audit.
11869
- - Emit handoff block suggesting \`agent-code-reviewer\` / \`agent-security-auditor\` if compliant, or return to \`agent-developer\` on functional drift.
12677
+ - Emit handoff block suggesting \`agent-code-reviewer\` / \`agent-security-auditor\` / \`agent-privacy-officer\` if compliant, or return to \`agent-developer\` on functional drift.
11870
12678
 
11871
- ### 9. \`agent-code-reviewer\` (Technical and Architectural Code Reviewer)
12679
+ ### 10. \`agent-code-reviewer\` (Technical and Architectural Code Reviewer)
11872
12680
  - **Mission**: Audit Pull Requests evaluating code cleanliness, adherence to SOLID, DRY, YAGNI principles, design patterns, and respect for complexity and maintainability thresholds (\`quality-policy.yaml\`), forming part of the Pre-Merge Audit Triad.
11873
12681
  - **Directives**:
11874
12682
  - Respect \`quality-policy.yaml\` thresholds: CC $\\le 10$, Cognitive $\\le 15$, MI $\\ge 50$, LOC $\\le 40$.
11875
12683
  - Detect improper coupling, code smells, magic numbers, ambiguous names, and encapsulation violations.
11876
12684
  - Flag premature abstractions and speculative code violating YAGNI.
11877
- - Coordinate Pre-Merge Audit Triad with \`agent-security-auditor\` and \`agent-compliance-checker\`.
12685
+ - Coordinate Pre-Merge Audit Triad with \`agent-security-auditor\`, \`agent-privacy-officer\`, and \`agent-compliance-checker\`.
11878
12686
  - Classify findings into: \`[BLOCKING]\` (quality violation or broken pattern), \`[CLEAN_CODE_SUGGESTION]\` (non-blocking improvement), and \`[COMPLIANT]\`.
11879
12687
 
11880
- ### 10. \`agent-devops\` (Automation and Infrastructure Engineer)
12688
+ ### 11. \`agent-devops\` (Automation and Infrastructure Engineer)
11881
12689
  - **Mission**: Maintain, evolve, and audit automated project infrastructure: CI/CD workflows, Docker containers, IaC manifests, and support scripts.
11882
12690
  - **Directives**:
11883
12691
  - Strict infrastructure domain: Operates exclusively in \`.github/workflows/\`, \`Dockerfile*\`, \`docker-compose*.yml\`, IaC manifests, and \`scripts/\`.
@@ -11903,7 +12711,7 @@ This file defines the operational rules and specialized role mappings for Google
11903
12711
  - **Conditional Activation Rule by Autonomy**:
11904
12712
  - \u{1F7E2} **\`AUTONOMOUS\`** (or exclusive final supervision in PR/CI): **OMITTED**. Do not request or emit interactive handoff to avoid interrupting unattended execution.
11905
12713
  - \u{1F7E1} **Autonomy $\\ge$ \`HUMAN_REVIEW_PLAN\`** (\`HUMAN_REVIEW_PLAN\`, \`AMBIGUOUS\`, \`HIGH_RISK_MANUAL\`): **MANDATORY**. Emit the Workflow Handoff block compliant with [\`templates/workflow/agent-handoff.template.md\`](../../templates/workflow/agent-handoff.template.md) and **STOP**.
11906
- - **Block Contents**: Declare produced deliverables, recommend the next role in workflow (\`agent-threat-modeler\`, \`agent-system-architect\`, \`agent-qa-engineer\`, \`agent-developer\`, \`agent-expert-user\`, \`agent-code-reviewer\`, \`agent-security-auditor\`, \`agent-compliance-checker\`, \`agent-devops\`, etc.), provide suggested invocation prompt, and keep **the Human Action Window open at all times for the human user to take action** (review, edit by hand, pause/reroute, or delegate).
12714
+ - **Block Contents**: Declare produced deliverables, recommend the next role in workflow (\`agent-threat-modeler\`, \`agent-privacy-officer\`, \`agent-system-architect\`, \`agent-qa-engineer\`, \`agent-developer\`, \`agent-expert-user\`, \`agent-code-reviewer\`, \`agent-security-auditor\`, \`agent-compliance-checker\`, \`agent-devops\`, etc.), provide suggested invocation prompt, and keep **the Human Action Window open at all times for the human user to take action** (review, edit by hand, pause/reroute, or delegate).
11907
12715
  `;
11908
12716
  var STARTER_CURSOR_CORE_RULES = `---
11909
12717
  description: Global canonical directives, 5 unbreakable commandments, and AI-SDLC pre-flight
@@ -11920,7 +12728,7 @@ Every agent operating in this repository must strictly observe the following gua
11920
12728
  1. **FORBIDDEN TO AUTO-APPROVE OR AUTO-MERGE | PROHIBIDO AUTO-APROBAR O AUTO-FUSIONAR**: Do not approve PRs or execute direct merges to protected branches (\`main\`, \`release/*\`). Approval is exclusively reserved for human reviewers.
11921
12729
  2. **FORBIDDEN TO INVENT PRODUCT OR ARCHITECTURE DECISIONS**: When facing ambiguity, formulate open questions (\`open-questions\`). Never assume undocumented requirements.
11922
12730
  3. **FORBIDDEN TO INTRODUCE DEPENDENCIES WITHOUT LICENSE INSPECTION**: Always verify \`license-policy.yaml\`. Viral dependencies (GPL/AGPL) or commercial paid dependencies (BSL/SSPL) are strictly forbidden without explicit human approval.
11923
- 4. **FORBIDDEN TO IGNORE CYBERSECURITY (SECURITY-BY-DEFAULT)**: Validate inputs, apply least privilege, and accompany every change with security tests (\`SEC-TEST-*\`). Suppressing linters or tests to force a green pipeline is prohibited.
12731
+ 4. **FORBIDDEN TO IGNORE CYBERSECURITY & PRIVACY (SECURITY-BY-DEFAULT & PRIVACY-BY-DEFAULT)**: Validate inputs, apply least privilege, protect PII according to \`privacy-policy.yaml\`, and accompany every change with security and privacy tests (\`SEC-TEST-*\`, \`@privacy\`). Suppressing linters or tests to force a green pipeline is prohibited.
11924
12732
  5. **MANDATORY CRYPTOGRAPHIC CITATION**: Link specifications using immutable identifiers and Unix LF-normalized SHA-256 hashes.
11925
12733
 
11926
12734
  ## 2. Pre-Flight Verification Commands
@@ -11940,7 +12748,8 @@ Before finalizing changes or proposing commits:
11940
12748
  | Role | Mission (summary) |
11941
12749
  | :--- | :--- |
11942
12750
  | \`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\`. |
11943
- | \`agent-threat-modeler\` | STRIDE/OWASP threat triad (\`ACT-THREAT-*\`, \`ABUSE-*\`, \`SEC-REQ-*\`). |
12751
+ | \`agent-threat-modeler\` | STRIDE/OWASP threat triad (\`ACT-THREAT-*\`, \`ABUSE-*\`, \`SEC-REQ-*\`); hands off to \`agent-privacy-officer\`. |
12752
+ | \`agent-privacy-officer\` | LINDDUN & GDPR/LOPDGDD privacy triad (\`DATA-ASSET-*\`, \`PRIV-ROPA-*\`, \`PRIV-REQ-*\`) + Pre-Merge \`verify:privacy\`. |
11944
12753
  | \`agent-system-architect\` | Modular arc42 + NAF v4 architecture (\`CMP-*\`, Mermaid diagrams, \`ADR-*\`). |
11945
12754
  | \`agent-qa-engineer\` | FAILING BDD/Gherkin, E2E, and UI suites (using agreed project tech; Happy Path, Sad Path & Boundary Values per interactive UI element) before \`agent-developer\` writes code. |
11946
12755
  | \`agent-developer\` | Atomic tasks from \`tasks.md\`; respects autonomy mode; runs \`pnpm run check:fix\` + \`pnpm run verify:all\`. |
@@ -11963,8 +12772,8 @@ Before finalizing changes or proposing commits:
11963
12772
  - **Content**: Declare completed deliverables, recommend next role(s), provide suggested invocation prompt, and **keep the Human Action Window open for the human user to take action** (review, edit by hand, pause/reroute, or delegate).
11964
12773
  `;
11965
12774
  var STARTER_CURSOR_PRODUCT_RULES = `---
11966
- description: Directives for SDD specifications editing, ProductShape artifacts, and Cybersecurity
11967
- globs: specs/**, templates/**, product/**, security/**
12775
+ description: Directives for SDD specifications editing, ProductShape artifacts, Cybersecurity, and Privacy
12776
+ globs: specs/**, templates/**, product/**, security/**, privacy/**
11968
12777
  alwaysApply: false
11969
12778
  ---
11970
12779
 
@@ -11983,14 +12792,17 @@ Every generated or modified artifact must follow canonical naming and satisfy it
11983
12792
  - Threat Actors: \`ACT-THREAT-[SUFFIX]\` (\`schemas/security/threat-actor.schema.json\`)
11984
12793
  - Abuse Cases: \`ABUSE-[SUFFIX]\` (\`schemas/security/abuse-case.schema.json\`)
11985
12794
  - Security Requirements: \`SEC-REQ-[SUFFIX]\` (\`schemas/security/security-req.schema.json\`)
12795
+ - Data Assets: \`DATA-ASSET-[SUFFIX]\` (\`schemas/privacy/data-asset.schema.json\`)
12796
+ - Processing Activities (ROPA): \`PRIV-ROPA-[SUFFIX]\` (\`schemas/privacy/privacy-ropa.schema.json\`)
12797
+ - Privacy Requirements: \`PRIV-REQ-[SUFFIX]\` (\`schemas/privacy/privacy-req.schema.json\`)
11986
12798
 
11987
12799
  ## 2. "AI as Scribe" Protocol Rules
11988
12800
  - **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-*\`.
11989
12801
  - **Initial Status**: Every new artifact strictly starts with \`status: draft\`. Creating artifacts directly as \`active\` or \`approved\` is forbidden.
11990
12802
  - **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.
11991
- - **Security Mitigations**: Every \`SEC-REQ-*\` must include negative Gherkin tests (\`@security @mitigation\`).
12803
+ - **Security & Privacy Mitigations**: Every \`SEC-REQ-*\` must include negative Gherkin tests (\`@security @mitigation\`) and every \`PRIV-REQ-*\` must include Gherkin privacy scenarios (\`@privacy @gdpr\`).
11992
12804
  - **Use Cases (User Story Structure)**: In every \`UC-*\`, the \`1. Intent and Outcome\` section must be written using the standard English structure: \`As a <ACT-ID>... I want <action>... To <outcome>...\`.
11993
- - **Deterministic Validation**: Run \`pnpm run verify:schemas\` and \`pnpm run verify:duplicates\` before presenting the draft to the human reviewer.
12805
+ - **Deterministic Validation**: Run \`pnpm run verify:schemas\`, \`pnpm run verify:duplicates\`, and \`pnpm run verify:privacy\` before presenting the draft to the human reviewer.
11994
12806
  `;
11995
12807
  var STARTER_CURSOR_QUALITY_RULES = `---
11996
12808
  description: Directives for code quality, architecture, TDD, and complexity limits
@@ -12012,7 +12824,7 @@ Canonical Reference: [\`process/09_agent_protocols.md\`](process/09_agent_protoc
12012
12824
  ## 2. TDD Methodology, Clean Architecture & Unit Testing
12013
12825
  - **Mandatory 4-Step Implementation Order**: (1) Define/refine Clean Architecture layers & boundaries, (2) Define interfaces/ports for all inter-module interactions to avoid direct module coupling, (3) Implement components consuming/fulfilling those interfaces, (4) Write unit tests for every function covering Happy Path, Sad Path, Boundary Values, and Unexpected/Null/Empty values.
12014
12826
  - Apply Test-Driven Development: generate unit tests before or alongside component logic.
12015
- - Tag tests linked to requirements with header comments citing the ID (\`FR-*\` or \`SEC-REQ-*\`) to enable reverse traceability.
12827
+ - Tag tests linked to requirements with header comments citing the ID (\`FR-*\`, \`SEC-REQ-*\`, or \`PRIV-REQ-*\`) to enable reverse traceability.
12016
12828
  - Suppressing types (\`any\`), linter rules (\`eslint-disable\`), or unit tests to force pipeline passage is prohibited.
12017
12829
 
12018
12830
  ## 3. Open Source License Policy (\`license-policy.yaml\`)
@@ -12027,7 +12839,7 @@ var STARTER_CLAUDE_RULES = `# Claude Code Instructions - AI-SDLC Monorepo
12027
12839
 
12028
12840
  Canonical Reference: [\`process/09_agent_protocols.md\`](process/09_agent_protocols.md) and [\`process/01_governance_and_roles.md\`](process/01_governance_and_roles.md).
12029
12841
 
12030
- This repository implements the **AI-SDLC** framework (Spec-Driven Development, deterministic quality governance, and OSS license compliance for human-agent collaboration).
12842
+ This repository implements the **AI-SDLC** framework (Spec-Driven Development, deterministic quality governance, Privacy-by-Design, and OSS license compliance for human-agent collaboration).
12031
12843
 
12032
12844
  ---
12033
12845
 
@@ -12036,7 +12848,7 @@ This repository implements the **AI-SDLC** framework (Spec-Driven Development, d
12036
12848
  1. **FORBIDDEN TO AUTO-APPROVE OR AUTO-MERGE | PROHIBIDO AUTO-APROBAR O AUTO-FUSIONAR**: Never approve PRs or merge directly to \`main\` or protected branches. Approval is exclusively a human prerogative.
12037
12849
  2. **FORBIDDEN TO INVENT PRODUCT OR ARCHITECTURE DECISIONS**: When facing ambiguous requirements, formulate open questions (\`open-questions\`). Never assume undocumented behaviors.
12038
12850
  3. **FORBIDDEN TO INTRODUCE DEPENDENCIES WITHOUT LICENSE INSPECTION**: Always validate the SPDX identifier against \`license-policy.yaml\`. Viral libraries (\`GPL\`/\`AGPL\`) or paid commercial libraries (\`BSL\`/\`SSPL\`) are strictly forbidden without formal human approval.
12039
- 4. **FORBIDDEN TO IGNORE CYBERSECURITY (SECURITY-BY-DEFAULT)**: Validate inputs, sanitize data, and include mitigation tests (\`SEC-TEST-*\`). Disabling linters or suppressing typing errors (\`any\`, \`@ts-ignore\`) is prohibited.
12851
+ 4. **FORBIDDEN TO IGNORE CYBERSECURITY & PRIVACY (SECURITY-BY-DEFAULT & PRIVACY-BY-DEFAULT)**: Validate inputs, sanitize data, protect PII according to \`privacy-policy.yaml\`, and include mitigation tests (\`SEC-TEST-*\`, \`@privacy\`). Disabling linters or suppressing typing errors (\`any\`, \`@ts-ignore\`) is prohibited.
12040
12852
  5. **MANDATORY CRYPTOGRAPHIC CITATION**: Every spec or sidecar must cite immutable identifiers and Unix LF-normalized SHA-256 digests.
12041
12853
 
12042
12854
  ---
@@ -12047,7 +12859,7 @@ This repository implements the **AI-SDLC** framework (Spec-Driven Development, d
12047
12859
  # 1. Pre-flight with deterministic auto-fix (Gherkin & SHA-256 digests)
12048
12860
  pnpm run check:fix
12049
12861
 
12050
- # 2. Complete verification across all Quality Gates (Quality, RTM, Governance, Testing, Licenses, PDaC, Schemas, Duplicates, Security)
12862
+ # 2. Complete verification across all Quality Gates (Quality, RTM, Governance, Testing, Licenses, PDaC, Schemas, Duplicates, Security, Privacy)
12051
12863
  pnpm run verify:all
12052
12864
 
12053
12865
  # 3. Complete automated test suite (Vitest)
@@ -12075,37 +12887,41 @@ npx tsx packages/cli/src/index.ts sdd integrate --change <chg-id>
12075
12887
  - **Guardrails**: \`status\` always starts in \`draft\`. Mandatory Gherkin criteria with \`@<ID> @automated @regression\`.
12076
12888
 
12077
12889
  ### 2. \`agent-threat-modeler\` (Threat Modeler and Security Specialist)
12078
- - **Mission**: Analyze use cases and proactively model adversaries, STRIDE attack vectors, and OWASP ASVS mitigations, both at product level and in the technical security feedback loop over architecture.
12890
+ - **Mission**: Analyze use cases and proactively model adversaries, STRIDE attack vectors, and OWASP ASVS mitigations, both at product level and in the technical security feedback loop over architecture, handing off to \`agent-privacy-officer\`.
12079
12891
  - **Output**: Cybersecurity triad (\`ACT-THREAT-*\`, \`ABUSE-*\`, \`SEC-REQ-*\`) compliant with \`schemas/security/\`.
12080
12892
 
12081
- ### 3. \`agent-system-architect\` (System Architect)
12893
+ ### 3. \`agent-privacy-officer\` (Data Protection & Privacy-by-Design Specialist)
12894
+ - **Mission**: Receive handoff from \`agent-threat-modeler\` to model personal data assets (\`DATA-ASSET-*\`), GDPR Art. 30 records of processing (\`PRIV-ROPA-*\`), and LINDDUN / GDPR / ISO 27701 privacy requirements (\`PRIV-REQ-*\`), and audit code diffs against \`privacy-policy.yaml\`.
12895
+ - **Directives**: Run \`pnpm run verify:privacy\`, enforce PII masking in logs/LLM prompts, and trigger \`DPIA-*\` requests on Art. 9 sensitive data.
12896
+
12897
+ ### 4. \`agent-system-architect\` (System Architect)
12082
12898
  - **Mission**: Translate the approved product definition into a modular technical architecture based on arc42 enriched with NAF v4 (\`CMP-*\`, Mermaid diagrams, \`ADR-*\`).
12083
- - **Guardrails**: Declare \`satisfies-requirements\` on every \`CMP-*\` and trigger the technical security feedback loop toward \`agent-threat-modeler\` when infrastructure decisions introduce new attack vectors.
12899
+ - **Guardrails**: Declare \`satisfies-requirements\` on every \`CMP-*\` (including \`PRIV-REQ-*\`), instantiate mandatory building block \`CMP-OBSERVABILITY\` (Level 2/3) alongside Section 8 and an ADR for runtime telemetry, and trigger the technical security/privacy feedback loop toward \`agent-threat-modeler\` \u2794 \`agent-privacy-officer\` when infrastructure decisions introduce new attack vectors or PII flows.
12084
12900
 
12085
- ### 4. \`agent-qa-engineer\` (QA Engineer and SDET)
12086
- - **Mission**: Translate approved requirements (\`FR-*\`, \`SEC-REQ-*\`, \`QR-*\`) into comprehensive FAILING (red) BDD/Gherkin, End-to-End (E2E), UI, and unit test suites, before \`agent-developer\` writes production code.
12901
+ ### 5. \`agent-qa-engineer\` (QA Engineer and SDET)
12902
+ - **Mission**: Translate approved requirements (\`FR-*\`, \`SEC-REQ-*\`, \`PRIV-REQ-*\`, \`QR-*\`) into comprehensive FAILING (red) BDD/Gherkin, End-to-End (E2E), UI, and unit test suites, before \`agent-developer\` writes production code.
12087
12903
  - **Guardrails**: Always use the agreed project technology/testing stack (if any). Never omit End-to-End (E2E) and UI tests. Create specific tests for every interactive UI element covering Happy Path, Sad Path, and Boundary Values. FORBIDDEN to include production code. Mandatory tags: \`@<FR-ID> @automated @regression\`.
12088
12904
 
12089
- ### 5. \`agent-developer\` (Software Developer)
12905
+ ### 6. \`agent-developer\` (Software Developer)
12090
12906
  - **Mission**: Implement atomic tasks from SDD specifications (\`tasks.md\`) with clean, strictly typed code and thorough tests.
12091
12907
  - **Directives**: Execute the mandatory 4-step order: (1) Clean Architecture definition/redefinition, (2) Inter-module interfaces first, (3) Component implementation, (4) Per-function unit tests (Happy Path, Sad Path, Boundary Values, Unexpected/Null/Empty values). Respect the autonomy mode. Make tests delivered by \`agent-qa-engineer\` pass green. Run \`pnpm run check:fix\` and \`pnpm run verify:all\`.
12092
12908
 
12093
- ### 6. \`agent-security-auditor\` (Adversarial Code Auditor)
12909
+ ### 7. \`agent-security-auditor\` (Adversarial Code Auditor)
12094
12910
  - **Mission**: Examine Pull Requests for business logic vulnerabilities, injection vectors, secret leaks, and authorization flaws as part of the Pre-Merge Audit Triad.
12095
12911
  - **Directives**: Run \`pnpm run verify:security\`, evaluate CVSS v3.1 severity, and block CRITICAL/HIGH risks.
12096
12912
 
12097
- ### 7. \`agent-compliance-checker\` (Open Source License Compliance Auditor)
12913
+ ### 8. \`agent-compliance-checker\` (Open Source License Compliance Auditor)
12098
12914
  - **Mission**: Audit dependency manifests against \`license-policy.yaml\` as part of the Pre-Merge Audit Triad.
12099
12915
  - **Directives**: Run \`pnpm run verify:licenses\`, blocking viral (\`GPL\`, \`AGPL\`) or unapproved commercial (\`BSL\`, \`SSPL\`) packages.
12100
12916
 
12101
- ### 8. \`agent-expert-user\` (Expert User and Domain Evaluator)
12917
+ ### 9. \`agent-expert-user\` (Expert User and Domain Evaluator)
12102
12918
  - **Mission**: Contrast design and specifications (design phase) and functionally validate finished software against \`UC-*\` and \`FR-*\` (post-development functional validation phase).
12103
12919
 
12104
- ### 9. \`agent-code-reviewer\` (Technical and Architectural Code Reviewer)
12920
+ ### 10. \`agent-code-reviewer\` (Technical and Architectural Code Reviewer)
12105
12921
  - **Mission**: Audit Pull Requests evaluating code cleanliness, adherence to SOLID, DRY, YAGNI principles, and respect for \`quality-policy.yaml\` thresholds, forming part of the Pre-Merge Audit Triad.
12106
12922
  - **Findings classification**: \`[BLOCKING]\`, \`[CLEAN_CODE_SUGGESTION]\`, \`[COMPLIANT]\`.
12107
12923
 
12108
- ### 10. \`agent-devops\` (Automation and Infrastructure Engineer)
12924
+ ### 11. \`agent-devops\` (Automation and Infrastructure Engineer)
12109
12925
  - **Mission**: Maintain, evolve, and audit automated project infrastructure: CI/CD workflows, Docker containers, IaC manifests, and support scripts.
12110
12926
  - **NON-INVASION GUARDRAIL**: STRICTLY FORBIDDEN from modifying application source code (\`src/\`, \`packages/*/src/\`).
12111
12927
 
@@ -12176,8 +12992,8 @@ You operate as an assistant agent in the **AI-SDLC** repository. You are not a s
12176
12992
  - If a requirement is ambiguous or incomplete, formulate open questions (\`open-questions\`) to the human user. Guessing undocumented intentions is forbidden.
12177
12993
  3. **FORBIDDEN TO INTRODUCE DEPENDENCIES WITHOUT LICENSE INSPECTION**:
12178
12994
  - Before suggesting or adding dependencies to manifests (\`package.json\`, etc.), validate their SPDX identifier against \`license-policy.yaml\`. Adding viral (\`GPL\`, \`AGPL\`) or commercial paid (\`BSL\`, \`SSPL\`) licenses without human authorization is prohibited.
12179
- 4. **FORBIDDEN TO IGNORE CYBERSECURITY (SECURITY-BY-DEFAULT)**:
12180
- - All code must enforce least privilege, sanitize external inputs, and include mitigation tests (\`SEC-TEST-*\`). Suppressing types (\`any\`), linters, or tests to force a green pipeline is prohibited.
12995
+ 4. **FORBIDDEN TO IGNORE CYBERSECURITY & PRIVACY (SECURITY-BY-DEFAULT & PRIVACY-BY-DEFAULT)**:
12996
+ - All code must enforce least privilege, sanitize external inputs, protect PII according to \`privacy-policy.yaml\`, and include mitigation tests (\`SEC-TEST-*\`, \`@privacy\`). Suppressing types (\`any\`), linters, or tests to force a green pipeline is prohibited.
12181
12997
  5. **MANDATORY CRYPTOGRAPHIC CITATION**:
12182
12998
  - Every specification, design, or sidecar must reference canonical identifiers and their Unix LF-normalized SHA-256 digests.
12183
12999
 
@@ -12222,7 +13038,7 @@ Non-Negotiable Quality Thresholds (\`quality-policy.yaml\`):
12222
13038
  - **Conditional Activation**:
12223
13039
  * \u{1F7E2} **\`AUTONOMOUS\` Mode** (or PR/CI final supervision): **OMITTED**. Do not interrupt unattended execution.
12224
13040
  * \u{1F7E1} **Autonomy $\\ge$ \`HUMAN_REVIEW_PLAN\`** (\`HUMAN_REVIEW_PLAN\`, \`AMBIGUOUS\`, \`HIGH_RISK_MANUAL\`): **MANDATORY**. Emit Workflow Handoff block compliant with [\`templates/workflow/agent-handoff.template.md\`](../templates/workflow/agent-handoff.template.md) and **STOP**.
12225
- - **Components**: Declare completed deliverables, recommend next roles (\`agent-threat-modeler\`, \`agent-system-architect\`, \`agent-developer\`, \`agent-security-auditor\`), provide suggested invocation prompt, and **keep the Human Action Window open at all times for the user to take action** (review, edit by hand, pause/reroute, or delegate).
13041
+ - **Components**: Declare completed deliverables, recommend next roles (\`agent-threat-modeler\`, \`agent-privacy-officer\`, \`agent-system-architect\`, \`agent-developer\`, \`agent-security-auditor\`), provide suggested invocation prompt, and **keep the Human Action Window open at all times for the user to take action** (review, edit by hand, pause/reroute, or delegate).
12226
13042
 
12227
13043
  ---
12228
13044
 
@@ -12231,7 +13047,8 @@ Non-Negotiable Quality Thresholds (\`quality-policy.yaml\`):
12231
13047
  | Role | Mission (summary) |
12232
13048
  | :--- | :--- |
12233
13049
  | \`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\`. |
12234
- | \`agent-threat-modeler\` | STRIDE/OWASP threat triad (\`ACT-THREAT-*\`, \`ABUSE-*\`, \`SEC-REQ-*\`). |
13050
+ | \`agent-threat-modeler\` | STRIDE/OWASP threat triad (\`ACT-THREAT-*\`, \`ABUSE-*\`, \`SEC-REQ-*\`); hands off to \`agent-privacy-officer\`. |
13051
+ | \`agent-privacy-officer\` | LINDDUN & GDPR/LOPDGDD privacy triad (\`DATA-ASSET-*\`, \`PRIV-ROPA-*\`, \`PRIV-REQ-*\`) + Pre-Merge \`verify:privacy\`. |
12235
13052
  | \`agent-system-architect\` | Modular arc42 + NAF v4 architecture (\`CMP-*\`, Mermaid diagrams, \`ADR-*\`). |
12236
13053
  | \`agent-qa-engineer\` | FAILING BDD/Gherkin, E2E, and UI suites (using agreed project tech; Happy Path, Sad Path & Boundary Values per interactive UI element) before \`agent-developer\` writes production code. |
12237
13054
  | \`agent-developer\` | Atomic tasks from \`tasks.md\`; autonomy mode must be respected; runs \`pnpm run check:fix\` + \`pnpm run verify:all\`. |
@@ -13293,6 +14110,10 @@ var STARTER_TEMPLATES_CI_GITHUB_WORKFLOWS_SDD_INTEGRATE_ON_MERGE_YML = 'name: SD
13293
14110
  var STARTER_TEMPLATES_COMPLIANCE_COMMERCIAL_ACQUISITION_REQUEST_TEMPLATE_MD = '---\r\nid: REQ-LIC-ACQUISITION-001\r\ntype: license-acquisition-request\r\ntitle: Commercial License Acquisition Request for [Library]\r\nstatus: pending-approval # pending-approval, approved, rejected\r\nrequested-package: "@vendor/commercial-package"\r\nspdx-license: "BSL-1.1" # or Commercial, SSPL-1.0\r\nlicense-category: commercial_acquisition_required\r\nestimated-cost: "$1,200 / year"\r\nbusiness-justification: "Accelerates critical telemetry module development avoiding 4 months of in-house implementation."\r\n---\r\n\r\n# Commercial License Acquisition Request\r\n\r\n## 1. Package and Vendor\r\n- **Package**: `@vendor/commercial-package`\r\n- **Version**: `2.4.0`\r\n- **License Type**: BSL 1.1 / Commercial\r\n- **Official Website**: `https://vendor.example.com`\r\n\r\n## 2. Technical Justification and Evaluated Alternatives\r\n- **Why a permissive alternative (MIT/Apache 2.0) is not used**:\r\n - Open-source alternatives lack required hardware encryption protocol support.\r\n- **Impact of not acquiring the license**:\r\n - 4-month delay on product delivery milestone.\r\n\r\n## 3. Human Authorization Signatures\r\n- [ ] Tech Lead: Technical approval\r\n- [ ] Legal / IP Counsel: EULA clauses validation\r\n- [ ] Procurement / Budget Owner: Payment authorization\r\n';
13294
14111
  var STARTER_TEMPLATES_MANUALS_PRODUCTION_MANUAL_TEMPLATE_MD = '---\r\nid: MAN-PROD-001\r\ntype: production-manual\r\ntitle: "Production & Operations Manual: Application Name"\r\nstatus: draft\r\nversion: "1.0.0"\r\nschema-version: "1.0"\r\napplies-to-version: "v1.0.0"\r\ntarget-audience:\r\n - devops-engineer\r\n - sre-engineer\r\n - release-manager\r\n - secops\r\ncomponents-covered:\r\n - CMP-NAME-001\r\nenclaves-involved:\r\n - SEC-ENC-DMZ-001\r\nsupersedes: null\r\nsuperseded-by: null\r\n---\r\n\r\n# MAN-PROD-001: Production & Operations Manual - Application Name\r\n\r\n## 1. Deterministic Release Regeneration (Reproducible Builds)\r\n\r\nThis section contains the specifications and directives required to deterministically reproduce identical bit-by-bit application artifacts or releases from their Git tag.\r\n\r\n### 1.1 Source Code Baseline\r\n\r\n- **Canonical Repository**: `https://github.com/organization/repo-name.git`\r\n- **Immutable Git Release Tag**: `v1.0.0`\r\n- **Commit SHA-256 / SHA-1**: `[VERIFIED_HEXADECIMAL_COMMIT_SHA]`\r\n- **Clean Checkout Command**:\r\n ```bash\r\n git clone --recurse-submodules https://github.com/organization/repo-name.git\r\n cd repo-name\r\n git checkout tags/v1.0.0\r\n git submodule update --init --recursive\r\n ```\r\n\r\n### 1.2 Frozen Toolchains and Build Tool Matrix\r\n\r\nTo prevent discrepancies in binary or package generation, strict usage of pinned versions of the following utilities is enforced:\r\n\r\n| Tool / Runtime | Exact Version | Toolchain Checksum / Digest | Purpose |\r\n| :--- | :--- | :--- | :--- |\r\n| **Node.js LTS** | `v22.12.0` | `sha256:node-v22.12.0-linux-x64.tar.xz` | Execution and transpilation runtime |\r\n| **pnpm** | `9.15.0` | `sha256:pnpm-v9.15.0` | Deterministic monorepo package manager |\r\n| **TypeScript (tsc)** | `5.7.2` | Pinned in `devDependencies` | Strict ECMAScript compiler |\r\n| **Docker BuildKit** | `v0.18.0` | `moby/buildkit:v0.18.0` | Hermetic OCI packaging engine |\r\n\r\n### 1.3 Libraries, Dependencies, and Vertex Graph\r\n\r\n- **Immutable Lockfile**: `pnpm-lock.yaml` (or `Cargo.lock`, `go.sum`, `requirements.lock`). Installations with open resolution are forbidden (`pnpm install --frozen-lockfile` mandatory).\r\n- **SBOM (Software Bill of Materials) Inventory**:\r\n - Format: CycloneDX JSON v1.5 / SPDX v2.3.\r\n - Compiled SBOM path: `reports/sbom-cyclonedx.json`.\r\n- **OSS License Governance**:\r\n - Binding policy: `license-policy.yaml`.\r\n - Library vertex pre-verification:\r\n ```bash\r\n pnpm verify:licenses\r\n ```\r\n\r\n### 1.4 Step-by-Step Deterministic Build Procedure\r\n\r\n1. **Step 1: Hermetic Dependency Installation**\r\n ```bash\r\n pnpm install --frozen-lockfile --ignore-scripts\r\n ```\r\n\r\n2. **Step 2: Integrity and Strict Type Checking**\r\n ```bash\r\n pnpm typecheck\r\n ```\r\n\r\n3. **Step 3: Artifact Compilation**\r\n ```bash\r\n export SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct)\r\n pnpm build\r\n ```\r\n\r\n4. **Step 4: Cryptographic Verification of Generated Artifact**\r\n ```bash\r\n sha256sum dist/app.bundle.js\r\n # Compare against the canonical checksum registered in official release:\r\n # Expected: [CANONICAL_SHA256_CHECKSUM]\r\n ```\r\n\r\n---\r\n\r\n## 2. Version, Infrastructure, and Migration Compatibility Matrix\r\n\r\nThis section defines technical interoperability boundaries between the release version and the deployment ecosystem, ensuring safe Zero-Downtime transitions.\r\n\r\n### 2.1 Platform and Execution Runtime Compatibility\r\n\r\n| Infrastructure Component | Approved Version Range | Recommended Version | Support Status |\r\n| :--- | :--- | :--- | :---: |\r\n| **Kubernetes Cluster (K8s)** | `>= 1.28` and `<= 1.31` | `1.30.2` | \u2705 Certified |\r\n| **Container Runtime (CRI)** | containerd `>= 1.7` / CRI-O `>= 1.28` | containerd `1.7.15` | \u2705 Certified |\r\n| **Base Operating System (Host)** | Ubuntu 22.04 LTS / RHEL 9.2+ | Ubuntu 22.04 LTS (Kernel 6.x) | \u2705 Homologated |\r\n| **Language Runtime (Production)** | Node.js `>= 20.x` and `<= 22.x` | `v22.12.0 LTS` | \u2705 Hermetic |\r\n\r\n### 2.2 Data Schema and Migration Compatibility (N-1 Support)\r\n\r\nTo enable Canary or Blue-Green continuous deployments without transaction loss:\r\n\r\n| Release Version | DB Schema Version | Compatible with $N-1$ Code | Schema Migration Status |\r\n| :---: | :---: | :---: | :--- |\r\n| **`v1.0.0`** (Current) | `SCHEMA-v1.0` | \u2705 Yes (supports `v0.9.x` code) | Non-destructive additive migration (no column renaming). |\r\n| **`v0.9.x`** | `SCHEMA-v0.9` | \u2705 Previous baseline | Fully compatible during Canary drain period. |\r\n\r\n### 2.3 Interoperability Between Architecture Components (`CMP-*`)\r\n\r\n| Dependent Component | Consumed Component | Minimum Compatible Versions | Binding Protocol / Contract |\r\n| :--- | :--- | :---: | :--- |\r\n| `CMP-NAME-001` (Gateway) | `CMP-NAME-002` (Backend) | `>= v1.0.0` | gRPC / Protobuf v3 (`contract_spec.proto`) |\r\n| `CMP-NAME-001` (Gateway) | Messaging Bus / Kafka | `>= 3.5.0` | Kafka v2 Protocol with TLS mTLS |\r\n\r\n### 2.4 Homologated Upgrade & Rollback Paths\r\n\r\n| Source Version | Direct Jump to `v1.0.0` | Intermediate Migration Required | Direct Rollback Procedure |\r\n| :---: | :---: | :---: | :---: |\r\n| **`v0.9.1`** | \u2705 Allowed | \u274C Not required | `kubectl rollout undo` without data loss. |\r\n| **`v0.9.0`** | \u2705 Allowed | \u274C Not required | `kubectl rollout undo` without data loss. |\r\n| **`< v0.9.0`** | \u274C Blocked | \u2705 Must upgrade to `v0.9.1` first | Requires restore from backup snapshot. |\r\n\r\n---\r\n\r\n## 3. CI/CD Architecture and Pipelines\r\n\r\n### 3.1 Hierarchical Branching Model and Integration Triggers\r\n\r\nFollowing the AI-SDLC 4-tier standard:\r\n\r\n```text\r\nTIER 1: main (Production)\r\n \u25B2\r\n \u2514\u2500\u2500 PR Release Gate (Manual Tech Lead / Release Manager Approval)\r\n \u2502\r\nTIER 2: release/v1.0.0 (Open Version Branch)\r\n \u25B2\r\n \u2514\u2500\u2500 PR Feature Gate (Lint + Tests + Quality Gate + SAST + SBOM)\r\n \u2502\r\nTIER 3: feat/CHG-001-* (Feature / Bug)\r\n```\r\n\r\n- **Pull Request Trigger**: Executes linters, full test battery, and governance verifications without deployment.\r\n- **Release Tag Trigger (`v*.*.*`)**: Executes the full hermetic build pipeline, image signing, and continuous deployment.\r\n\r\n### 3.2 CI/CD Pipeline Flowchart\r\n\r\n```mermaid\r\nflowchart LR\r\n A["Git Push / Tag v1.0.0"] --> B["Hermetic Checkout"]\r\n B --> C["Linters & Typecheck"]\r\n C --> D["Vitest: Unit & BDD"]\r\n D --> E["Quality Gate: CC & MI"]\r\n E --> F["SAST & Secret Scan"]\r\n F --> G["SBOM & License Gate"]\r\n G --> H["Deterministic Build"]\r\n H --> I["Cosign / SLSA Signing"]\r\n I --> J["Push to OCI Registry"]\r\n J --> K["Deploy to DMZ Enclave"]\r\n```\r\n\r\n### 3.3 Release Gate Contracts and Thresholds\r\n\r\n| Quality Gate | Tool / Command | Required Threshold | Action on Non-Compliance |\r\n| :--- | :--- | :--- | :--- |\r\n| **Lint & Typecheck** | `pnpm typecheck` | Zero errors, zero `any` | **Immediate failure** |\r\n| **Automated Tests** | `pnpm test:all` | 100% passed, Coverage >= 85% | **Immediate failure** |\r\n| **Cyclomatic Complexity** | `aisdlc verify quality` | CC <= 10 per function | **Release blocked** |\r\n| **Maintainability Index** | `aisdlc verify quality` | MI >= 50.0 / 100 | **Release blocked** |\r\n| **360\xB0 Traceability** | `aisdlc verify traceability` | 100% of requirements linked | **Release blocked** |\r\n| **OSS Licenses** | `aisdlc verify licenses` | Zero forbidden/viral licenses | **Release blocked** |\r\n| **Cryptographic Signature** | `cosign verify` | Valid signature from Corporate CA | **Deployment rejected** |\r\n\r\n---\r\n\r\n## 4. Production Deployment Strategy and Procedure\r\n\r\n### 4.1 Infrastructure Prerequisites and Network Enclaves\r\n\r\n- **Target Enclave**: `SEC-ENC-DMZ-001` (Strict segmentation without direct uncontrolled outbound internet access).\r\n- **Enabled Network Ports**:\r\n - Port `8443/TCP`: Secure WebSocket ingestion with mutual TLS (mTLS) authentication.\r\n - Port `9090/TCP`: Prometheus metrics (internal management network only).\r\n- **Secrets and Certificate Management**:\r\n - Server TLS and client root CA certificates mounted via immutable secret at `/etc/pki/tls/`.\r\n - Embedding cryptographic keys in environment variables or images is strictly forbidden.\r\n\r\n### 4.2 Rollout Strategy\r\n\r\nA **Canary strategy with progressive telemetry metrics analysis** is utilized:\r\n1. 10% of traffic is routed to the new version for 15 minutes.\r\n2. If the 5xx error rate is `<= 0.01%` and p99 latency is `<= 50ms`, traffic is promoted to 100%.\r\n\r\n### 4.3 Step-by-Step Deployment Procedure\r\n\r\n1. **Step 1: Pre-deployment and State Snapshot**\r\n ```bash\r\n # Check cluster health and record baseline\r\n kubectl get pods -n production -l app=system\r\n kubectl exec -it system-db-0 -- /backup/create-snapshot.sh\r\n ```\r\n\r\n2. **Step 2: Deployment Manifest Application**\r\n ```bash\r\n kubectl apply -f deploy/production/canary-deployment.yaml\r\n kubectl rollout status deployment/system-service -n production --timeout=180s\r\n ```\r\n\r\n3. **Step 3: Health Verification and Smoke Tests**\r\n ```bash\r\n curl -f --cacert /etc/pki/tls/ca.crt https://127.0.0.1:8443/healthz\r\n curl -f --cacert /etc/pki/tls/ca.crt https://127.0.0.1:8443/readyz\r\n pnpm test:example\r\n ```\r\n\r\n### 4.4 Rollback Plan (Immediate Rollback)\r\n\r\n- **Objective Rollback Activation Criteria**:\r\n - mTLS handshake failure rate `> 1.0%`.\r\n - Ingestion p99 latency `> 100ms` for 2 continuous minutes.\r\n - Critical `CrashLoopBackOff` alert on more than 20% of instances.\r\n- **Rollback Execution Command**:\r\n ```bash\r\n kubectl rollout undo deployment/system-service -n production\r\n kubectl rollout status deployment/system-service -n production\r\n ```\r\n\r\n---\r\n\r\n## 5. Likely Errors Resolution and Troubleshooting (Runbooks)\r\n\r\nThis section documents the most frequent runtime and deployment failures along with diagnosis and immediate mitigation procedures.\r\n\r\n### 5.1 Frequent Incidents and Solutions Matrix\r\n\r\n#### Incident 1: Dependency Vertex Inconsistency or Drift (Build Failure)\r\n- **Symptom**: `pnpm install --frozen-lockfile` command fails in CI with error `ERR_PNPM_LOCKFILE_OUTDATED`.\r\n- **Root Cause**: `package.json` was modified without updating `pnpm-lock.yaml`.\r\n- **Diagnosis**:\r\n ```bash\r\n git diff HEAD^ package.json pnpm-lock.yaml\r\n ```\r\n- **Mitigation**:\r\n 1. On the feature branch, run `pnpm install` locally to regenerate the deterministic lockfile.\r\n 2. Verify no restricted-license dependencies were introduced via `pnpm verify:licenses`.\r\n 3. Commit both files together in an atomic commit.\r\n\r\n---\r\n\r\n#### Incident 2: mTLS Handshake Failure or Enclave Certificate Rejected\r\n- **Symptom**: Clients receive error `ERR_TLS_CERT_ALTNAME_INVALID` or connection closed with TLS alert `certificate_unknown (46)`.\r\n- **Root Cause**: Internal root CA mounted on server does not match the client certificate issuer CA, or certificate expired.\r\n- **Diagnosis**:\r\n ```bash\r\n openssl s_client -connect 127.0.0.1:8443 -CAfile /etc/pki/tls/ca.crt -cert /etc/pki/tls/client.crt -key /etc/pki/tls/client.key\r\n openssl x509 -in /etc/pki/tls/ca.crt -noout -dates -issuer -subject\r\n ```\r\n- **Mitigation**:\r\n 1. Verify expiration date of certificate mounted in cluster Secret.\r\n 2. If expired, rotate the certificate by injecting the new pair from HSM / Vault storage.\r\n 3. Orderly restart pods with `kubectl rollout restart deployment/system-service`.\r\n\r\n---\r\n\r\n#### Incident 3: Release Gate Rejection in CI/CD Due to Quality Metrics\r\n- **Symptom**: Pipeline aborts with verdict `Quality Gate REJECTED` (Cyclomatic Complexity > 10 or Maintainability < 50).\r\n- **Root Cause**: Introduction of complex nested logic (multiple `if/else`, extensive `switch`, or branching loops).\r\n- **Diagnosis**:\r\n ```bash\r\n pnpm verify:quality\r\n ```\r\n- **Mitigation**:\r\n 1. Inspect the violation report in `reports/QUALITY_GATE_REPORT.md` to identify the offending function.\r\n 2. Decompose function into cohesive private helper methods following the rule of maximum 40 lines per function.\r\n 3. Re-run `pnpm verify:quality` until green verdict is confirmed. Adding suppression comments (`// @ts-ignore`) is forbidden.\r\n\r\n---\r\n\r\n#### Incident 4: CrashLoopBackOff Due to Memory Leak or Connection Limit\r\n- **Symptom**: Pod is terminated with exit code `ExitCode: 137` (`OOMKilled`) after a load spike.\r\n- **Root Cause**: Undrained socket buffer accumulation during high-frequency bursts.\r\n- **Diagnosis**:\r\n ```bash\r\n kubectl describe pod system-service-xxx -n production | grep -i oom\r\n kubectl logs system-service-xxx -n production --previous\r\n ```\r\n- **Mitigation**:\r\n 1. Temporarily adjust memory limits in Kubernetes manifest (`resources.limits.memory`) if the load burst is legitimate.\r\n 2. Apply backpressure or discard expired packets in accordance with business rules (`BR-*`).\r\n 3. Run local benchmark with `pnpm test:all` to audit memory consumption.\r\n\r\n---\r\n\r\n### 5.2 Escalation Protocol and Critical Incident Management\r\n\r\n| Severity Level | Impact Criterion | Maximum Response Time | Roles Involved |\r\n| :--- | :--- | :---: | :--- |\r\n| **SEV-1 (Critical)** | Complete service outage or security breach in enclave. | 15 minutes | On-call SRE + Lead Architect + SecOps |\r\n| **SEV-2 (Major)** | Severe service degradation, massive retries without outage. | 1 hour | On-call SRE + Tech Lead |\r\n| **SEV-3 (Minor)** | Isolated node incident without global SLA impact. | 4 hours | Support Engineer / DevOps |\r\n\r\n---\r\n\r\n## 6. Revision History and Version Control\r\n\r\n| Version | Date | Author / Agent | Change Description | Change Reference (Change/PR) |\r\n| :--- | :--- | :--- | :--- | :--- |\r\n| **1.0.0** | 2026-09-15 | Operations & DevOps Team | Initial Production Manual generation | CHG-009 |\r\n';
13295
14112
  var STARTER_TEMPLATES_MANUALS_USER_MANUAL_TEMPLATE_MD = '---\r\nid: MAN-USER-001\r\ntype: user-manual\r\ntitle: "User Manual: Application Name"\r\nstatus: draft\r\nversion: "1.0.0"\r\nschema-version: "1.0"\r\napplies-to-version: "v1.0.0"\r\ntarget-audience:\r\n - ACT-ROLE-USER-001\r\n - ACT-OPERATOR-002\r\nallowed-roles:\r\n - ACT-ROLE-USER-001\r\n - ACT-OPERATOR-002\r\njourneys-covered:\r\n - JRN-JOURNEY-001\r\nuse-cases-covered:\r\n - UC-ACTION-001\r\nsupersedes: null\r\nsuperseded-by: null\r\n---\r\n\r\n# MAN-USER-001: User Manual - Application Name\r\n\r\n## 1. System Purpose and Audience\r\n\r\nConcisely describes the software\'s purpose, the operational value it delivers to end users, and the general context in which it operates.\r\n\r\n- **Application / System**: `[System Name or Bounded Context]`\r\n- **Software Version**: `v1.0.0`\r\n- **Target Audience**: `[Functional roles and user profiles addressed]`\r\n\r\n---\r\n\r\n## 2. User Role Catalog and Permissions Matrix (RBAC)\r\n\r\nThis section formally defines the roles authorized to access and operate the application, as well as the privileges assigned to each.\r\n\r\n### 2.1 Authorized Role Catalog\r\n\r\n| Role Identifier | Role Name | Associated Actor | Description & Responsibility | Enclave / Access Level |\r\n| :--- | :--- | :--- | :--- | :--- |\r\n| **`ROLE_USER`** | Standard User | `ACT-ROLE-USER-001` | Data queries and nominal business flow execution. | Corporate Network / Web UI |\r\n| **`ROLE_OPERATOR`** | System Operator | `ACT-OPERATOR-002` | Streaming supervision, alert management, and command control. | DMZ Enclave / Operational Console |\r\n\r\n### 2.2 Access and Capabilities Matrix by Role\r\n\r\n| Application Capability / Module | `ROLE_USER` | `ROLE_OPERATOR` | Authentication Mode |\r\n| :--- | :---: | :---: | :--- |\r\n| Status Query and Dashboard Visualizations | \u2705 Allowed | \u2705 Allowed | Bearer Token (OIDC/JWT) |\r\n| Business Journey Execution (`JRN-JOURNEY-001`) | \u2705 Allowed | \u2705 Allowed | Bearer Token (OIDC/JWT) |\r\n| Real-Time Streaming and Operational Control | \u274C Denied | \u2705 Allowed | mTLS + Device X.509 Certificate |\r\n| Global Parameters Configuration & Connectivity | \u274C Denied | \u2705 Allowed | Administrator Credential |\r\n\r\n---\r\n\r\n## 3. Version and User Platform Compatibility Matrix\r\n\r\nThis section specifies cross-compatibility between the current application version and user environments, clients, and formats.\r\n\r\n### 3.1 Client-Server Compatibility (APIs and SDKs)\r\n\r\n| Application Version (Backend) | Compatible CLI Version | Compatible SDK Version | Compatibility Status | Migration Notes |\r\n| :---: | :---: | :---: | :---: | :--- |\r\n| **`v1.0.0`** (Current) | `>= v1.0.0` | `>= v1.0.0` | \u2705 Fully Supported | Active canonical version. |\r\n| **`v1.0.0`** (Current) | `v0.9.x` | `v0.9.x` | \u26A0\uFE0F Degraded Mode | Requires upgrade before next minor. |\r\n| **`v1.0.0`** (Current) | `< v0.9.0` | `< v0.9.0` | \u274C Incompatible / Deprecated | Legacy endpoints decommissioned. |\r\n\r\n### 3.2 Homologated Browsers and Client Platforms\r\n\r\n| Platform / Environment | Minimum Supported Versions | Support Level | Known Constraints |\r\n| :--- | :--- | :---: | :--- |\r\n| **Google Chrome / Chromium** | Version `>= 120` | Tier 1 (Official) | Optimal WebSockets and WebGL performance. |\r\n| **Mozilla Firefox** | Version `>= 115 ESR` | Tier 1 (Official) | Full client certificate support. |\r\n| **Safari / WebKit** | Version `>= 17.0` | Tier 2 (Functional) | Requires explicit mTLS enablement in macOS Keychain. |\r\n| **Terminal / CLI (Linux / macOS / Windows)** | Node.js `>= 18` or Bash `>= 5.0` | Tier 1 (Official) | Full support on PowerShell 7+ and bash. |\r\n\r\n### 3.3 Configuration Files and Data Formats Compatibility\r\n\r\n| Format / Artifact | Source Version Supported | Automatic Conversion | User Action Required |\r\n| :--- | :---: | :---: | :--- |\r\n| **`config.yaml`** | `v0.9.x` | \u2705 Yes | None. Application migrates deprecated keys on startup. |\r\n| **Export Profiles (`.json`)** | `v0.9.x` | \u2705 Yes | 100% backward compatible. |\r\n\r\n---\r\n\r\n## 4. Application Installation, Access, and Configuration\r\n\r\n### 4.1 Access Channels and Prerequisites\r\n\r\n- **Web Portal / UI**: Access URL (e.g., `https://app.system.internal`).\r\n- **Command Line (CLI)**: Executable binary or package (e.g., `npx system-cli` or `./system-client`).\r\n- **Supported Browsers or Platforms**: Chrome >= 120, Firefox >= 120, Linux/macOS/Windows terminal.\r\n\r\n### 4.2 Client Configuration and Environment Variables\r\n\r\nThe application allows parameterizing its behavior via environment variables or local configuration files:\r\n\r\n| Parameter / Variable | Type | Default Value | Required | Description |\r\n| :--- | :--- | :--- | :---: | :--- |\r\n| `API_ENDPOINT` | URL | `https://api.system.internal/v1` | Yes | Base backend API endpoint. |\r\n| `WS_STREAM_URL` | WSS URL | `wss://stream.system.internal/telemetry` | No | Real-time telemetry or notifications socket. |\r\n| `CLIENT_TIMEOUT_MS` | Integer | `5000` | No | Network response timeout in milliseconds. |\r\n| `AUTH_PROFILE` | String | `production` | No | Active authentication profile (`development`, `staging`, `production`). |\r\n\r\n### 4.3 Local Configuration File (`config.yaml` / `.env`)\r\n\r\nExample recommended configuration for operator workstations:\r\n\r\n```yaml\r\n# Client configuration file: config.yaml\r\nprofile: production\r\nnetwork:\r\n api_endpoint: "https://api.system.internal/v1"\r\n stream_url: "wss://stream.system.internal/telemetry"\r\n timeout_ms: 5000\r\n retry_attempts: 3\r\n\r\nsecurity:\r\n tls_verify: true\r\n client_cert_path: "/etc/pki/client/operator.crt"\r\n client_key_path: "/etc/pki/client/operator.key"\r\n\r\nui:\r\n theme: "dark"\r\n refresh_interval_sec: 1\r\n```\r\n\r\n---\r\n\r\n## 5. Step-by-Step Journey Execution Guide (`JRN-*`)\r\n\r\nEach subsection documents an end-to-end Journey, specifying authorized execution roles, starting conditions, and the step-by-step operating procedure.\r\n\r\n### 5.1 `JRN-JOURNEY-001`: User Journey Name\r\n\r\n- **Linked Use Case**: `UC-ACTION-001`\r\n- **Primary Actor**: `ACT-ROLE-USER-001`\r\n- **Authorized Roles**: `ROLE_USER`, `ROLE_OPERATOR`\r\n- **Required Execution Enclave**: Corporate Intranet or VPN access\r\n\r\n#### A. Preconditions\r\n1. User must have an active and authenticated session with their authorized role.\r\n2. The base entity or resource must be in `ACTIVE` state.\r\n\r\n#### B. Step-by-Step Procedure\r\n\r\n1. **Step 1: Operation Initiation**\r\n - **Action**: User navigates to the execution section or invokes the corresponding command:\r\n ```bash\r\n system-cli execute --journey JRN-JOURNEY-001 --input payload.json\r\n ```\r\n - **Required Input**: Resource identifier and validated parameters.\r\n - **Expected On-Screen Response**: System displays confirmation dialog with operation summary.\r\n\r\n2. **Step 2: Validation and Submission**\r\n - **Action**: User reviews parameters and confirms execution.\r\n - **System Behavior**: Client locally validates data schema and transmits signed request.\r\n\r\n3. **Step 3: Observable Outcome Verification**\r\n - **Success Outcome**: Console / interface displays success message `MSG-SUCCESS-001` with generated unique transaction ID.\r\n - **Final State**: Resource transitions to `PROCESSED` state.\r\n\r\n#### C. Alternative Flows and Exception Handling\r\n- **Unauthorized Access**: If an unauthorized role attempts to invoke the journey, the system blocks the action, outputs code `MSG-ERR-AUTH-403`, and records the access attempt in the audit trail.\r\n- **Connection Loss in Transit**: If connection is lost during step 2, client retries with exponential backoff up to 3 times before notifying user.\r\n\r\n---\r\n\r\n## 6. System Messages Catalog and Response Codes\r\n\r\nStructured matrix of key informational, warning, and error messages emitted by the application during its operational lifecycle:\r\n\r\n| Code | Severity | Literal Screen Message | Trigger / Context | Meaning for User | Recommended Corrective Action |\r\n| :--- | :--- | :--- | :--- | :--- | :--- |\r\n| **`MSG-SYS-100`** | `INFO` | `"Connection established successfully with server"` | Successful network handshake upon initializing session. | Application is online and ready to process commands. | None. Normal operation. |\r\n| **`MSG-SYS-200`** | `INFO` | `"Operation completed successfully. Transaction ID: [TX-ID]"` | Successful completion of a Journey or Use Case. | Transaction was persisted and acknowledged by backend. | Save `TX-ID` for tracking if required. |\r\n| **`MSG-WARN-301`** | `WARN` | `"High link latency (>500ms). Degraded mode active"` | Response metric exceeds real-time threshold. | Screen data may experience slight refresh delays. | Check network connection quality or bandwidth. |\r\n| **`MSG-WARN-302`** | `WARN` | `"Session expiring in 5 minutes"` | Authentication token approaching TTL expiry. | User will be logged out unless credential is refreshed. | Renew session by clicking alert or re-authenticating. |\r\n| **`MSG-ERR-401`** | `ERR-USER` | `"Invalid credentials or expired token. Access denied"` | Login authentication failure or expired token. | User identity could not be validated. | Re-enter credentials or request a new token. |\r\n| **`MSG-ERR-403`** | `ERR-USER` | `"Unauthorized action for assigned role [ROLE]"` | Attempted execution of Journey or command outside RBAC. | User role lacks permissions for this resource. | Contact administrator to request permission expansion. |\r\n| **`MSG-ERR-422`** | `ERR-USER` | `"Invalid payload: field [FIELD] does not match schema"` | Syntactic validation or business rule (`BR-*`) failure. | User-supplied data is invalid. | Correct indicated fields according to business rule. |\r\n| **`MSG-ERR-503`** | `ERR-SYS` | `"Service temporarily unavailable. Retrying..."` | Backend gateway unreachable or under scheduled maintenance. | Central server is not responding to requests. | Await automatic retries or check system status page. |\r\n\r\n---\r\n\r\n## 7. Frequently Asked Questions (FAQ) and Support\r\n\r\n- **What should I do if I lose connectivity while executing a Journey?** \r\n The application implements idempotency mechanisms. Once network connectivity is restored, verify resource status before retrying to prevent duplicate transactions.\r\n- **How do I request a user role change?** \r\n Contact the Security Administrator (`SecOps`) referencing your user ID and operational justification for the role change.\r\n\r\n---\r\n\r\n## 8. Revision History and Version Control\r\n\r\n| Version | Date | Author / Agent | Change Description | Change Reference (Change/PR) |\r\n| :--- | :--- | :--- | :--- | :--- |\r\n| **1.0.0** | 2026-09-15 | Documentation & Product Team | Initial User Manual generation | CHG-009 |\r\n';
14113
+ var STARTER_TEMPLATES_PRIVACY_DATA_ASSET_TEMPLATE_MD = '---\nid: DATA-ASSET-USER-PROFILE-001\ntype: data-asset\ntitle: User Profile & Identity Personal Data Asset\nstatus: draft\nversion: "1.0.0"\nschema-version: "1.0"\nclassification: confidential-pii # public, internal, confidential-pii, special-category-sensitive\npii-categories:\n - identifiers\n - contact\ndata-subjects:\n - ACT-USER-001\nfields:\n - name: email\n sensitivity: pii\n masking-strategy: sha256-salt\n - name: phone_number\n sensitivity: pii\n masking-strategy: redact\n - name: operator_callsign\n sensitivity: internal\n masking-strategy: none\nretention-period: 365d\nerasure-method: crypto-shredding\nowner-bounded-context: CMP-IDENTITY-SERVICE-001\nsupersedes: null\nsuperseded-by: null\n---\n\n# DATA-ASSET-USER-PROFILE-001: User Profile & Identity Personal Data Asset\n\n## 1. Data Asset Inventory & Purpose\nDescribes the structure, storage medium, and operational boundary of the personal data asset governed under GDPR / ISO 27701.\n\n## 2. Field-Level Sensitivity & Masking Policy\n\n| Field Name | Sensitivity | Masking / Pseudonymization Strategy | Allowed in Logs | Allowed in AI Prompts |\n| :--- | :--- | :--- | :---: | :---: |\n| `email` | `pii` | `sha256-salt` | \u274C No | \u274C No |\n| `phone_number` | `pii` | `redact` | \u274C No | \u274C No |\n| `operator_callsign` | `internal` | `none` | \u2705 Yes | \u2705 Yes |\n\n## 3. Storage Limitation & Right to Erasure (GDPR Art. 17)\n- **Maximum Retention TTL**: `365d` after account deactivation.\n- **Erasure Mechanism**: `crypto-shredding` (destruction of per-subject encryption key and PII column purge).\n\n---\n\n## 4. Revision History and Version Control\n\n| Version | Date | Author / Agent | Change Description | Change Reference (Change/PR) |\n| :--- | :--- | :--- | :--- | :--- |\n| **1.0.0** | 2026-10-17 | Privacy Officer (`agent-privacy-officer`) | Initial personal data asset inventory | CHG-PRIV-001 |\n';
14114
+ var STARTER_TEMPLATES_PRIVACY_DPIA_REQUEST_TEMPLATE_MD = '---\nid: DPIA-ASSESSMENT-001\ntype: dpia-request\ntitle: Data Protection Impact Assessment (DPIA / EIPD) Request\nstatus: pending-dpo-approval # pending-dpo-approval, approved, rejected\nversion: "1.0.0"\nschema-version: "1.0"\nropa-reference: PRIV-ROPA-USER-AUTH-001\ndata-assets:\n - DATA-ASSET-USER-PROFILE-001\nspecial-category-triggers:\n - "GDPR Art. 9 Special Category Data or Automated Profiling"\nresidual-risk-level: MEDIUM # LOW, MEDIUM, HIGH\n---\n\n# Data Protection Impact Assessment (DPIA / EIPD \u2014 GDPR Art. 35)\n\n## 1. Trigger & Necessity Assessment\n- **Associated ROPA**: `PRIV-ROPA-USER-AUTH-001`\n- **Data Assets Affected**: `DATA-ASSET-USER-PROFILE-001`\n- **Why a DPIA is Mandatory**: Processing involves `special_category_sensitive` data (biometrics, health, precise geolocation) or systematic automated profiling under GDPR Art. 35.\n\n## 2. Necessity, Proportionality & LINDDUN Risk Matrix\n\n| LINDDUN Threat Category | Identified Privacy Risk | Intrinsic Risk | Technical Mitigation (`PRIV-REQ-*`) | Residual Risk |\n| :--- | :--- | :---: | :--- | :---: |\n| **Identifiability** | Re-identification of operator from telemetry streams | HIGH | `PRIV-REQ-MASKING-001` (SHA-256 salted pseudonymization) | LOW |\n| **Disclosure of Information** | Plaintext PII leakage in error logs | HIGH | `PRIV-REQ-MASKING-001` (Redaction middleware) | LOW |\n\n## 3. Mandatory Human Sovereign Signatures (DPO & Legal)\n- [ ] **Data Protection Officer (DPO)**: Necessity, proportionality, and GDPR Art. 35 validation\n- [ ] **Legal / Privacy Counsel**: Lawful basis and cross-border transfer clauses verified\n- [ ] **Security Officer (CISO) / System Architect**: Cryptographic and enclave controls verified\n';
14115
+ var STARTER_TEMPLATES_PRIVACY_PRIVACY_REQ_TEMPLATE_MD = '---\nid: PRIV-REQ-MASKING-001\ntype: privacy-requirement\ntitle: Mandatory Pseudonymization and Log Redaction of Operator PII\nstatus: draft\nversion: "1.0.0"\nschema-version: "1.0"\nprivacy-principle: data-minimization # data-minimization, purpose-limitation, storage-limitation, accuracy, integrity-and-confidentiality, transparency-and-consent, data-subject-rights-arco, pseudonymization-anonymization\nlinddun-category: identifiability # linkability, identifiability, non-repudiation, detectability, disclosure-of-information, unawareness, non-compliance\ngoverns-ropa:\n - PRIV-ROPA-USER-AUTH-001\nprotects-data-assets:\n - DATA-ASSET-USER-PROFILE-001\nenforced-in-enclave: SEC-ENC-DMZ-001\ncompliance-references:\n - "GDPR-Art-25-Privacy-by-Design"\n - "GDPR-Art-32-Pseudonymization"\n - "ISO-27701-A.7.4"\nacceptance-format: gherkin\ncucumber-tags:\n - "@PRIV-REQ-MASKING-001"\n - "@privacy"\n - "@linddun"\nsupersedes: null\nsuperseded-by: null\n---\n\n# PRIV-REQ-MASKING-001: Mandatory Pseudonymization and Log Redaction of Operator PII\n\n## 1. Technical Privacy Control Statement\nThe system MUST pseudonymize or redact all `confidential-pii` fields (`email`, `phone_number`) prior to emitting structured application logs, telemetry traces, or external AI prompts, and MUST enforce automated TTL purge after `365d`.\n\n---\n\n## 2. Upstream Privacy Traceability (PDaC)\n\n| Dimension | Link / Artifact | Relationship Type | Status |\n| :--- | :--- | :--- | :--- |\n| **Record of Processing (ROPA)** | `PRIV-ROPA-USER-AUTH-001` | Governs Processing Activity | Validated |\n| **Protected Data Asset** | `DATA-ASSET-USER-PROFILE-001` | Enforces Field Masking & TTL | Validated |\n\n---\n\n## 3. Privacy Verification Criteria in Gherkin Format (Cucumber Privacy Tests)\n\n```gherkin\n@PRIV-REQ-MASKING-001 @privacy @linddun\nFeature: Personal Data Pseudonymization and Zero-PII Telemetry Logging\n As a Data Protection Officer (DPO)\n I want all personal identifiers to be redacted or salted-hashed before logging\n So that application logs and telemetry never expose raw personal data\n\n Scenario: Structured logger redacts PII fields automatically (Nominal Privacy Control)\n Given an authenticated operator session with email "operator@example.com" and phone "+34600112233"\n When the telemetry ingestion service emits an audit log entry\n Then the serialized log payload must not contain the literal string "operator@example.com"\n And the serialized log payload must not contain the literal string "+34600112233"\n And the email field must be replaced by a deterministic SHA-256 salted pseudonym\n\n Scenario: Right to erasure purges expired or revoked subject records\n Given a personal data record for subject "ACT-USER-001" exceeding the "365d" retention TTL\n When the automated retention enforcement job executes\n Then the personal data fields must be irreversibly erased via crypto-shredding\n```\n\n---\n\n## 4. Revision History and Version Control\n\n| Version | Date | Author / Agent | Change Description | Change Reference (Change/PR) |\n| :--- | :--- | :--- | :--- | :--- |\n| **1.0.0** | 2026-10-17 | Privacy Officer (`agent-privacy-officer`) | Initial privacy control specification | CHG-PRIV-001 |\n';
14116
+ var STARTER_TEMPLATES_PRIVACY_PRIVACY_ROPA_TEMPLATE_MD = '---\nid: PRIV-ROPA-USER-AUTH-001\ntype: privacy-ropa\ntitle: Record of Processing Activity for Operator Authentication and Session Audit\nstatus: draft\nversion: "1.0.0"\nschema-version: "1.0"\nlawful-basis: contract # consent, contract, legal-obligation, vital-interests, public-task, legitimate-interests\nspecial-category-condition: null\nprocessing-purpose: "Authenticate authorized operators and maintain tamper-evident operational session audit trails."\nuse-cases:\n - UC-ACTION-001\ndata-assets:\n - DATA-ASSET-USER-PROFILE-001\ndata-subjects:\n - ACT-USER-001\nretention-ttl: 365d\ncross-border-transfer: false\ntransfer-safeguards: null\nsubprocessors: []\ndpia-required: false\ndpia-reference: null\nmitigated-by:\n - PRIV-REQ-MASKING-001\nsupersedes: null\nsuperseded-by: null\n---\n\n# PRIV-ROPA-USER-AUTH-001: Record of Processing Activity (GDPR Art. 30)\n\n## 1. Processing Activity Summary & Lawful Basis\n- **Lawful Basis (GDPR Art. 6.1)**: `contract` \u2014 Necessary for the performance of the operator service agreement.\n- **Purpose of Processing**: Authenticate authorized operators and maintain tamper-evident operational session audit trails.\n\n## 2. Linked Product & Data Artifacts\n\n| Dimension | Artifact ID | Relationship |\n| :--- | :--- | :--- |\n| **Triggering Use Cases** | `UC-ACTION-001` | Initiates personal data collection/processing |\n| **Data Assets Processed** | `DATA-ASSET-USER-PROFILE-001` | Personal data fields subject to minimization |\n| **Data Subjects** | `ACT-USER-001` | Natural persons whose data is processed |\n| **Governing Privacy Controls** | `PRIV-REQ-MASKING-001` | Technical privacy-by-design controls |\n\n## 3. International Transfers & Subprocessors\n- **Cross-Border Transfer Outside EEA**: `false`\n- **Authorized Subprocessors**: None (In-house processing within `SEC-ENC-DMZ-001`).\n\n---\n\n## 4. Revision History and Version Control\n\n| Version | Date | Author / Agent | Change Description | Change Reference (Change/PR) |\n| :--- | :--- | :--- | :--- | :--- |\n| **1.0.0** | 2026-10-17 | Privacy Officer (`agent-privacy-officer`) | Initial GDPR Art. 30 ROPA entry | CHG-PRIV-001 |\n';
13296
14117
  var STARTER_TEMPLATES_PRODUCT_ACTOR_TEMPLATE_MD = '---\r\nid: ACT-NAME-001\r\ntype: actor\r\ntitle: Descriptive Actor Title\r\nstatus: draft\r\nversion: "1.0.0"\r\nschema-version: "1.0"\r\nrole-type: human-user # human-user, ai-agent, external-system, sensor-iot\r\ndescription: One-sentence summary of the role this actor performs in the system.\r\nsupersedes: null\r\nsuperseded-by: null\r\n---\r\n\r\n# ACT-NAME-001: Descriptive Actor Title\r\n\r\n## 1. Profile and Responsibility\r\nDescribes who this actor is, their operational context, and what goals they pursue when interacting with the product.\r\n\r\n## 2. System Touchpoints\r\n- Interaction channels (Web UI, REST API, WebSocket, Messaging).\r\n- Privilege level and latency/availability expectations.\r\n\r\n---\r\n\r\n## 3. Revision History and Version Control\r\n\r\n| Version | Date | Author / Agent | Change Description | Change Reference (Change/PR) |\r\n| :--- | :--- | :--- | :--- | :--- |\r\n| **1.0.0** | 2026-09-03 | Product Owner / Analyst | Initial actor profile creation | CHG-INIT-001 |\r\n';
13297
14118
  var STARTER_TEMPLATES_PRODUCT_BUSINESS_RULE_TEMPLATE_MD = '---\r\nid: BR-DOMAIN-001\r\ntype: business-rule\r\ntitle: Business Rule Name\r\nstatus: draft\r\nversion: "1.0.0"\r\nschema-version: "1.0"\r\nenforcement-level: strict-invariant # strict-invariant, override-with-approval, guideline\r\ndefined-in: BC-CONTEXT-001\r\nuses-terms:\r\n - TERM-TERM-001\r\nsupersedes: null\r\nsuperseded-by: null\r\n---\r\n\r\n# BR-DOMAIN-001: Business Rule Name\r\n\r\n## 1. Rule Definition\r\nFormally establishes the business invariant that must not be violated under any circumstance.\r\n\r\n## 2. Business Rationale and Consequences\r\n- **Why it exists**: Economic, regulatory, or technical justification for the constraint.\r\n- **Action upon violation**: Immediate transaction rejection with a formal error code.\r\n\r\n---\r\n\r\n## 3. Revision History and Version Control\r\n\r\n| Version | Date | Author / Agent | Change Description | Change Reference (Change/PR) |\r\n| :--- | :--- | :--- | :--- | :--- |\r\n| **1.0.0** | 2026-09-03 | Product Owner / Analyst | Initial business rule definition | CHG-INIT-001 |\r\n';
13298
14119
  var STARTER_TEMPLATES_PRODUCT_JOURNEY_TEMPLATE_MD = '---\r\nid: JRN-NAME-001\r\ntype: journey\r\ntitle: Descriptive User or Operator Journey Title\r\nstatus: draft\r\nversion: "1.0.0"\r\nschema-version: "1.0"\r\npersona: ACT-OPERATOR-001\r\nstages:\r\n - "Discovery and Planning"\r\n - "Configuration and Pre-flight"\r\n - "Mission Execution"\r\n - "Post-Analysis and Wrap-up"\r\ntouchpoints:\r\n - "Mission planning web portal"\r\n - "Ground control station (GCS)"\r\n - "Real-time telemetry dashboard"\r\n - "Flight report exporter"\r\nrelated-use-cases:\r\n - UC-PLAN-MISSION-001\r\n - UC-MONITOR-FLIGHT-001\r\npain-points:\r\n - "Latency when loading offline navigation maps"\r\n - "Complexity in manual flight plan reconciliation"\r\nsupersedes: null\r\nsuperseded-by: null\r\n---\r\n\r\n# JRN-NAME-001: Descriptive User or Operator Journey Title\r\n\r\n## 1. Actor / Primary Persona Profile\r\n- **Protagonist Actor**: `ACT-OPERATOR-001`\r\n- **Main Goal**: Complete operational workflow with high efficiency, safety, and real-time visibility.\r\n\r\n---\r\n\r\n## 2. Journey Stages Map\r\n\r\n| Stage | User Goal | Touchpoints | Frictions / Pain Points |\r\n| :--- | :--- | :--- | :--- |\r\n| **1. Discovery and Planning** | Design route and validate operational constraints | Mission planning web portal | Complexity in manual flight plan reconciliation |\r\n| **2. Configuration and Pre-flight** | Verify subsystem health and link integrity | Ground control station (GCS) | Latency when loading offline navigation maps |\r\n| **3. Mission Execution** | Supervise telemetry and respond to alerts | Real-time telemetry dashboard | None detected in nominal flow |\r\n| **4. Post-Analysis and Wrap-up** | Export mission logs and performance metrics | Flight report exporter | Telemetry consolidation latency |\r\n\r\n---\r\n\r\n## 3. Traceability to Use Cases and Product\r\n\r\n- `UC-PLAN-MISSION-001`: Planning and validation of safe corridors.\r\n- `UC-MONITOR-FLIGHT-001`: Ingestion and visualization of real-time telemetry.\r\n\r\n---\r\n\r\n## 4. Revision History\r\n\r\n| Version | Date | Author / Agent | Change Description | Change Reference (Change/PR) |\r\n| :--- | :--- | :--- | :--- | :--- |\r\n| **1.0.0** | 2026-09-23 | Product Manager / UX Lead | Initial operator journey definition | CHG-INIT-001 |\r\n';
@@ -13344,10 +14165,10 @@ Describes the adversary's profile, technical skill level, available resources, a
13344
14165
  | :--- | :--- | :--- | :--- | :--- |\r
13345
14166
  | **1.0.0** | 2026-09-03 | Security Officer / Threat Modeler | Initial threat profile characterization | CHG-SEC-001 |\r
13346
14167
  `;
13347
- var STARTER_TEMPLATES_WORKFLOW_AGENT_HANDOFF_TEMPLATE_MD = '# Workflow Handoff Template\r\n\r\n> **Canonical reference:** [`process/09_agent_protocols.md`](../../process/09_agent_protocols.md) and [`process/01_governance_and_roles.md`](../../process/01_governance_and_roles.md).\r\n>\r\n> **Activation Criterion by Autonomy Mode:**\r\n> - \u{1F7E2} **`AUTONOMOUS` (or exclusive supervision at the end in PR/CI):** OMITTED. The agent executes and delivers without interrupting the user with this handoff block.\r\n> - \u{1F7E1} **`HUMAN_REVIEW_PLAN` | \u{1F7E0} `AMBIGUOUS` | \u{1F534} `HIGH_RISK_MANUAL`:** MANDATORY. Upon completing the phase or proposal, the agent emits this block and **halts**, granting visibility to the user and relinquishing control.\r\n\r\n---\r\n\r\n### \u{1F504} Workflow Handoff\r\n\r\n- **Completed Phase / Activity**: `[Current phase, e.g. Product Definition / Threat Modeling / Architecture / SDD Implementation]`\r\n- **Acting Role**: `[agent-product-analyst | agent-threat-modeler | agent-system-architect | agent-developer | agent-expert-user | agent-security-auditor | agent-compliance-checker]`\r\n- **Task Autonomy Mode**: `[HUMAN_REVIEW_PLAN | AMBIGUOUS | HIGH_RISK_MANUAL]`\r\n- **Produced Deliverables**:\r\n - [x] `[Path or ID of generated artifact, e.g. specs/product/uc-mission.md]`\r\n - [x] `[Path or ID of generated artifact, e.g. quality-report.md]`\r\n\r\n- **Recommended Next Role(s) in Workflow**:\r\n - `[Suggested role name, e.g. agent-threat-modeler]`: `[Technical rationale, e.g. Model STRIDE adversaries and mitigate abuse cases]`\r\n - *(Optional)* `[Alternative role, e.g. agent-expert-user]`: `[Technical rationale, e.g. Evaluate UX and MVP boundary]`\r\n\r\n- **Suggested Invocation Prompt**:\r\n > "Act as `[next-role]` and proceed with the `[next phase]` phase on the generated deliverables: `[key artifacts]`."\r\n\r\n- **Human Action Window (User Sovereignty and Priority)**:\r\n - \u270B **Review and Validate**: Inspect generated artifacts and validate alignment with project vision before proceeding.\r\n - \u270F\uFE0F **Edit Directly**: Modify requirements, code, or acceptance criteria directly at any time.\r\n - \u{1F6D1} **Pause, Divert, or Discard**: Freeze workflow, redirect toward another goal, or discard proposal.\r\n - \u25B6\uFE0F **Delegate to Next Agent**: If satisfied with output, execute suggested prompt to continue the chain.\r\n\r\n---\r\n';
14168
+ var STARTER_TEMPLATES_WORKFLOW_AGENT_HANDOFF_TEMPLATE_MD = '# Workflow Handoff Template\r\n\r\n> **Canonical reference:** [`process/09_agent_protocols.md`](../../process/09_agent_protocols.md) and [`process/01_governance_and_roles.md`](../../process/01_governance_and_roles.md).\r\n>\r\n> **Activation Criterion by Autonomy Mode:**\r\n> - \u{1F7E2} **`AUTONOMOUS` (or exclusive supervision at the end in PR/CI):** OMITTED. The agent executes and delivers without interrupting the user with this handoff block.\r\n> - \u{1F7E1} **`HUMAN_REVIEW_PLAN` | \u{1F7E0} `AMBIGUOUS` | \u{1F534} `HIGH_RISK_MANUAL`:** MANDATORY. Upon completing the phase or proposal, the agent emits this block and **halts**, granting visibility to the user and relinquishing control.\r\n\r\n---\r\n\r\n### \u{1F504} Workflow Handoff\r\n\r\n- **Completed Phase / Activity**: `[Current phase, e.g. Product Definition / Threat Modeling / Privacy Modeling / Architecture / SDD Implementation]`\r\n- **Acting Role**: `[agent-product-analyst | agent-threat-modeler | agent-privacy-officer | agent-system-architect | agent-developer | agent-expert-user | agent-security-auditor | agent-compliance-checker]`\r\n- **Task Autonomy Mode**: `[HUMAN_REVIEW_PLAN | AMBIGUOUS | HIGH_RISK_MANUAL]`\r\n- **Produced Deliverables**:\r\n - [x] `[Path or ID of generated artifact, e.g. specs/product/uc-mission.md]`\r\n - [x] `[Path or ID of generated artifact, e.g. quality-report.md]`\r\n\r\n- **Recommended Next Role(s) in Workflow**:\r\n - `[Suggested role name, e.g. agent-threat-modeler]`: `[Technical rationale, e.g. Model STRIDE adversaries and mitigate abuse cases]`\r\n - *(Optional)* `[Alternative role, e.g. agent-expert-user]`: `[Technical rationale, e.g. Evaluate UX and MVP boundary]`\r\n\r\n- **Suggested Invocation Prompt**:\r\n > "Act as `[next-role]` and proceed with the `[next phase]` phase on the generated deliverables: `[key artifacts]`."\r\n\r\n- **Human Action Window (User Sovereignty and Priority)**:\r\n - \u270B **Review and Validate**: Inspect generated artifacts and validate alignment with project vision before proceeding.\r\n - \u270F\uFE0F **Edit Directly**: Modify requirements, code, or acceptance criteria directly at any time.\r\n - \u{1F6D1} **Pause, Divert, or Discard**: Freeze workflow, redirect toward another goal, or discard proposal.\r\n - \u25B6\uFE0F **Delegate to Next Agent**: If satisfied with output, execute suggested prompt to continue the chain.\r\n\r\n---\r\n';
13348
14169
  var STARTER__GITHUB_PULL_REQUEST_TEMPLATE_MD = "## 1. SDD Identification and Traceability\r\n\r\n- **SDD Change Specification**: `specs/changes/active/<change-id>/` <!-- Link to active change directory -->\r\n- **PDaC Handoff Sidecar**: `specs/changes/active/<change-id>/handoff.yaml` <!-- ID: HOF-* -->\r\n- **Git Hierarchy Tier (4 Tiers)**:\r\n - [ ] Tier 4: `task/<PARENT-ID>/<TSK-ID>-<slug>` \u2794 `feat/<PARENT-ID>-<slug>`\r\n - [ ] Tier 3: `feat/<FEAT-ID>-<slug>` \u2794 `release/vX.Y.Z`\r\n - [ ] Tier 2: `release/vX.Y.Z` \u2794 `main`\r\n- **Linked Issues**: Closes #... / Refs #...\r\n\r\n---\r\n\r\n## 2. \u{1F4CB} Plan Execution Matrix and Testing Status (`X` vs `O`)\r\n\r\n> [!IMPORTANT]\r\n> **Non-Negotiable Total Exhaustiveness Rule**:\r\n> This table must include **each and every item identified for implementation** in the delivery plan (originating from `tasks.md`, the SDD specification, or issue criteria), without omitting any or creating abstract groupings.\r\n>\r\n> **Mandatory Marking Convention**:\r\n> - **`[X]` (Completed and Tested)**: Item is 100% implemented and has verifiable automated tests on disk (`tests/` or `.feature`) passing green.\r\n> - **`[O]` (Problem / Blocked)**: If there was any issue, technical limitation, failing test, or deferred scope, it must be marked with `[O]` and **full mandatory justification is required**:\r\n> 1. **Technical root cause** or encountered limitation.\r\n> 2. **Impact** on increment or system.\r\n> 3. **Mitigation** or rationale for deferral.\r\n> 4. **Formal reference** to tracking issue (GitHub Issue or `ADR-TECH-DEBT-*`).\r\n>\r\n> *Any PR with omitted planned items or unjustified `[O]` will be immediately blocked and rejected by the Tech Lead.*\r\n\r\n| Task / Item ID | Planned Description | Status (`[X]` / `[O]`) | Test Evidence on Disk or Mandatory Justification of `[O]` |\r\n| :--- | :--- | :---: | :--- |\r\n| `TSK-001` | <!-- e.g. Contract DTOs and Interfaces Definition --> | **[X]** | Covered in `tests/unit/dto.spec.ts` (100% pass) |\r\n| `TSK-002` | <!-- e.g. Network disconnection resilience --> | **[O]** | **Root cause:** TCP socket mock exhibits race conditions in CI.<br>**Impact:** Low in prod, flaky test.<br>**Mitigation:** Temporary extended timeout; tracked in issue #... |\r\n\r\n---\r\n\r\n## 3. \u{1F5FA}\uFE0F Weak Points Map and Risk Hotspots (Weak Points Hotspots)\r\n\r\n### A. Complexity Hotspots\r\n<!-- Record functions nearing quality-policy.yaml thresholds: CC > 7 (max 10), Cognitive > 10 (max 15), LOC > 30 (max 40), MI < 70 (min 50/65) -->\r\n| File | Function / Module | Metrics (CC / Cognitive / LOC / MI) | Technical Maintainability Justification |\r\n| :--- | :--- | :---: | :--- |\r\n| <!-- e.g. src/engine.ts --> | <!-- parsePayload() --> | CC: 8, Cog: 11, LOC: 32, MI: 72 | Deterministic parser without recursion; exhaustively tested. |\r\n\r\n### B. Edge Cases and Blind Spots\r\n<!-- Scenarios not covered by automated unit tests (concurrency, network timeouts, memory, jitter) -->\r\n- [ ] **Edge Case 1**: <!-- Scenario description, estimated risk, and operational mitigation -->\r\n- [ ] **Edge Case 2**: <!-- Scenario description, estimated risk, and operational mitigation -->\r\n\r\n### C. AI Assumptions\r\n<!-- Behaviors or heuristics assumed by the agent during implementation that require critical human review -->\r\n- [ ] **Assumption 1**: <!-- e.g. Assumed payload always arrives pre-parsed in UTF-8 -->\r\n- [ ] **Assumption 2**: <!-- e.g. Default timeout set to 5000ms as not stipulated in spec -->\r\n\r\n---\r\n\r\n## 4. \u{1F6E1}\uFE0F Attack Surface and Cybersecurity (STRIDE / Zero Trust)\r\n\r\n- [ ] **New External Channels**: Does it introduce HTTP endpoints, sockets, IPC channels, or brokers?\r\n- [ ] **Sanitization and Inputs**: Are all external inputs validated with strict typing schemas (Zod/JSON Schema)?\r\n- [ ] **Insecure Serialization**: Is polymorphic deserialization or dynamic code evaluation avoided?\r\n- [ ] **Secrets and Enclaves**: Are cryptographic keys, credentials, sensitive env vars, or enclaves (`SEC-ENC-*`) handled?\r\n- [ ] **Mitigated Security Requirements**: Implemented IDs (e.g. `SEC-REQ-*`) and associated tests (`SEC-TEST-*` or `.feature`).\r\n\r\n---\r\n\r\n## 5. \u{1F4E6} Dependencies and Licenses Inspection\r\n\r\n- **New Dependencies Added**:\r\n | Package | Version | License Type | `license-policy.yaml` Verification |\r\n | :--- | :---: | :---: | :---: |\r\n | <!-- e.g. zod --> | <!-- ^3.22.4 --> | <!-- MIT --> | <!-- \u2714 Compliant (Permissive) --> |\r\n- [ ] Zero dependencies with prohibited licenses (GPLv3/AGPL/unapproved commercial).\r\n- [ ] Verification executed successfully (`pnpm run verify:licenses`).\r\n\r\n---\r\n\r\n## 6. \u2705 Deterministic Pre-Flight Checklist (Release Gates)\r\n\r\n- [ ] **Strict Typing and Linter**: `pnpm run typecheck` (zero errors, zero unjustified suppressions).\r\n- [ ] **Quality Gate**: `pnpm run verify:quality` (CC $\\le 10$, Cognitive $\\le 15$, MI $\\ge 50$, LOC $\\le 40$).\r\n- [ ] **BDD / Unit Tests**: `pnpm run verify:testing` (Gherkin scenarios synchronized and 100% passing).\r\n- [ ] **360\xB0 Traceability**: `pnpm run verify:traceability` (no orphan requirements).\r\n- [ ] **Open Source Licenses**: `pnpm run verify:licenses` (strict policy compliance).\r\n- [ ] **Schema Compliance**: `pnpm run verify:schemas` (100% of artifacts conform to JSON Schema).\r\n- [ ] **Full Test Suite**: `pnpm run test:all` / `pnpm run verify:all` (general green CI approval).\r\n\r\n---\r\n\r\n## 7. \u{1F6A8} Contingency Plan, Observability, and Rollback\r\n\r\n- **Observability Metrics and Alarms**: <!-- What metrics (p99 latency, 5xx error rate, memory) or logs should be monitored post-deployment? -->\r\n- **Rollback Procedure**: <!-- Exact command or procedure to revert change without collateral impact (e.g. git revert -m 1 <sha>) -->\r\n\r\n---\r\n\r\n## 8. \u{1F4CA} AI-SDLC: Aggregated KPIs Summary\r\n\r\n<!-- AI-SDLC-KPI-SUMMARY-START -->\r\n| Metric | Human | Total PR |\r\n| :--- | :---: | :---: |\r\n| **Commits Made** | - | **-** |\r\n| **Lines Added / Modif.** | - | **-** |\r\n| **Active Development Time** | - | **-** |\r\n| **Consumed Tokens (In+Out)** | - | **-** |\r\n| **Estimated Cost (\u20AC/$)** | \u2014 (Labor) | **-** |\r\n\r\n> *This block is updated automatically via `aisdlc kpi pr` or the CI workflow.*\r\n<!-- AI-SDLC-KPI-SUMMARY-END -->\r\n";
13349
14170
  var STARTER_COMPLIANCE_LICENSE_MANIFEST_YAML = '# ==============================================================================\r\n# AI-SDLC: Manifiesto de Cumplimiento de Licencias Evaluadas\r\n# ==============================================================================\r\n# Verificado contra: /license-policy.yaml\r\n# ==============================================================================\r\n\r\nevaluated_dependencies:\r\n - package: "@modelcontextprotocol/sdk"\r\n version: "1.0.4"\r\n spdx_license: "MIT"\r\n category: "permissive_free"\r\n status: "APPROVED"\r\n usage: "SDK oficial para servidor Model Context Protocol."\r\n commercial_payment_required: false\r\n\r\n - package: "commander"\r\n version: "12.1.0"\r\n spdx_license: "MIT"\r\n category: "permissive_free"\r\n status: "APPROVED"\r\n usage: "Parser de l\xEDnea de comandos para @ai-sdlc/cli."\r\n commercial_payment_required: false\r\n\r\n - package: "zod"\r\n version: "3.23.8"\r\n spdx_license: "MIT"\r\n category: "permissive_free"\r\n status: "APPROVED"\r\n usage: "Validaci\xF3n de esquemas y tipos en runtime."\r\n commercial_payment_required: false\r\n\r\n - package: "js-yaml"\r\n version: "4.1.0"\r\n spdx_license: "MIT"\r\n category: "permissive_free"\r\n status: "APPROVED"\r\n usage: "Parser y serializador YAML para especificaciones y frontmatter."\r\n commercial_payment_required: false\r\n\r\n - package: "chalk"\r\n version: "5.3.0"\r\n spdx_license: "MIT"\r\n category: "permissive_free"\r\n status: "APPROVED"\r\n usage: "Estilizado de salida en terminal para comandos CLI."\r\n commercial_payment_required: false\r\n\r\n - package: "ajv"\r\n version: "8.17.1"\r\n spdx_license: "MIT"\r\n category: "permissive_free"\r\n status: "APPROVED"\r\n usage: "Validador JSON Schema para ProductShape, arc42 y SDD."\r\n commercial_payment_required: false\r\n';
13350
- var STARTER_PROCESS_README = "# AI-SDLC: Process & Governance Framework\n\nThis directory hosts the deterministic governance, verification gates, and lifecycle protocols for AI-assisted software development.\n\n## Core Protocols & Lifecycle\n- **Phase 0 (Product Definition)**: `specs/product/` (Requirements `FR-*`, Use Cases `UC-*`, Actors `ACT-*`, Rules `BR-*`).\n- **Phase 1 (System Architecture)**: `templates/architecture/` (arc42 + NAF v4, `CMP-*`, Decisions `ADR-*`).\n- **Phase 2 (Cybersecurity Triad)**: `templates/security/` (Threat Actors `ACT-THREAT-*`, Abuse Cases `ABUSE-*`, Security Reqs `SEC-REQ-*`).\n- **Phase 3 (Spec-Driven Delivery - SDD)**: `specs/changes/active/<change-id>/` (`proposal.md`, `spec.md`, `design.md`, `tasks.md`, `handoff.yaml`).\n- **Phase 4 (Continuous Quality Gates & Verification)**:\n - Quality Gate: `npx aisdlc verify quality` (CC $\\le 10$, MI $\\ge 50$, LOC $\\le 40$)\n - BDD Testing: `npx aisdlc verify testing`\n - Traceability: `npx aisdlc verify traceability`\n - Licenses: `npx aisdlc verify licenses`\n - Schemas: `npx aisdlc verify schemas`\n - Release Gates: `npx aisdlc check` / `npx aisdlc verify all`\n";
14171
+ var STARTER_PROCESS_README = "# AI-SDLC: Process & Governance Framework\n\nThis directory hosts the deterministic governance, verification gates, and lifecycle protocols for AI-assisted software development.\n\n## Core Protocols & Lifecycle\n- **Phase 0 (Product Definition)**: `specs/product/` (Requirements `FR-*`, Use Cases `UC-*`, Actors `ACT-*`, Rules `BR-*`).\n- **Phase 1 (System Architecture)**: `templates/architecture/` (arc42 + NAF v4, `CMP-*`, Decisions `ADR-*`).\n- **Phase 2 (Cybersecurity Triad)**: `templates/security/` (Threat Actors `ACT-THREAT-*`, Abuse Cases `ABUSE-*`, Security Reqs `SEC-REQ-*`).\n- **Phase 2b (Privacy-by-Design as Code)**: `templates/privacy/` (Data Assets `DATA-ASSET-*`, ROPA `PRIV-ROPA-*`, Privacy Reqs `PRIV-REQ-*`).\n- **Phase 3 (Spec-Driven Delivery - SDD)**: `specs/changes/active/<change-id>/` (`proposal.md`, `spec.md`, `design.md`, `tasks.md`, `handoff.yaml`).\n- **Phase 4 (Continuous Quality Gates & Verification)**:\n - Quality Gate: `npx aisdlc verify quality` (CC $\\le 10$, MI $\\ge 50$, LOC $\\le 40$)\n - BDD Testing: `npx aisdlc verify testing`\n - Traceability: `npx aisdlc verify traceability`\n - Licenses: `npx aisdlc verify licenses`\n - Privacy & Data Protection: `npx aisdlc verify privacy`\n - Schemas: `npx aisdlc verify schemas`\n - Release Gates: `npx aisdlc check` / `npx aisdlc verify all`\n";
13351
14172
  var STARTER_BASE_TEMPLATES = [
13352
14173
  { relPath: "templates/ci/.gitlab-ci.yml", content: STARTER_TEMPLATES_CI__GITLAB_CI_YML },
13353
14174
  { relPath: "templates/ci/azure-pipelines.yml", content: STARTER_TEMPLATES_CI_AZURE_PIPELINES_YML },
@@ -13359,6 +14180,10 @@ var STARTER_BASE_TEMPLATES = [
13359
14180
  { relPath: "templates/compliance/commercial-acquisition-request.template.md", content: STARTER_TEMPLATES_COMPLIANCE_COMMERCIAL_ACQUISITION_REQUEST_TEMPLATE_MD },
13360
14181
  { relPath: "templates/manuals/production-manual.template.md", content: STARTER_TEMPLATES_MANUALS_PRODUCTION_MANUAL_TEMPLATE_MD },
13361
14182
  { relPath: "templates/manuals/user-manual.template.md", content: STARTER_TEMPLATES_MANUALS_USER_MANUAL_TEMPLATE_MD },
14183
+ { relPath: "templates/privacy/data-asset.template.md", content: STARTER_TEMPLATES_PRIVACY_DATA_ASSET_TEMPLATE_MD },
14184
+ { relPath: "templates/privacy/dpia-request.template.md", content: STARTER_TEMPLATES_PRIVACY_DPIA_REQUEST_TEMPLATE_MD },
14185
+ { relPath: "templates/privacy/privacy-req.template.md", content: STARTER_TEMPLATES_PRIVACY_PRIVACY_REQ_TEMPLATE_MD },
14186
+ { relPath: "templates/privacy/privacy-ropa.template.md", content: STARTER_TEMPLATES_PRIVACY_PRIVACY_ROPA_TEMPLATE_MD },
13362
14187
  { relPath: "templates/product/actor.template.md", content: STARTER_TEMPLATES_PRODUCT_ACTOR_TEMPLATE_MD },
13363
14188
  { relPath: "templates/product/business-rule.template.md", content: STARTER_TEMPLATES_PRODUCT_BUSINESS_RULE_TEMPLATE_MD },
13364
14189
  { relPath: "templates/product/journey.template.md", content: STARTER_TEMPLATES_PRODUCT_JOURNEY_TEMPLATE_MD },
@@ -13476,6 +14301,52 @@ categories:
13476
14301
  - "SSPL-1.0"
13477
14302
  - "BSL-1.1"
13478
14303
  `;
14304
+ var STARTER_PRIVACY_POLICY = `# ==============================================================================
14305
+ # AI-SDLC: Data Protection & Privacy-by-Design Governance Policy (PDaC)
14306
+ # ==============================================================================
14307
+ version: "1.0"
14308
+ project: "Standard AI-SDLC Project"
14309
+ regulatory_frameworks:
14310
+ - "GDPR"
14311
+ - "LOPDGDD"
14312
+ - "ISO-27701"
14313
+ default_pii_action: "DENY_UNCLASSIFIED"
14314
+
14315
+ classification_levels:
14316
+ PUBLIC:
14317
+ encryption_at_rest: false
14318
+ encryption_in_transit: true
14319
+ allow_in_logs: true
14320
+ allow_in_llm_prompts: true
14321
+ INTERNAL:
14322
+ encryption_at_rest: true
14323
+ encryption_in_transit: true
14324
+ allow_in_logs: true
14325
+ allow_in_llm_prompts: true
14326
+ CONFIDENTIAL_PII:
14327
+ encryption_at_rest: true
14328
+ encryption_in_transit: true
14329
+ allow_in_logs: false
14330
+ masking_in_logs: "HASH_OR_REDACT"
14331
+ allow_in_llm_prompts: false
14332
+ require_retention_policy: true
14333
+ require_erasure_mechanism: true
14334
+ RESTRICTED_SENSITIVE_PII:
14335
+ encryption_at_rest: true
14336
+ field_level_encryption: true
14337
+ encryption_in_transit: true
14338
+ allow_in_logs: false
14339
+ allow_in_llm_prompts: false
14340
+ require_dpia_approval: true
14341
+ require_explicit_consent_or_art9_basis: true
14342
+
14343
+ cross_border_transfers:
14344
+ allowed_regions:
14345
+ - "EU"
14346
+ - "EEA"
14347
+ require_scc_for_external: true
14348
+ approved_subprocessors: []
14349
+ `;
13479
14350
  var STARTER_TASK_TEMPLATE = `---
13480
14351
  tasks:
13481
14352
  - id: "TSK-001-setup"
@@ -13529,8 +14400,8 @@ var STARTER_WORKFLOW_HANDOFF_TEMPLATE = `# Workflow Handoff Template
13529
14400
 
13530
14401
  ### \u{1F504} Workflow Handoff
13531
14402
 
13532
- - **Completed Phase / Activity**: \`[Current phase, e.g. Product Definition / Threat Modeling / Architecture / SDD Implementation]\`
13533
- - **Acting Role**: \`[agent-product-analyst | agent-threat-modeler | agent-system-architect | agent-developer | agent-expert-user | agent-security-auditor | agent-compliance-checker]\`
14403
+ - **Completed Phase / Activity**: \`[Current phase, e.g. Product Definition / Threat Modeling / Privacy Modeling / Architecture / SDD Implementation]\`
14404
+ - **Acting Role**: \`[agent-product-analyst | agent-threat-modeler | agent-privacy-officer | agent-system-architect | agent-developer | agent-expert-user | agent-security-auditor | agent-compliance-checker]\`
13534
14405
  - **Task Autonomy Mode**: \`[HUMAN_REVIEW_PLAN | AMBIGUOUS | HIGH_RISK_MANUAL]\`
13535
14406
  - **Produced Deliverables**:
13536
14407
  - [x] \`[Path or ID of generated artifact, e.g. specs/product/uc-mission.md]\`
@@ -14117,6 +14988,7 @@ var BASE_DIRECTORIES = [
14117
14988
  "compliance",
14118
14989
  "schemas/product",
14119
14990
  "schemas/security",
14991
+ "schemas/privacy",
14120
14992
  "schemas/compliance",
14121
14993
  "schemas/architecture",
14122
14994
  "schemas/safety",
@@ -14126,6 +14998,7 @@ var BASE_DIRECTORIES = [
14126
14998
  "schemas/ide",
14127
14999
  "templates/product",
14128
15000
  "templates/security",
15001
+ "templates/privacy",
14129
15002
  "templates/compliance",
14130
15003
  "templates/architecture",
14131
15004
  "templates/safety",
@@ -14170,6 +15043,7 @@ function collectStarterFiles(ciProvider, agentFiles = [], archGranularity = "min
14170
15043
  const files = [
14171
15044
  { relPath: "quality-policy.yaml", content: STARTER_QUALITY_POLICY },
14172
15045
  { relPath: "license-policy.yaml", content: STARTER_LICENSE_POLICY },
15046
+ { relPath: "privacy-policy.yaml", content: STARTER_PRIVACY_POLICY },
14173
15047
  ...STARTER_BASE_TEMPLATES,
14174
15048
  ...STARTER_SCHEMAS.map((s) => ({ relPath: s.relPath, content: s.content })),
14175
15049
  ...getCiWorkflowFiles(ciProvider),
@@ -14191,6 +15065,7 @@ var STANDARD_AISDLC_SCRIPTS = {
14191
15065
  check: "aisdlc check",
14192
15066
  "check:fix": "aisdlc check --fix",
14193
15067
  "verify:quality": "aisdlc verify quality",
15068
+ "verify:privacy": "aisdlc verify privacy",
14194
15069
  "verify:all": "aisdlc verify all",
14195
15070
  "change:new": "aisdlc change new"
14196
15071
  };
@@ -14298,12 +15173,14 @@ exports.BRANCH_PATTERNS = BRANCH_PATTERNS;
14298
15173
  exports.DEFAULT_EXCLUDED_PATTERNS = DEFAULT_EXCLUDED_PATTERNS;
14299
15174
  exports.DEFAULT_EXCLUDES = DEFAULT_EXCLUDES;
14300
15175
  exports.DEFAULT_EXTENSIONS = DEFAULT_EXTENSIONS;
15176
+ exports.DEFAULT_PRIVACY_POLICY = DEFAULT_PRIVACY_POLICY;
14301
15177
  exports.DEFAULT_SAST_EXCLUDES = DEFAULT_SAST_EXCLUDES;
14302
15178
  exports.GENERAL_SOURCE_EXTENSIONS = GENERAL_SOURCE_EXTENSIONS;
14303
15179
  exports.KPI_SUMMARY_END_TAG = KPI_SUMMARY_END_TAG;
14304
15180
  exports.KPI_SUMMARY_START_TAG = KPI_SUMMARY_START_TAG;
14305
15181
  exports.LIFECYCLE_SKILL_TEMPLATES = LIFECYCLE_SKILL_TEMPLATES;
14306
15182
  exports.OpenSpecAdapter = OpenSpecAdapter;
15183
+ exports.PII_SAST_RULES = PII_SAST_RULES;
14307
15184
  exports.PREPARE_COMMIT_MSG_SCRIPT = PREPARE_COMMIT_MSG_SCRIPT;
14308
15185
  exports.PROMPT_INJECTION_SIGNATURES = PROMPT_INJECTION_SIGNATURES;
14309
15186
  exports.PROTECTED_BYPASS_PATTERNS = PROTECTED_BYPASS_PATTERNS;
@@ -14317,6 +15194,10 @@ exports.SCHEMA_SCHEMAS_COMPLIANCE_QUALITY_POLICY_SCHEMA_JSON = SCHEMA_SCHEMAS_CO
14317
15194
  exports.SCHEMA_SCHEMAS_IDE_MCP_CONFIG_SCHEMA_JSON = SCHEMA_SCHEMAS_IDE_MCP_CONFIG_SCHEMA_JSON;
14318
15195
  exports.SCHEMA_SCHEMAS_MANUALS_PRODUCTION_MANUAL_SCHEMA_JSON = SCHEMA_SCHEMAS_MANUALS_PRODUCTION_MANUAL_SCHEMA_JSON;
14319
15196
  exports.SCHEMA_SCHEMAS_MANUALS_USER_MANUAL_SCHEMA_JSON = SCHEMA_SCHEMAS_MANUALS_USER_MANUAL_SCHEMA_JSON;
15197
+ exports.SCHEMA_SCHEMAS_PRIVACY_DATA_ASSET_SCHEMA_JSON = SCHEMA_SCHEMAS_PRIVACY_DATA_ASSET_SCHEMA_JSON;
15198
+ exports.SCHEMA_SCHEMAS_PRIVACY_PRIVACY_POLICY_SCHEMA_JSON = SCHEMA_SCHEMAS_PRIVACY_PRIVACY_POLICY_SCHEMA_JSON;
15199
+ exports.SCHEMA_SCHEMAS_PRIVACY_PRIVACY_REQ_SCHEMA_JSON = SCHEMA_SCHEMAS_PRIVACY_PRIVACY_REQ_SCHEMA_JSON;
15200
+ exports.SCHEMA_SCHEMAS_PRIVACY_PRIVACY_ROPA_SCHEMA_JSON = SCHEMA_SCHEMAS_PRIVACY_PRIVACY_ROPA_SCHEMA_JSON;
14320
15201
  exports.SCHEMA_SCHEMAS_PRODUCT_ACTOR_SCHEMA_JSON = SCHEMA_SCHEMAS_PRODUCT_ACTOR_SCHEMA_JSON;
14321
15202
  exports.SCHEMA_SCHEMAS_PRODUCT_BUSINESS_RULE_SCHEMA_JSON = SCHEMA_SCHEMAS_PRODUCT_BUSINESS_RULE_SCHEMA_JSON;
14322
15203
  exports.SCHEMA_SCHEMAS_PRODUCT_JOURNEY_SCHEMA_JSON = SCHEMA_SCHEMAS_PRODUCT_JOURNEY_SCHEMA_JSON;
@@ -14371,6 +15252,7 @@ exports.STARTER_GITHUB_PULL_REQUEST_TEMPLATE = STARTER_GITHUB_PULL_REQUEST_TEMPL
14371
15252
  exports.STARTER_GITHUB_SDD_INTEGRATE = STARTER_GITHUB_SDD_INTEGRATE;
14372
15253
  exports.STARTER_GITLAB_CI = STARTER_GITLAB_CI;
14373
15254
  exports.STARTER_LICENSE_POLICY = STARTER_LICENSE_POLICY;
15255
+ exports.STARTER_PRIVACY_POLICY = STARTER_PRIVACY_POLICY;
14374
15256
  exports.STARTER_PROCESS_README = STARTER_PROCESS_README;
14375
15257
  exports.STARTER_PULL_REQUEST_TEMPLATE = STARTER_PULL_REQUEST_TEMPLATE;
14376
15258
  exports.STARTER_QUALITY_POLICY = STARTER_QUALITY_POLICY;
@@ -14388,6 +15270,10 @@ exports.STARTER_TEMPLATES_CI__GITLAB_CI_YML = STARTER_TEMPLATES_CI__GITLAB_CI_YM
14388
15270
  exports.STARTER_TEMPLATES_COMPLIANCE_COMMERCIAL_ACQUISITION_REQUEST_TEMPLATE_MD = STARTER_TEMPLATES_COMPLIANCE_COMMERCIAL_ACQUISITION_REQUEST_TEMPLATE_MD;
14389
15271
  exports.STARTER_TEMPLATES_MANUALS_PRODUCTION_MANUAL_TEMPLATE_MD = STARTER_TEMPLATES_MANUALS_PRODUCTION_MANUAL_TEMPLATE_MD;
14390
15272
  exports.STARTER_TEMPLATES_MANUALS_USER_MANUAL_TEMPLATE_MD = STARTER_TEMPLATES_MANUALS_USER_MANUAL_TEMPLATE_MD;
15273
+ exports.STARTER_TEMPLATES_PRIVACY_DATA_ASSET_TEMPLATE_MD = STARTER_TEMPLATES_PRIVACY_DATA_ASSET_TEMPLATE_MD;
15274
+ exports.STARTER_TEMPLATES_PRIVACY_DPIA_REQUEST_TEMPLATE_MD = STARTER_TEMPLATES_PRIVACY_DPIA_REQUEST_TEMPLATE_MD;
15275
+ exports.STARTER_TEMPLATES_PRIVACY_PRIVACY_REQ_TEMPLATE_MD = STARTER_TEMPLATES_PRIVACY_PRIVACY_REQ_TEMPLATE_MD;
15276
+ exports.STARTER_TEMPLATES_PRIVACY_PRIVACY_ROPA_TEMPLATE_MD = STARTER_TEMPLATES_PRIVACY_PRIVACY_ROPA_TEMPLATE_MD;
14391
15277
  exports.STARTER_TEMPLATES_PRODUCT_ACTOR_TEMPLATE_MD = STARTER_TEMPLATES_PRODUCT_ACTOR_TEMPLATE_MD;
14392
15278
  exports.STARTER_TEMPLATES_PRODUCT_BUSINESS_RULE_TEMPLATE_MD = STARTER_TEMPLATES_PRODUCT_BUSINESS_RULE_TEMPLATE_MD;
14393
15279
  exports.STARTER_TEMPLATES_PRODUCT_JOURNEY_TEMPLATE_MD = STARTER_TEMPLATES_PRODUCT_JOURNEY_TEMPLATE_MD;
@@ -14473,7 +15359,9 @@ exports.generateDuplicatesReportMarkdown = generateDuplicatesReportMarkdown;
14473
15359
  exports.generateGovernanceReportMarkdown = generateGovernanceReportMarkdown;
14474
15360
  exports.generateLicenseReportMarkdown = generateLicenseReportMarkdown;
14475
15361
  exports.generatePdacReportMarkdown = generatePdacReportMarkdown;
15362
+ exports.generatePrivacyReportMarkdown = generatePrivacyReportMarkdown;
14476
15363
  exports.generateQualityReport = generateQualityReport;
15364
+ exports.generateRopaInventoryMarkdown = generateRopaInventoryMarkdown;
14477
15365
  exports.generateSastReportMarkdown = generateSastReportMarkdown;
14478
15366
  exports.generateSecretsReportMarkdown = generateSecretsReportMarkdown;
14479
15367
  exports.generateTestingCoverageReportMarkdown = generateTestingCoverageReportMarkdown;
@@ -14496,6 +15384,7 @@ exports.isPlaceholderOrIgnored = isPlaceholderOrIgnored;
14496
15384
  exports.isRequirementArtifact = isRequirementArtifact2;
14497
15385
  exports.isSemgrepInstalled = isSemgrepInstalled;
14498
15386
  exports.isToolAvailable = isToolAvailable;
15387
+ exports.loadPrivacyPolicy = loadPrivacyPolicy;
14499
15388
  exports.loadProductHandoffSidecar = loadProductHandoffSidecar;
14500
15389
  exports.locateTaskInActiveChanges = locateTaskInActiveChanges;
14501
15390
  exports.maskSecret = maskSecret;
@@ -14537,6 +15426,7 @@ exports.scaffoldSddChange = scaffoldSddChange;
14537
15426
  exports.scanAllProductHandoffs = scanAllProductHandoffs;
14538
15427
  exports.scanAllTestArtifacts = scanAllTestArtifacts;
14539
15428
  exports.scanContentForSecrets = scanContentForSecrets;
15429
+ exports.scanFileForPrivacyViolations = scanFileForPrivacyViolations;
14540
15430
  exports.scanFileForSast = scanFileForSast;
14541
15431
  exports.scanInstalledLicenses = scanInstalledLicenses;
14542
15432
  exports.scanManualsInWorkspace = scanManualsInWorkspace;
@@ -14556,6 +15446,7 @@ exports.verifyArtifactsSchemas = verifyArtifactsSchemas;
14556
15446
  exports.verifyLicenses = verifyLicenses;
14557
15447
  exports.verifyManuals = verifyManuals;
14558
15448
  exports.verifyPdacGraph = verifyPdacGraph;
15449
+ exports.verifyPrivacy = verifyPrivacy;
14559
15450
  exports.verifyProgressiveFriction = verifyProgressiveFriction;
14560
15451
  exports.verifyQualityGate = verifyQualityGate;
14561
15452
  exports.verifySast = verifySast;