@aisdlc/core 1.5.2 → 2.0.0

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));
@@ -1961,11 +1965,40 @@ var CANONICAL_TYPE_MAP = {
1961
1965
  "product/business-rules/": "business-rule",
1962
1966
  "product/journeys/": "journey",
1963
1967
  "security/requirements/": "security-requirement",
1968
+ "privacy/requirements/": "privacy-requirement",
1969
+ "specs/privacy/requirements/": "privacy-requirement",
1970
+ "privacy/assets/": "data-asset",
1971
+ "privacy/data-assets/": "data-asset",
1972
+ "specs/privacy/assets/": "data-asset",
1973
+ "specs/privacy/data-assets/": "data-asset",
1974
+ "privacy/ropa/": "privacy-ropa",
1975
+ "specs/privacy/ropa/": "privacy-ropa",
1976
+ "privacy/dpia/": "dpia-request",
1977
+ "specs/privacy/dpia/": "dpia-request",
1964
1978
  "architecture/": "component"
1965
1979
  };
1980
+ var ID_PREFIX_TYPE_PAIRS = [
1981
+ ["PRIV-REQ-", "privacy-requirement"],
1982
+ ["DATA-ASSET-", "data-asset"],
1983
+ ["PRIV-ROPA-", "privacy-ropa"],
1984
+ ["DPIA-", "dpia-request"],
1985
+ ["SEC-REQ-", "security-requirement"],
1986
+ ["FR-", "requirement"],
1987
+ ["QR-", "requirement"],
1988
+ ["CON-", "requirement"],
1989
+ ["UC-", "use-case"],
1990
+ ["ACT-", "actor"],
1991
+ ["BR-", "business-rule"],
1992
+ ["CMP-", "component"]
1993
+ ];
1994
+ function resolveCanonicalArtifactType(normTarget, id) {
1995
+ if (CANONICAL_TYPE_MAP[normTarget]) return CANONICAL_TYPE_MAP[normTarget];
1996
+ const matched = ID_PREFIX_TYPE_PAIRS.find(([prefix]) => id.startsWith(prefix));
1997
+ return matched ? matched[1] : "artifact";
1998
+ }
1966
1999
  function buildCanonicalInitialContent(item, changeId, author, date) {
1967
2000
  const normTarget = item.targetDir.endsWith("/") ? item.targetDir : `${item.targetDir}/`;
1968
- const artifactType = CANONICAL_TYPE_MAP[normTarget] || "artifact";
2001
+ const artifactType = resolveCanonicalArtifactType(normTarget, item.id);
1969
2002
  const frontmatter = `id: ${item.id}
1970
2003
  type: ${artifactType}
1971
2004
  status: draft
@@ -2020,6 +2053,21 @@ function checkTasksExecution(changeDir, changeId) {
2020
2053
  }
2021
2054
  return { ok: true, completedTasks, pendingTasks, error: null };
2022
2055
  }
2056
+ function isProposalRequirementId(id) {
2057
+ return id.startsWith("FR-") || id.startsWith("QR-") || id.startsWith("CON-") || id.startsWith("SEC-REQ-");
2058
+ }
2059
+ function buildSubgraphFromProposalIds(ids) {
2060
+ const reqs = ids.filter(isProposalRequirementId);
2061
+ const privReqs = ids.filter((id) => id.startsWith("PRIV-REQ-"));
2062
+ const dataAssets = ids.filter((id) => id.startsWith("DATA-ASSET-"));
2063
+ const ropaEntries = ids.filter((id) => id.startsWith("PRIV-ROPA-"));
2064
+ return {
2065
+ requirements: reqs,
2066
+ ...privReqs.length > 0 ? { privacyRequirements: privReqs } : {},
2067
+ ...dataAssets.length > 0 ? { dataAssets } : {},
2068
+ ...ropaEntries.length > 0 ? { ropaEntries } : {}
2069
+ };
2070
+ }
2023
2071
  function resolveChangeHandoff(changeDir, changeId) {
2024
2072
  const sidecar = loadProductHandoffSidecar(changeDir);
2025
2073
  if (sidecar) return sidecar;
@@ -2028,12 +2076,12 @@ function resolveChangeHandoff(changeDir, changeId) {
2028
2076
  const propContent = fs7__namespace.readFileSync(proposalFile, "utf-8");
2029
2077
  const { frontmatter } = parseFrontmatter(propContent);
2030
2078
  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-"));
2079
+ const ids = citations.map((c) => c.id || "").filter(Boolean);
2032
2080
  return {
2033
2081
  id: `HOF-${changeId.toUpperCase()}`,
2034
2082
  type: "handoff",
2035
2083
  changeId,
2036
- subgraph: { requirements: reqs },
2084
+ subgraph: buildSubgraphFromProposalIds(ids),
2037
2085
  citations
2038
2086
  };
2039
2087
  }
@@ -2141,10 +2189,14 @@ function collectArchitectureComponents(handoff, canonicalArtifacts, targetReqs)
2141
2189
  collectSatisfyingComponents(canonicalArtifacts, targetReqs, cited);
2142
2190
  return cited;
2143
2191
  }
2192
+ function isSatisfiableRequirementId(id) {
2193
+ return id.startsWith("FR-") || id.startsWith("QR-") || id.startsWith("CON-") || id.startsWith("SEC-REQ-") || id.startsWith("PRIV-REQ-");
2194
+ }
2144
2195
  function mergeSatisfiesRequirements(fm, targetReqs) {
2145
2196
  const existing = Array.isArray(fm["satisfies-requirements"]) ? [...fm["satisfies-requirements"]] : [];
2146
2197
  let modified = false;
2147
2198
  for (const req of targetReqs) {
2199
+ if (!isSatisfiableRequirementId(req)) continue;
2148
2200
  if (!existing.includes(req)) {
2149
2201
  existing.push(req);
2150
2202
  modified = true;
@@ -2256,24 +2308,71 @@ function buildIntegrationSuccessPayload(changeId, tasksRes, targetReqs, updatedP
2256
2308
  errors
2257
2309
  };
2258
2310
  }
2311
+ function collectSubgraphPromotableIds(subgraph) {
2312
+ if (!subgraph) return [];
2313
+ const rawSub = subgraph;
2314
+ const ropaAlias = Array.isArray(rawSub.ropaEntries) ? rawSub.ropaEntries : [];
2315
+ const privacyRopa = Array.isArray(rawSub.privacyRopa) ? rawSub.privacyRopa : [];
2316
+ const combined = [
2317
+ ...subgraph.requirements || [],
2318
+ ...subgraph.securityRequirements || [],
2319
+ ...subgraph.privacyRequirements || [],
2320
+ ...subgraph.dataAssets || [],
2321
+ ...ropaAlias,
2322
+ ...privacyRopa
2323
+ ];
2324
+ return Array.from(new Set(combined));
2325
+ }
2326
+ function collectSpecAffectedNonArchIds(changeDir) {
2327
+ const specFile = path4__namespace.join(changeDir, "spec.md");
2328
+ if (!fs7__namespace.existsSync(specFile)) return [];
2329
+ const { affectedItems } = parseSpecCatalogScope(fs7__namespace.readFileSync(specFile, "utf-8"));
2330
+ return affectedItems.map((item) => item.id).filter((id) => !isArchitectureComponentId(id));
2331
+ }
2332
+ function resolveIntegrationOptions(options) {
2333
+ return {
2334
+ rootDir: options.rootDir || process.cwd(),
2335
+ changeId: options.changeId,
2336
+ author: options.author || "AI-SDLC Integration Engine",
2337
+ date: options.date || (/* @__PURE__ */ new Date()).toISOString().split("T")[0]
2338
+ };
2339
+ }
2340
+ function resolveTargetRequirements(handoff, changeDir) {
2341
+ return Array.from(
2342
+ /* @__PURE__ */ new Set([
2343
+ ...collectSubgraphPromotableIds(handoff.subgraph),
2344
+ ...collectSpecAffectedNonArchIds(changeDir)
2345
+ ])
2346
+ );
2347
+ }
2348
+ function applyArtifactUpdates(ctx, changeDir, handoff, completedTasks, errors) {
2349
+ const targetReqs = resolveTargetRequirements(handoff, changeDir);
2350
+ const createdArtifacts = materializeNewCatalogArtifacts(changeDir, ctx.rootDir, ctx.changeId, ctx.author, ctx.date, errors);
2351
+ const canonicalArtifacts = loadCanonicalArtifacts(ctx.rootDir);
2352
+ const updatedProduct = updateRequirementsArtifacts(targetReqs, createdArtifacts, canonicalArtifacts, completedTasks, ctx.changeId, ctx.date, ctx.author, errors);
2353
+ const citedComponents = collectArchitectureComponents(handoff, canonicalArtifacts, targetReqs);
2354
+ const updatedArch = updateArchitectureComponents(citedComponents, canonicalArtifacts, targetReqs, ctx.changeId, ctx.date, ctx.author, errors);
2355
+ return { targetReqs, updatedProduct, updatedArch, createdArtifacts };
2356
+ }
2259
2357
  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;
2358
+ const ctx = resolveIntegrationOptions(options);
2359
+ const validation = validateChangeWorkspace(ctx.rootDir, ctx.changeId);
2360
+ if (validation.error) return buildEmptyIntegrationResult(ctx.changeId, validation.error, validation.pendingTasks);
2267
2361
  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);
2362
+ const { changeDir, tasksRes, handoff } = validation;
2363
+ const updates = applyArtifactUpdates(ctx, changeDir, handoff, tasksRes.completedTasks, errors);
2274
2364
  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);
2365
+ const archiveRes = archiveChangeWorkspace(changeDir, ctx.changeId, ctx.rootDir, options.autoArchive !== false, completedAll);
2366
+ return buildIntegrationSuccessPayload(
2367
+ ctx.changeId,
2368
+ tasksRes,
2369
+ updates.targetReqs,
2370
+ updates.updatedProduct,
2371
+ updates.updatedArch,
2372
+ updates.createdArtifacts,
2373
+ archiveRes,
2374
+ errors
2375
+ );
2277
2376
  }
2278
2377
  function auditChangeRequirements(targetReqs, canonicalMap) {
2279
2378
  const integrated = [];
@@ -2304,7 +2403,7 @@ function auditChangeEntry(changeDir, changeName, canonicalMap) {
2304
2403
  const tasksFile = path4__namespace.join(changeDir, "tasks.md");
2305
2404
  const tasks = fs7__namespace.existsSync(tasksFile) ? parseTasksFromContent(fs7__namespace.readFileSync(tasksFile, "utf-8")) : [];
2306
2405
  const completed = tasks.filter((t) => t.status === "COMPLETED");
2307
- const targetReqs = handoff.subgraph?.requirements || [];
2406
+ const targetReqs = collectSubgraphPromotableIds(handoff.subgraph);
2308
2407
  const { integrated, missing, gaps } = auditChangeRequirements(targetReqs, canonicalMap);
2309
2408
  const status = resolveAuditStatus(integrated.length, targetReqs.length, gaps.length);
2310
2409
  return {
@@ -2738,14 +2837,18 @@ function syncPdacDigests(options = {}) {
2738
2837
 
2739
2838
  // src/init/starter-schemas.ts
2740
2839
  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';
2840
+ 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';
2841
+ 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
2842
  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
2843
  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
2844
  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
2845
  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
2846
  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
2847
  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';
2848
+ 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';
2849
+ 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';
2850
+ 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';
2851
+ 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
2852
  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
2853
  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
2854
  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 +2858,12 @@ var SCHEMA_SCHEMAS_PRODUCT_USE_CASE_SCHEMA_JSON = '{\r\n "$schema": "https://js
2755
2858
  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
2859
  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
2860
  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';
2861
+ 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
2862
  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
2863
  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
2864
  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
2865
  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';
2866
+ 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
2867
  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
2868
  var SCHEMA_SCHEMAS_SECURITY_ENCLAVE_SCHEMA_JSON = `{\r
2766
2869
  "$schema": "https://json-schema.org/draft/2020-12/schema",\r
@@ -2865,7 +2968,7 @@ var SCHEMA_SCHEMAS_SECURITY_ENCLAVE_SCHEMA_JSON = `{\r
2865
2968
  `;
2866
2969
  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
2970
  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';
2971
+ 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
2972
  var STARTER_SCHEMAS_MAP = {
2870
2973
  "schemas/architecture/adr.schema.json": JSON.parse(SCHEMA_SCHEMAS_ARCHITECTURE_ADR_SCHEMA_JSON),
2871
2974
  "schemas/architecture/component.schema.json": JSON.parse(SCHEMA_SCHEMAS_ARCHITECTURE_COMPONENT_SCHEMA_JSON),
@@ -2876,6 +2979,10 @@ var STARTER_SCHEMAS_MAP = {
2876
2979
  "schemas/ide/mcp-config.schema.json": JSON.parse(SCHEMA_SCHEMAS_IDE_MCP_CONFIG_SCHEMA_JSON),
2877
2980
  "schemas/manuals/production-manual.schema.json": JSON.parse(SCHEMA_SCHEMAS_MANUALS_PRODUCTION_MANUAL_SCHEMA_JSON),
2878
2981
  "schemas/manuals/user-manual.schema.json": JSON.parse(SCHEMA_SCHEMAS_MANUALS_USER_MANUAL_SCHEMA_JSON),
2982
+ "schemas/privacy/data-asset.schema.json": JSON.parse(SCHEMA_SCHEMAS_PRIVACY_DATA_ASSET_SCHEMA_JSON),
2983
+ "schemas/privacy/privacy-policy.schema.json": JSON.parse(SCHEMA_SCHEMAS_PRIVACY_PRIVACY_POLICY_SCHEMA_JSON),
2984
+ "schemas/privacy/privacy-req.schema.json": JSON.parse(SCHEMA_SCHEMAS_PRIVACY_PRIVACY_REQ_SCHEMA_JSON),
2985
+ "schemas/privacy/privacy-ropa.schema.json": JSON.parse(SCHEMA_SCHEMAS_PRIVACY_PRIVACY_ROPA_SCHEMA_JSON),
2879
2986
  "schemas/product/actor.schema.json": JSON.parse(SCHEMA_SCHEMAS_PRODUCT_ACTOR_SCHEMA_JSON),
2880
2987
  "schemas/product/business-rule.schema.json": JSON.parse(SCHEMA_SCHEMAS_PRODUCT_BUSINESS_RULE_SCHEMA_JSON),
2881
2988
  "schemas/product/journey.schema.json": JSON.parse(SCHEMA_SCHEMAS_PRODUCT_JOURNEY_SCHEMA_JSON),
@@ -2917,6 +3024,11 @@ var TYPE_TO_SCHEMA_MAP = {
2917
3024
  "security-enclave": "schemas/security/enclave.schema.json",
2918
3025
  "security-requirement": "schemas/security/security-req.schema.json",
2919
3026
  "threat-actor": "schemas/security/threat-actor.schema.json",
3027
+ // Privacy & Data Protection
3028
+ "data-asset": "schemas/privacy/data-asset.schema.json",
3029
+ "privacy-ropa": "schemas/privacy/privacy-ropa.schema.json",
3030
+ "privacy-requirement": "schemas/privacy/privacy-req.schema.json",
3031
+ "privacy-policy": "schemas/privacy/privacy-policy.schema.json",
2920
3032
  // Architecture
2921
3033
  "architecture-introduction": "schemas/architecture/introduction-and-goals.schema.json",
2922
3034
  "architecture-decision-record": "schemas/architecture/adr.schema.json",
@@ -2959,6 +3071,11 @@ var PREFIX_TAXONOMY = [
2959
3071
  ["ABUSE-", "abuse-case"],
2960
3072
  ["SEC-ENC-", "security-enclave"],
2961
3073
  ["SEC-REQ-", "security-requirement"],
3074
+ ["DATA-ASSET-", "data-asset"],
3075
+ ["PRIV-ROPA-", "privacy-ropa"],
3076
+ ["PRIV-REQ-", "privacy-requirement"],
3077
+ ["PRIV-POL-", "privacy-policy"],
3078
+ ["POL-PRIV-", "privacy-policy"],
2962
3079
  ["HAZ-", "hazard"],
2963
3080
  ["SAF-REQ-", "safety-requirement"],
2964
3081
  ["SAF-", "safety-requirement"],
@@ -3864,11 +3981,28 @@ function createGreenfieldRequirement(rootDir, name, padNum, canonicalId, author,
3864
3981
  const digest = computeCanonicalSha256(reqContent);
3865
3982
  return { reqId, ucId, reqFilePath, digest };
3866
3983
  }
3984
+ function resolveMissingDraftDestination(rootDir, id) {
3985
+ if (id.startsWith("PRIV-REQ-")) {
3986
+ return { dir: path4__namespace.join(rootDir, "specs", "privacy", "requirements"), type: "privacy-requirement" };
3987
+ }
3988
+ if (id.startsWith("DATA-ASSET-")) {
3989
+ return { dir: path4__namespace.join(rootDir, "specs", "privacy", "assets"), type: "data-asset" };
3990
+ }
3991
+ if (id.startsWith("PRIV-ROPA-")) {
3992
+ return { dir: path4__namespace.join(rootDir, "specs", "privacy", "ropa"), type: "privacy-ropa" };
3993
+ }
3994
+ if (id.startsWith("UC-")) {
3995
+ return { dir: path4__namespace.join(rootDir, "specs", "product"), type: "use-case" };
3996
+ }
3997
+ if (id.startsWith("SEC-REQ-") || id.startsWith("SAF-REQ-")) {
3998
+ return { dir: path4__namespace.join(rootDir, "specs", "product"), type: "security-requirement" };
3999
+ }
4000
+ return { dir: path4__namespace.join(rootDir, "specs", "product"), type: "requirement" };
4001
+ }
3867
4002
  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";
4003
+ const { dir, type: reqType } = resolveMissingDraftDestination(rootDir, id);
4004
+ if (!fs7__namespace.existsSync(dir)) fs7__namespace.mkdirSync(dir, { recursive: true });
4005
+ const reqFilePath = path4__namespace.join(dir, `${id}.md`);
3872
4006
  const header = MISSING_DRAFT_HEADER.replaceAll("{{ID}}", id).replaceAll("{{TYPE}}", reqType).replaceAll("{{NAME}}", name);
3873
4007
  const body = MISSING_DRAFT_BODY.replaceAll("{{ID}}", id).replaceAll("{{NAME}}", name).replaceAll("{{CANONICAL_ID}}", canonicalId);
3874
4008
  const reqContent = `${header}
@@ -3898,13 +4032,30 @@ function discoverDerivedRequirements(id, artifactMap, subRequirements, citedArti
3898
4032
  function appendUnique(list, item) {
3899
4033
  if (!list.includes(item)) list.push(item);
3900
4034
  }
3901
- function classifyExistingCitation(id, existing, artifactMap, col) {
4035
+ function recordCitedArtifact(existing, col) {
3902
4036
  col.citedArtifacts.push({
3903
4037
  id: existing.id,
3904
4038
  digest: `sha256:${existing.digest}`,
3905
4039
  title: existing.title,
3906
4040
  comment: `Citaci\xF3n de ${existing.frontmatter.type || "artefacto"} (${existing.title || existing.id})`
3907
4041
  });
4042
+ }
4043
+ function classifyPrivacyCitation(id, col) {
4044
+ if (id.startsWith("PRIV-REQ-")) {
4045
+ appendUnique(col.subPrivReqs, id);
4046
+ return true;
4047
+ }
4048
+ if (id.startsWith("DATA-ASSET-")) {
4049
+ appendUnique(col.subDataAssets, id);
4050
+ return true;
4051
+ }
4052
+ if (id.startsWith("PRIV-ROPA-")) {
4053
+ appendUnique(col.subRopa, id);
4054
+ return true;
4055
+ }
4056
+ return false;
4057
+ }
4058
+ function classifyProductCitation(id, artifactMap, col) {
3908
4059
  if (/^(FR|QR|CON)-/.test(id)) {
3909
4060
  appendUnique(col.subRequirements, id);
3910
4061
  } else if (id.startsWith("UC-")) {
@@ -3916,9 +4067,18 @@ function classifyExistingCitation(id, existing, artifactMap, col) {
3916
4067
  appendUnique(col.subRules, id);
3917
4068
  }
3918
4069
  }
4070
+ function classifyExistingCitation(id, existing, artifactMap, col) {
4071
+ recordCitedArtifact(existing, col);
4072
+ if (!classifyPrivacyCitation(id, col)) {
4073
+ classifyProductCitation(id, artifactMap, col);
4074
+ }
4075
+ }
3919
4076
  function routeMissingCitationId(id, col) {
3920
4077
  if (id.startsWith("UC-")) col.subUseCases.push(id);
3921
4078
  else if (id.startsWith("SEC-REQ-")) col.subSecReqs.push(id);
4079
+ else if (id.startsWith("PRIV-REQ-")) col.subPrivReqs.push(id);
4080
+ else if (id.startsWith("DATA-ASSET-")) col.subDataAssets.push(id);
4081
+ else if (id.startsWith("PRIV-ROPA-")) col.subRopa.push(id);
3922
4082
  else col.subRequirements.push(id);
3923
4083
  }
3924
4084
  function collectExplicitCitations(inputFromIds, name, canonicalId, artifactMap, col, rootDir, createdFiles) {
@@ -3948,16 +4108,31 @@ function collectGreenfieldCitations(rootDir, name, padNum, canonicalId, author,
3948
4108
  col.subUseCases.push(gf.ucId);
3949
4109
  }
3950
4110
  }
4111
+ function initEmptyCitations() {
4112
+ return {
4113
+ citedArtifacts: [],
4114
+ subRequirements: [],
4115
+ subUseCases: [],
4116
+ subSecReqs: [],
4117
+ subRules: [],
4118
+ subPrivReqs: [],
4119
+ subDataAssets: [],
4120
+ subRopa: []
4121
+ };
4122
+ }
4123
+ function ensureFallbackRequirement(col, padNum, name) {
4124
+ if (col.subRequirements.length === 0) {
4125
+ col.subRequirements.push(`FR-${padNum}-${slugify(name).toUpperCase()}-001`);
4126
+ }
4127
+ }
3951
4128
  function collectChangeCitations(rootDir, name, padNum, canonicalId, author, dateStr, inputFromIds, artifactMap, createdFiles) {
3952
- const col = { citedArtifacts: [], subRequirements: [], subUseCases: [], subSecReqs: [], subRules: [] };
4129
+ const col = initEmptyCitations();
3953
4130
  if (inputFromIds.length === 0) {
3954
4131
  collectGreenfieldCitations(rootDir, name, padNum, canonicalId, author, dateStr, createdFiles, col);
3955
4132
  } else {
3956
4133
  collectExplicitCitations(inputFromIds, name, canonicalId, artifactMap, col, rootDir, createdFiles);
3957
4134
  }
3958
- if (col.subRequirements.length === 0) {
3959
- col.subRequirements.push(`FR-${padNum}-${slugify(name).toUpperCase()}-001`);
3960
- }
4135
+ ensureFallbackRequirement(col, padNum, name);
3961
4136
  return col;
3962
4137
  }
3963
4138
  function renderProposalFile(changeDir, canonicalId, name, author, citationsYamlBlock) {
@@ -4071,6 +4246,9 @@ function buildHandoffSubgraph(citations) {
4071
4246
  if (citations.subUseCases.length > 0) subgraph.useCases = citations.subUseCases;
4072
4247
  if (citations.subSecReqs.length > 0) subgraph.securityRequirements = citations.subSecReqs;
4073
4248
  if (citations.subRules.length > 0) subgraph.businessRules = citations.subRules;
4249
+ if (citations.subPrivReqs.length > 0) subgraph.privacyRequirements = citations.subPrivReqs;
4250
+ if (citations.subDataAssets.length > 0) subgraph.dataAssets = citations.subDataAssets;
4251
+ if (citations.subRopa.length > 0) subgraph.privacyRopa = citations.subRopa;
4074
4252
  return subgraph;
4075
4253
  }
4076
4254
  function buildHandoffPayload(canonicalId, name, citations) {
@@ -4116,7 +4294,7 @@ function buildScaffoldFailure(profile, error, slug = "", canonicalId = "", chang
4116
4294
  }
4117
4295
  function renderAndCollectArtifactFiles(changeDir, canonicalId, name, author, dateStr, profile, citations, createdFiles) {
4118
4296
  const citationsBlock = renderCitationsYamlBlock(citations.citedArtifacts);
4119
- const reqIds = [...citations.subRequirements, ...citations.subSecReqs];
4297
+ const reqIds = [...citations.subRequirements, ...citations.subSecReqs, ...citations.subPrivReqs];
4120
4298
  createdFiles.push(renderProposalFile(changeDir, canonicalId, name, author, citationsBlock));
4121
4299
  const { specPath, specFmObj } = renderSpecFile(changeDir, canonicalId, name, profile);
4122
4300
  createdFiles.push(specPath);
@@ -4569,28 +4747,28 @@ function buildHandoffList(rootDir, artifactMap) {
4569
4747
  }
4570
4748
  return handoffList;
4571
4749
  }
4750
+ function indexSubgraphIds(ids, hof, map) {
4751
+ if (!Array.isArray(ids)) return;
4752
+ for (const reqId of ids) {
4753
+ map.set(reqId, hof);
4754
+ }
4755
+ }
4572
4756
  function indexRequirementsToHandoff(handoffList) {
4573
4757
  const reqToHandoffMap = /* @__PURE__ */ new Map();
4574
4758
  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
- }
4759
+ if (!hof.subgraph) continue;
4760
+ indexSubgraphIds(hof.subgraph.requirements, hof, reqToHandoffMap);
4761
+ indexSubgraphIds(hof.subgraph.securityRequirements, hof, reqToHandoffMap);
4762
+ indexSubgraphIds(hof.subgraph.privacyRequirements, hof, reqToHandoffMap);
4585
4763
  }
4586
4764
  return reqToHandoffMap;
4587
4765
  }
4588
- var TARGET_REQ_PREFIXES = ["FR-", "QR-", "SEC-REQ-", "CON-"];
4766
+ var TARGET_REQ_PREFIXES = ["FR-", "QR-", "SEC-REQ-", "CON-", "PRIV-REQ-"];
4589
4767
  function isRequirementToVerify(data, id) {
4590
4768
  if (data.file.includes("templates/") || data.file.includes(".template.") || data.file.includes("process/")) {
4591
4769
  return false;
4592
4770
  }
4593
- if (data.type === "requirement" || data.type === "security-requirement") {
4771
+ if (data.type === "requirement" || data.type === "security-requirement" || data.type === "privacy-requirement") {
4594
4772
  return true;
4595
4773
  }
4596
4774
  return TARGET_REQ_PREFIXES.some((prefix) => id.startsWith(prefix));
@@ -4628,6 +4806,8 @@ function collectHandoffSubgraphTraces(subgraph) {
4628
4806
  if (subgraph.useCases) traces.push(...subgraph.useCases);
4629
4807
  if (subgraph.businessRules) traces.push(...subgraph.businessRules);
4630
4808
  if (subgraph.abuseCases) traces.push(...subgraph.abuseCases);
4809
+ if (subgraph.privacyRopa) traces.push(...subgraph.privacyRopa);
4810
+ if (subgraph.dataAssets) traces.push(...subgraph.dataAssets);
4631
4811
  return traces;
4632
4812
  }
4633
4813
  function collectArchIntroTraces(reqId, artifactMap) {
@@ -4646,6 +4826,8 @@ function resolveProductTraces(fm, reqId, associatedHandoff, artifactMap) {
4646
4826
  const traces = [
4647
4827
  ...extractArrayOrSingle(fm["derives-from"]),
4648
4828
  ...extractArrayOrSingle(fm["mitigates-abuse-case"]),
4829
+ ...extractArrayOrSingle(fm["governs-ropa"]),
4830
+ ...extractArrayOrSingle(fm["protects-data-assets"]),
4649
4831
  ...collectHandoffSubgraphTraces(associatedHandoff?.subgraph),
4650
4832
  ...collectArchIntroTraces(reqId, artifactMap)
4651
4833
  ];
@@ -5071,18 +5253,19 @@ function extractDesignExpectedScope(changeDir) {
5071
5253
  }
5072
5254
  return expected;
5073
5255
  }
5074
- function extractHandoffExpectedScope(changeDir, maxUc, violations) {
5256
+ function extractHandoffExpectedScope(changeDir, maxUc = 1, violations) {
5075
5257
  const handoff = loadProductHandoffSidecar(changeDir);
5076
5258
  if (!handoff?.subgraph) return [];
5077
5259
  const ucList = handoff.subgraph.useCases || [];
5078
- if (maxUc !== void 0 && ucList.length > maxUc && violations) {
5260
+ if (ucList.length > maxUc && violations) {
5079
5261
  violations.push(
5080
5262
  `[${handoff.changeId}] Greenfield monolith detected: change bundles ${ucList.length} use cases (max ${maxUc}). Decompose into incremental SDD changes per Use Case.`
5081
5263
  );
5082
5264
  }
5083
5265
  const reqs = handoff.subgraph.requirements || [];
5084
5266
  const secReqs = handoff.subgraph.securityRequirements || [];
5085
- return [...reqs, ...secReqs];
5267
+ const privReqs = handoff.subgraph.privacyRequirements || [];
5268
+ return [...reqs, ...secReqs, ...privReqs];
5086
5269
  }
5087
5270
  function collectTaskCoveredScope(tasks) {
5088
5271
  const covered = /* @__PURE__ */ new Set();
@@ -7445,6 +7628,503 @@ function detectPromptInjection(content) {
7445
7628
  checkMultilinePromptInjection(content, findings);
7446
7629
  return findings;
7447
7630
  }
7631
+ var DEFAULT_PRIVACY_POLICY = {
7632
+ version: "1.0",
7633
+ project: "AI-SDLC Standard Organization",
7634
+ regulatory_frameworks: ["GDPR", "LOPDGDD", "ISO-27701"],
7635
+ default_action: "DENY_UNREGISTERED_PII",
7636
+ classifications: {
7637
+ public: {
7638
+ action: "ALLOW",
7639
+ encryption_at_rest: false,
7640
+ encryption_in_transit: true,
7641
+ allow_in_logs: true,
7642
+ allow_in_ai_prompts: true
7643
+ },
7644
+ internal: {
7645
+ action: "ALLOW",
7646
+ encryption_at_rest: true,
7647
+ encryption_in_transit: true,
7648
+ allow_in_logs: true,
7649
+ allow_in_ai_prompts: true
7650
+ },
7651
+ confidential_pii: {
7652
+ action: "STRICT_GOVERNANCE",
7653
+ require_ropa_entry: true,
7654
+ encryption_at_rest: true,
7655
+ encryption_in_transit: true,
7656
+ allow_in_logs: false,
7657
+ log_masking_strategy: "REDACT_OR_SHA256_SALT",
7658
+ allow_in_ai_prompts: false,
7659
+ max_retention_days: 365,
7660
+ require_right_to_erasure: true
7661
+ },
7662
+ special_category_sensitive: {
7663
+ action: "DPIA_APPROVAL_REQUIRED",
7664
+ require_ropa_entry: true,
7665
+ require_dpia_artifact: true,
7666
+ encryption_at_rest: true,
7667
+ encryption_in_transit: true,
7668
+ require_field_level_encryption: true,
7669
+ allow_in_logs: false,
7670
+ allow_in_ai_prompts: false
7671
+ }
7672
+ },
7673
+ cross_border_transfers: {
7674
+ allowed_regions: ["EU-EEA", "ADEQUACY_DECISION"],
7675
+ require_scc_for_third_countries: true,
7676
+ approved_subprocessors: []
7677
+ },
7678
+ agent_guardrails: {
7679
+ forbid_real_pii_in_tests: true,
7680
+ forbid_pii_in_console_or_logger: true,
7681
+ require_dto_projection_for_pii: true
7682
+ },
7683
+ ci_gates: {
7684
+ fail_on_unregistered_pii: true,
7685
+ fail_on_pii_in_logs: true,
7686
+ fail_on_missing_retention_policy: true,
7687
+ fail_on_unapproved_subprocessor: true,
7688
+ generate_ropa_inventory: true,
7689
+ output_ropa_file: "reports/ROPA_INVENTORY.md",
7690
+ output_privacy_report: "reports/PRIVACY_SCAN_REPORT.md"
7691
+ }
7692
+ };
7693
+ var PII_SAST_RULES = [
7694
+ {
7695
+ id: "PRIV-001-PII-IN-LOGS",
7696
+ type: "PII_IN_LOGS",
7697
+ severity: "HIGH",
7698
+ description: "Direct exposure of unmasked PII or sensitive fields in logger or console output (GDPR Art. 25 / Art. 32)",
7699
+ 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
7700
+ },
7701
+ {
7702
+ id: "PRIV-002-PII-IN-LLM-PROMPT",
7703
+ type: "PII_IN_LLM_PROMPT",
7704
+ severity: "CRITICAL",
7705
+ description: "Unmasked personal or special-category data interpolated into external AI/LLM prompt payload",
7706
+ 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
7707
+ },
7708
+ {
7709
+ id: "PRIV-004-HARDCODED-REAL-PII",
7710
+ type: "HARDCODED_PII_IN_CODE",
7711
+ severity: "HIGH",
7712
+ description: "Hardcoded real-world personal identifier (SSN / National ID / Credit Card) detected in source or test file",
7713
+ 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
7714
+ }
7715
+ ];
7716
+ function loadPrivacyPolicy(rootDir, policyPath) {
7717
+ const candidate = policyPath ? path4__namespace.isAbsolute(policyPath) ? policyPath : path4__namespace.join(rootDir, policyPath) : path4__namespace.join(rootDir, "privacy-policy.yaml");
7718
+ if (!fs7__namespace.existsSync(candidate)) return DEFAULT_PRIVACY_POLICY;
7719
+ try {
7720
+ const parsed = yaml3__default.default.load(fs7__namespace.readFileSync(candidate, "utf-8"));
7721
+ if (!parsed || typeof parsed !== "object") return DEFAULT_PRIVACY_POLICY;
7722
+ return {
7723
+ ...DEFAULT_PRIVACY_POLICY,
7724
+ ...parsed,
7725
+ classifications: { ...DEFAULT_PRIVACY_POLICY.classifications, ...parsed.classifications || {} },
7726
+ agent_guardrails: { ...DEFAULT_PRIVACY_POLICY.agent_guardrails, ...parsed.agent_guardrails || {} },
7727
+ ci_gates: { ...DEFAULT_PRIVACY_POLICY.ci_gates, ...parsed.ci_gates || {} }
7728
+ };
7729
+ } catch {
7730
+ return DEFAULT_PRIVACY_POLICY;
7731
+ }
7732
+ }
7733
+ function isLineExemptFromPrivacyScan(line) {
7734
+ return line.includes("ai-sdlc:allow-pii") || line.includes("ai-sdlc:allow-sast") || line.includes("nosec");
7735
+ }
7736
+ function shouldApplyPiiRule(rule, policy) {
7737
+ if (rule.type === "PII_IN_LOGS" && !policy.ci_gates.fail_on_pii_in_logs) {
7738
+ return false;
7739
+ }
7740
+ if (rule.type === "HARDCODED_PII_IN_CODE" && !policy.agent_guardrails.forbid_real_pii_in_tests) {
7741
+ return false;
7742
+ }
7743
+ return true;
7744
+ }
7745
+ function scanFileForPrivacyViolations(filePath, rootDir, policy = DEFAULT_PRIVACY_POLICY) {
7746
+ const violations = [];
7747
+ try {
7748
+ const content = fs7__namespace.readFileSync(filePath, "utf-8");
7749
+ const lines = content.split(/\r?\n/);
7750
+ const relPath = path4__namespace.relative(rootDir, filePath).replace(/\\/g, "/");
7751
+ for (let i = 0; i < lines.length; i++) {
7752
+ const line = lines[i];
7753
+ if (isLineExemptFromPrivacyScan(line)) continue;
7754
+ for (const rule of PII_SAST_RULES) {
7755
+ if (!shouldApplyPiiRule(rule, policy)) continue;
7756
+ rule.pattern.lastIndex = 0;
7757
+ if (rule.pattern.test(line)) {
7758
+ violations.push({
7759
+ ruleId: rule.id,
7760
+ type: rule.type,
7761
+ severity: rule.severity,
7762
+ filePath,
7763
+ relPath,
7764
+ lineNumber: i + 1,
7765
+ snippet: line.trim(),
7766
+ message: rule.description
7767
+ });
7768
+ }
7769
+ }
7770
+ }
7771
+ } catch {
7772
+ }
7773
+ return violations;
7774
+ }
7775
+ var EXCLUDED_ARTIFACT_PREFIXES = [
7776
+ "templates/",
7777
+ "node_modules/",
7778
+ "dist/",
7779
+ ".git/",
7780
+ "reports/",
7781
+ ".agent/",
7782
+ ".agents/",
7783
+ ".claude/",
7784
+ ".cursor/",
7785
+ ".github/",
7786
+ "process/"
7787
+ ];
7788
+ function isExcludedPrivacyMd(relPath) {
7789
+ return EXCLUDED_ARTIFACT_PREFIXES.some((prefix) => relPath.startsWith(prefix));
7790
+ }
7791
+ function toStringArray2(val) {
7792
+ if (Array.isArray(val)) return val.map((v) => String(v));
7793
+ if (typeof val === "string" && val.trim().length > 0) return [val.trim()];
7794
+ return [];
7795
+ }
7796
+ function parseDataAsset(fm, relPath) {
7797
+ return {
7798
+ id: String(fm.id || ""),
7799
+ title: String(fm.title || ""),
7800
+ classification: String(fm.classification || "internal"),
7801
+ piiCategories: toStringArray2(fm["pii-categories"]),
7802
+ dataSubjects: toStringArray2(fm["data-subjects"]),
7803
+ retentionPeriod: String(fm["retention-period"] || ""),
7804
+ erasureMethod: String(fm["erasure-method"] || ""),
7805
+ filePath: relPath
7806
+ };
7807
+ }
7808
+ function parseRopaRecord(fm, relPath) {
7809
+ return {
7810
+ id: String(fm.id || ""),
7811
+ title: String(fm.title || ""),
7812
+ lawfulBasis: String(fm["lawful-basis"] || ""),
7813
+ processingPurpose: String(fm["processing-purpose"] || ""),
7814
+ useCases: toStringArray2(fm["use-cases"]),
7815
+ dataAssets: toStringArray2(fm["data-assets"]),
7816
+ dataSubjects: toStringArray2(fm["data-subjects"]),
7817
+ retentionTtl: String(fm["retention-ttl"] || ""),
7818
+ crossBorderTransfer: Boolean(fm["cross-border-transfer"]),
7819
+ subprocessors: toStringArray2(fm.subprocessors),
7820
+ dpiaRequired: Boolean(fm["dpia-required"]),
7821
+ dpiaReference: typeof fm["dpia-reference"] === "string" ? fm["dpia-reference"] : null,
7822
+ mitigatedBy: toStringArray2(fm["mitigated-by"]),
7823
+ filePath: relPath
7824
+ };
7825
+ }
7826
+ function isDataAssetArtifact(type, id) {
7827
+ return type === "data-asset" || id.startsWith("DATA-ASSET-");
7828
+ }
7829
+ function isRopaArtifact(type, id) {
7830
+ return type === "privacy-ropa" || id.startsWith("PRIV-ROPA-");
7831
+ }
7832
+ function isPrivacyReqArtifact(type, id) {
7833
+ return type === "privacy-requirement" || id.startsWith("PRIV-REQ-");
7834
+ }
7835
+ function isDpiaArtifact(type, id) {
7836
+ return type === "dpia-request" || id.startsWith("DPIA-");
7837
+ }
7838
+ function classifyPrivacyMarkdown(fm, relPath, acc) {
7839
+ const id = String(fm.id || "");
7840
+ const type = String(fm.type || "");
7841
+ if (isDataAssetArtifact(type, id)) {
7842
+ acc.dataAssets.push(parseDataAsset(fm, relPath));
7843
+ } else if (isRopaArtifact(type, id)) {
7844
+ acc.ropaRecords.push(parseRopaRecord(fm, relPath));
7845
+ } else if (isPrivacyReqArtifact(type, id)) {
7846
+ acc.privacyReqs.push({ id, governsRopa: toStringArray2(fm["governs-ropa"]), filePath: relPath });
7847
+ } else if (isDpiaArtifact(type, id)) {
7848
+ acc.dpiaStatuses.set(id, String(fm.status || "draft"));
7849
+ }
7850
+ }
7851
+ function discoverPrivacyArtifacts(rootDir) {
7852
+ const acc = {
7853
+ dataAssets: [],
7854
+ ropaRecords: [],
7855
+ privacyReqs: [],
7856
+ dpiaStatuses: /* @__PURE__ */ new Map()
7857
+ };
7858
+ for (const file of walkMdFiles(rootDir)) {
7859
+ const relPath = path4__namespace.relative(rootDir, file).replace(/\\/g, "/");
7860
+ if (isExcludedPrivacyMd(relPath)) continue;
7861
+ try {
7862
+ const fm = extractFrontmatter(fs7__namespace.readFileSync(file, "utf-8"));
7863
+ if (fm && fm.id) classifyPrivacyMarkdown(fm, relPath, acc);
7864
+ } catch {
7865
+ }
7866
+ }
7867
+ return acc;
7868
+ }
7869
+ var SENSITIVE_CLASSIFICATIONS = /* @__PURE__ */ new Set([
7870
+ "confidential-pii",
7871
+ "confidential_pii",
7872
+ "special-category-sensitive",
7873
+ "special_category_sensitive"
7874
+ ]);
7875
+ function isSensitiveClassification(classification) {
7876
+ return SENSITIVE_CLASSIFICATIONS.has(classification);
7877
+ }
7878
+ function createViolation(ruleId, type, severity, fullPath, relPath, message) {
7879
+ return { ruleId, type, severity, filePath: fullPath, relPath, message };
7880
+ }
7881
+ function checkAssetRetention(asset, policy, fullPath) {
7882
+ if (!policy.ci_gates.fail_on_missing_retention_policy) return null;
7883
+ if (asset.retentionPeriod && asset.erasureMethod) return null;
7884
+ return createViolation(
7885
+ "PRIV-003-MISSING-RETENTION-POLICY",
7886
+ "MISSING_RETENTION_POLICY",
7887
+ "HIGH",
7888
+ fullPath,
7889
+ asset.filePath,
7890
+ `Data asset '${asset.id}' (${asset.classification}) is missing a valid retention-period or erasure-method`
7891
+ );
7892
+ }
7893
+ function checkAssetRopaRegistration(asset, ropaRecords, policy, fullPath) {
7894
+ if (!policy.ci_gates.fail_on_unregistered_pii) return null;
7895
+ if (ropaRecords.some((r) => r.dataAssets.includes(asset.id))) return null;
7896
+ return createViolation(
7897
+ "PRIV-005-UNREGISTERED-ROPA",
7898
+ "UNREGISTERED_ROPA",
7899
+ "HIGH",
7900
+ fullPath,
7901
+ asset.filePath,
7902
+ `Personal data asset '${asset.id}' is not registered in any GDPR Art. 30 ROPA artifact (PRIV-ROPA-*)`
7903
+ );
7904
+ }
7905
+ function auditDataAssetGovernance(asset, ropaRecords, policy, rootDir) {
7906
+ if (!isSensitiveClassification(asset.classification)) return [];
7907
+ const fullPath = path4__namespace.join(rootDir, asset.filePath);
7908
+ const v1 = checkAssetRetention(asset, policy, fullPath);
7909
+ const v2 = checkAssetRopaRegistration(asset, ropaRecords, policy, fullPath);
7910
+ return [v1, v2].filter((v) => v !== null);
7911
+ }
7912
+ function checkRopaControlLink(ropa, governedRopaIds, fullPath) {
7913
+ if (ropa.mitigatedBy.length > 0 || governedRopaIds.has(ropa.id)) return [];
7914
+ return [
7915
+ createViolation(
7916
+ "PRIV-006-MISSING-PRIVACY-CONTROL",
7917
+ "MISSING_PRIVACY_CONTROL",
7918
+ "HIGH",
7919
+ fullPath,
7920
+ ropa.filePath,
7921
+ `ROPA activity '${ropa.id}' lacks a governing technical privacy control (PRIV-REQ-*)`
7922
+ )
7923
+ ];
7924
+ }
7925
+ function checkRopaSubprocessors(ropa, policy, fullPath) {
7926
+ if (!policy.ci_gates.fail_on_unapproved_subprocessor) return [];
7927
+ const approved = new Set(policy.cross_border_transfers?.approved_subprocessors || []);
7928
+ return ropa.subprocessors.filter((sub) => !approved.has(sub)).map(
7929
+ (sub) => createViolation(
7930
+ "PRIV-007-UNAPPROVED-SUBPROCESSOR",
7931
+ "UNAPPROVED_SUBPROCESSOR",
7932
+ "HIGH",
7933
+ fullPath,
7934
+ ropa.filePath,
7935
+ `ROPA activity '${ropa.id}' references unapproved subprocessor '${sub}' not listed in privacy-policy.yaml`
7936
+ )
7937
+ );
7938
+ }
7939
+ function checkRopaControlsAndSubprocessors(ropa, governedRopaIds, policy, fullPath) {
7940
+ return [
7941
+ ...checkRopaControlLink(ropa, governedRopaIds, fullPath),
7942
+ ...checkRopaSubprocessors(ropa, policy, fullPath)
7943
+ ];
7944
+ }
7945
+ function ropaProcessesSpecialCategory(ropa, dataAssets) {
7946
+ return ropa.dataAssets.some((id) => {
7947
+ const found = dataAssets.find((a) => a.id === id);
7948
+ return Boolean(found && found.classification.includes("special"));
7949
+ });
7950
+ }
7951
+ function isDpiaMissingOrUnapproved(dpiaId, dpiaStatuses) {
7952
+ if (!dpiaId) return true;
7953
+ const status = dpiaStatuses.get(dpiaId);
7954
+ return Boolean(status && status !== "approved");
7955
+ }
7956
+ function checkRopaDpiaApproval(ropa, dataAssets, dpiaStatuses, fullPath) {
7957
+ const requiresDpia = ropa.dpiaRequired || ropaProcessesSpecialCategory(ropa, dataAssets);
7958
+ if (!requiresDpia) return { violations: [], dpiaRequired: false };
7959
+ if (!isDpiaMissingOrUnapproved(ropa.dpiaReference, dpiaStatuses)) {
7960
+ return { violations: [], dpiaRequired: true };
7961
+ }
7962
+ return {
7963
+ dpiaRequired: true,
7964
+ violations: [
7965
+ createViolation(
7966
+ "PRIV-008-DPIA-APPROVAL-REQUIRED",
7967
+ "DPIA_APPROVAL_REQUIRED",
7968
+ "CRITICAL",
7969
+ fullPath,
7970
+ ropa.filePath,
7971
+ `ROPA activity '${ropa.id}' processes special-category/high-risk data and requires an approved DPIA-* signed by the DPO`
7972
+ )
7973
+ ]
7974
+ };
7975
+ }
7976
+ function collectSourceFilesForPrivacy(rootDir, targetDirs) {
7977
+ const files = [];
7978
+ for (const dir of targetDirs) {
7979
+ const fullDir = path4__namespace.join(rootDir, dir);
7980
+ if (fs7__namespace.existsSync(fullDir)) {
7981
+ files.push(...walkSourceFiles(fullDir, rootDir));
7982
+ }
7983
+ }
7984
+ return files;
7985
+ }
7986
+ function formatRopaTableRow(r) {
7987
+ const ucs = r.useCases.join(", ") || "\u2014";
7988
+ const assets = r.dataAssets.join(", ") || "\u2014";
7989
+ const controls = r.mitigatedBy.join(", ") || "\u2014";
7990
+ return `| \`${r.id}\` | ${r.title} | \`${r.lawfulBasis}\` | ${ucs} | ${assets} | \`${r.retentionTtl}\` | ${controls} |`;
7991
+ }
7992
+ function formatAssetTableRow(a) {
7993
+ const cats = a.piiCategories.join(", ");
7994
+ return `| \`${a.id}\` | ${a.title} | \`${a.classification}\` | ${cats} | \`${a.retentionPeriod}\` | \`${a.erasureMethod}\` |`;
7995
+ }
7996
+ function buildRopaSectionLines(ropaRecords) {
7997
+ const rows = ropaRecords.map(formatRopaTableRow);
7998
+ const emptyRopa = `| \u2014 | No processing activities registered | \u2014 | \u2014 | \u2014 | \u2014 | \u2014 |`;
7999
+ return [
8000
+ `## 1. Processing Activities Register (\`PRIV-ROPA-*\`)`,
8001
+ ``,
8002
+ `| ROPA ID | Processing Activity | Lawful Basis | Triggering Use Cases | Data Assets | Retention TTL | Privacy Controls |`,
8003
+ `| :--- | :--- | :--- | :--- | :--- | :---: | :--- |`,
8004
+ ...rows.length > 0 ? rows : [emptyRopa]
8005
+ ];
8006
+ }
8007
+ function buildAssetSectionLines(dataAssets) {
8008
+ const assetRows = dataAssets.map(formatAssetTableRow);
8009
+ const emptyAsset = `| \u2014 | No personal data assets registered | \u2014 | \u2014 | \u2014 | \u2014 |`;
8010
+ return [
8011
+ `## 2. Personal Data Assets Inventory (\`DATA-ASSET-*\`)`,
8012
+ ``,
8013
+ `| Asset ID | Title | Classification | PII Categories | Retention | Erasure Method |`,
8014
+ `| :--- | :--- | :--- | :--- | :---: | :--- |`,
8015
+ ...assetRows.length > 0 ? assetRows : [emptyAsset]
8016
+ ];
8017
+ }
8018
+ function generateRopaInventoryMarkdown(result, policy = DEFAULT_PRIVACY_POLICY) {
8019
+ return [
8020
+ `# \u{1F510} GDPR Art. 30 Record of Processing Activities (ROPA Inventory)`,
8021
+ ``,
8022
+ `> **Project:** ${policy.project}`,
8023
+ `> **Regulatory Frameworks:** ${policy.regulatory_frameworks.join(", ")}`,
8024
+ `> **Total Data Assets:** ${result.dataAssetsCount} | **Active ROPA Entries:** ${result.ropaRecordsCount} | **Privacy Controls:** ${result.privacyRequirementsCount}`,
8025
+ ``,
8026
+ ...buildRopaSectionLines(result.ropaRecords),
8027
+ ``,
8028
+ ...buildAssetSectionLines(result.dataAssets),
8029
+ ``
8030
+ ].join("\n");
8031
+ }
8032
+ function formatViolationRow(v) {
8033
+ const loc = v.lineNumber ? `${v.relPath}:${v.lineNumber}` : v.relPath;
8034
+ return `| **${v.severity}** | \`${v.ruleId}\` | \`${v.type}\` | \`${loc}\` | ${v.message} |`;
8035
+ }
8036
+ function buildReportFindingsSection(violations) {
8037
+ if (violations.length === 0) {
8038
+ return [
8039
+ `## Compliance Summary`,
8040
+ ``,
8041
+ `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.`
8042
+ ];
8043
+ }
8044
+ return [
8045
+ `## Detected Privacy & Data Protection Findings`,
8046
+ ``,
8047
+ `| Severity | Rule | Finding Type | Location | Details |`,
8048
+ `| :---: | :--- | :--- | :--- | :--- |`,
8049
+ ...violations.map(formatViolationRow)
8050
+ ];
8051
+ }
8052
+ function generatePrivacyReportMarkdown(result, policy = DEFAULT_PRIVACY_POLICY) {
8053
+ const verdict = result.success ? "\u2705 COMPLIANT (Privacy-by-Design as Code verified)" : `\u274C BLOCKED (${result.violationsCount} privacy violations detected)`;
8054
+ return [
8055
+ `# \u{1F6E1}\uFE0F Privacy-by-Design & Data Protection Audit (Gate 12)`,
8056
+ ``,
8057
+ `> **Verdict:** ${verdict}`,
8058
+ `> **Regulatory Baseline:** ${policy.regulatory_frameworks.join(", ")}`,
8059
+ `> **Audited Source Files:** ${result.totalFilesScanned} | **Data Assets:** ${result.dataAssetsCount} | **ROPA Records:** ${result.ropaRecordsCount} | **Privacy Reqs:** ${result.privacyRequirementsCount}`,
8060
+ ``,
8061
+ `---`,
8062
+ ``,
8063
+ ...buildReportFindingsSection(result.violations),
8064
+ ``
8065
+ ].join("\n");
8066
+ }
8067
+ function writePrivacyOutputsIfNeeded(result, options, policy, rootDir) {
8068
+ if (options.generateRopa) {
8069
+ const relRopa = options.ropaOutputPath || policy.ci_gates.output_ropa_file || "reports/ROPA_INVENTORY.md";
8070
+ const fullRopa = path4__namespace.isAbsolute(relRopa) ? relRopa : path4__namespace.join(rootDir, relRopa);
8071
+ fs7__namespace.mkdirSync(path4__namespace.dirname(fullRopa), { recursive: true });
8072
+ fs7__namespace.writeFileSync(fullRopa, result.ropaMarkdown, "utf-8");
8073
+ result.ropaOutputPath = fullRopa;
8074
+ }
8075
+ if (options.reportOutputPath) {
8076
+ const fullReport = path4__namespace.isAbsolute(options.reportOutputPath) ? options.reportOutputPath : path4__namespace.join(rootDir, options.reportOutputPath);
8077
+ fs7__namespace.mkdirSync(path4__namespace.dirname(fullReport), { recursive: true });
8078
+ fs7__namespace.writeFileSync(fullReport, result.reportMarkdown, "utf-8");
8079
+ result.reportOutputPath = fullReport;
8080
+ }
8081
+ }
8082
+ function evaluateDiscoveredPrivacyGovernance(discovered, policy, rootDir) {
8083
+ const governedRopaIds = new Set(discovered.privacyReqs.flatMap((r) => r.governsRopa));
8084
+ const violations = [];
8085
+ for (const asset of discovered.dataAssets) {
8086
+ violations.push(...auditDataAssetGovernance(asset, discovered.ropaRecords, policy, rootDir));
8087
+ }
8088
+ let dpiaRequiredCount = 0;
8089
+ for (const ropa of discovered.ropaRecords) {
8090
+ const fullPath = path4__namespace.join(rootDir, ropa.filePath);
8091
+ violations.push(...checkRopaControlsAndSubprocessors(ropa, governedRopaIds, policy, fullPath));
8092
+ const dpiaCheck = checkRopaDpiaApproval(ropa, discovered.dataAssets, discovered.dpiaStatuses, fullPath);
8093
+ if (dpiaCheck.dpiaRequired) dpiaRequiredCount++;
8094
+ violations.push(...dpiaCheck.violations);
8095
+ }
8096
+ return { violations, dpiaRequiredCount };
8097
+ }
8098
+ function buildInitialPrivacyResult(totalFilesScanned, discovered, violations, dpiaRequiredCount) {
8099
+ return {
8100
+ success: violations.length === 0,
8101
+ totalFilesScanned,
8102
+ dataAssetsCount: discovered.dataAssets.length,
8103
+ ropaRecordsCount: discovered.ropaRecords.length,
8104
+ privacyRequirementsCount: discovered.privacyReqs.length,
8105
+ violationsCount: violations.length,
8106
+ dpiaRequiredCount,
8107
+ dataAssets: discovered.dataAssets,
8108
+ ropaRecords: discovered.ropaRecords,
8109
+ violations,
8110
+ ropaMarkdown: "",
8111
+ reportMarkdown: ""
8112
+ };
8113
+ }
8114
+ function verifyPrivacy(options = {}) {
8115
+ const rootDir = options.rootDir || process.cwd();
8116
+ const policy = loadPrivacyPolicy(rootDir, options.policyPath);
8117
+ const sourceFiles = collectSourceFilesForPrivacy(rootDir, options.targetDirectories || ["src", "packages"]);
8118
+ const codeViolations = sourceFiles.flatMap((file) => scanFileForPrivacyViolations(file, rootDir, policy));
8119
+ const discovered = discoverPrivacyArtifacts(rootDir);
8120
+ const gov = evaluateDiscoveredPrivacyGovernance(discovered, policy, rootDir);
8121
+ const violations = [...codeViolations, ...gov.violations];
8122
+ const result = buildInitialPrivacyResult(sourceFiles.length, discovered, violations, gov.dpiaRequiredCount);
8123
+ result.ropaMarkdown = generateRopaInventoryMarkdown(result, policy);
8124
+ result.reportMarkdown = generatePrivacyReportMarkdown(result, policy);
8125
+ writePrivacyOutputsIfNeeded(result, options, policy, rootDir);
8126
+ return result;
8127
+ }
7448
8128
  function calculateRating(mi, cc) {
7449
8129
  if (mi >= 75 && cc <= 5) return "A";
7450
8130
  if (mi >= 60 && cc <= 10) return "B";
@@ -8885,7 +9565,9 @@ var NON_GRAPH_TYPES = /* @__PURE__ */ new Set([
8885
9565
  "mcp-config",
8886
9566
  "user-manual",
8887
9567
  "production-manual",
8888
- "architecture-glossary"
9568
+ "architecture-glossary",
9569
+ "dpia-request",
9570
+ "privacy-policy"
8889
9571
  ]);
8890
9572
  var PREFIX_MAP = {
8891
9573
  "ARCH-INTRO": { type: "architecture-introduction", layer: "product" },
@@ -8895,11 +9577,14 @@ var PREFIX_MAP = {
8895
9577
  "UC": { type: "use-case", layer: "product" },
8896
9578
  "BR": { type: "business-rule", layer: "product" },
8897
9579
  "ABUSE": { type: "abuse-case", layer: "product" },
9580
+ "DATA-ASSET": { type: "data-asset", layer: "product" },
9581
+ "PRIV-ROPA": { type: "privacy-ropa", layer: "product" },
8898
9582
  "HAZ": { type: "hazard", layer: "product" },
8899
9583
  "SEC-ENC": { type: "security-enclave", layer: "architecture" },
8900
9584
  "CMP": { type: "component", layer: "architecture" },
8901
9585
  "ADR": { type: "adr", layer: "architecture" },
8902
- "SEC-REQ": { type: "security-requirement", layer: "requirement" }
9586
+ "SEC-REQ": { type: "security-requirement", layer: "requirement" },
9587
+ "PRIV-REQ": { type: "privacy-requirement", layer: "requirement" }
8903
9588
  };
8904
9589
  var TYPE_LOOKUP = {
8905
9590
  "architecture-introduction": { type: "architecture-introduction", layer: "product" },
@@ -8911,15 +9596,18 @@ var TYPE_LOOKUP = {
8911
9596
  "business-rule": { type: "business-rule", layer: "product" },
8912
9597
  "rule": { type: "business-rule", layer: "product" },
8913
9598
  "abuse-case": { type: "abuse-case", layer: "product" },
9599
+ "data-asset": { type: "data-asset", layer: "product" },
9600
+ "privacy-ropa": { type: "privacy-ropa", layer: "product" },
8914
9601
  "hazard": { type: "hazard", layer: "product" },
8915
9602
  "security-enclave": { type: "security-enclave", layer: "architecture" },
8916
9603
  "component": { type: "component", layer: "architecture" },
8917
9604
  "architecture-decision-record": { type: "adr", layer: "architecture" },
8918
9605
  "adr": { type: "adr", layer: "architecture" },
8919
- "security-requirement": { type: "security-requirement", layer: "requirement" }
9606
+ "security-requirement": { type: "security-requirement", layer: "requirement" },
9607
+ "privacy-requirement": { type: "privacy-requirement", layer: "requirement" }
8920
9608
  };
8921
9609
  function classifyArtifactLayerAndType(id, declaredType) {
8922
- if (NON_GRAPH_TYPES.has(declaredType) || /^(TERM|HOF|AHOF|CHG|DSG|SPEC|TSK|UDF|AUDIT)-/.test(id)) {
9610
+ if (NON_GRAPH_TYPES.has(declaredType) || /^(TERM|HOF|AHOF|CHG|DSG|SPEC|TSK|UDF|AUDIT|DPIA)-/.test(id)) {
8923
9611
  return null;
8924
9612
  }
8925
9613
  for (const [prefix, mapping] of Object.entries(PREFIX_MAP)) {
@@ -8963,7 +9651,7 @@ function parseAndCatalogArtifactFile(rootDir, filePath, scannedMap, archViewByBa
8963
9651
  function scanWorkspaceArtifacts(rootDir) {
8964
9652
  const scannedArtifactsMap = /* @__PURE__ */ new Map();
8965
9653
  const archViewByBasename = /* @__PURE__ */ new Map();
8966
- const artifactDirs = ["product", "architecture", "specs", "security"];
9654
+ const artifactDirs = ["product", "architecture", "specs", "security", "privacy"];
8967
9655
  for (const dirName of artifactDirs) {
8968
9656
  const fullDirPath = path4__namespace.join(rootDir, dirName);
8969
9657
  if (fs7__namespace.existsSync(fullDirPath)) {
@@ -8980,6 +9668,8 @@ function resolveUpstreamType(u) {
8980
9668
  if (u.startsWith("UC-")) return "use-case";
8981
9669
  if (u.startsWith("BR-")) return "business-rule";
8982
9670
  if (u.startsWith("ABUSE-")) return "abuse-case";
9671
+ if (u.startsWith("DATA-ASSET-")) return "data-asset";
9672
+ if (u.startsWith("PRIV-ROPA-")) return "privacy-ropa";
8983
9673
  return "product";
8984
9674
  }
8985
9675
  function addTraceUpstreamEdges(r, status, nodeMap, addEdge) {
@@ -9058,7 +9748,7 @@ function addTraceTestEdges(r, status, rootDir, nodeMap, addEdge) {
9058
9748
  }
9059
9749
  }
9060
9750
  function buildReqNode(r, status) {
9061
- const reqType = r.id.startsWith("SEC-REQ-") ? "security-requirement" : "requirement";
9751
+ const reqType = r.id.startsWith("SEC-REQ-") ? "security-requirement" : r.id.startsWith("PRIV-REQ-") ? "privacy-requirement" : "requirement";
9062
9752
  return {
9063
9753
  id: r.id,
9064
9754
  label: r.id,
@@ -9132,7 +9822,7 @@ function connectIntroRelationships(art, nodeMap, addEdge) {
9132
9822
  for (const qrId of list) {
9133
9823
  if (typeof qrId === "string" && qrId.trim()) {
9134
9824
  const q = qrId.trim();
9135
- const qType = q.startsWith("SEC-REQ-") ? "security-requirement" : "requirement";
9825
+ const qType = q.startsWith("SEC-REQ-") ? "security-requirement" : q.startsWith("PRIV-REQ-") ? "privacy-requirement" : "requirement";
9136
9826
  connectTargets(art.id, [q], "defines-goal", nodeMap, addEdge, qType, "requirement");
9137
9827
  }
9138
9828
  }
@@ -9211,6 +9901,28 @@ function connectAbuseCaseRelationships(art, nodeMap, addEdge) {
9211
9901
  connectAbuseTargets(fm["targets-use-case"] || fm["targets-use-cases"] || fm["targets"], art.id, nodeMap, addEdge);
9212
9902
  connectAbuseMitigations(fm["mitigated-by"], art.id, nodeMap, addEdge);
9213
9903
  }
9904
+ function connectDataAssetRelationships(art, nodeMap, addEdge) {
9905
+ const fm = art.frontmatter;
9906
+ for (const subj of toList(fm["data-subjects"])) {
9907
+ connectTargets(subj.trim(), [art.id], "owns-data", nodeMap, addEdge, "actor", "product");
9908
+ }
9909
+ const owner = typeof fm["owner-bounded-context"] === "string" ? fm["owner-bounded-context"].trim() : "";
9910
+ if (owner && owner.startsWith("CMP-")) {
9911
+ connectTargets(art.id, [owner], "satisfies", nodeMap, addEdge, "component", "architecture");
9912
+ }
9913
+ }
9914
+ function connectPrivacyRopaRelationships(art, nodeMap, addEdge) {
9915
+ const fm = art.frontmatter;
9916
+ for (const uc of toList(fm["use-cases"])) {
9917
+ connectTargets(uc.trim(), [art.id], "derives-from", nodeMap, addEdge, "use-case", "product");
9918
+ }
9919
+ for (const asset of toList(fm["data-assets"])) {
9920
+ connectTargets(asset.trim(), [art.id], "governs", nodeMap, addEdge, "data-asset", "product");
9921
+ }
9922
+ for (const req of toList(fm["mitigated-by"])) {
9923
+ connectTargets(art.id, [req.trim()], "mitigated-by", nodeMap, addEdge, "privacy-requirement", "requirement");
9924
+ }
9925
+ }
9214
9926
  function connectRequirementMitigations(art, nodeMap, addEdge) {
9215
9927
  for (const ab of toList(art.frontmatter["mitigates-abuse-case"])) {
9216
9928
  const id = ab.trim();
@@ -9218,6 +9930,18 @@ function connectRequirementMitigations(art, nodeMap, addEdge) {
9218
9930
  connectTargets(id, [art.id], "mitigated-by", nodeMap, addEdge, "abuse-case", "product");
9219
9931
  }
9220
9932
  }
9933
+ for (const ropa of toList(art.frontmatter["governs-ropa"])) {
9934
+ const id = ropa.trim();
9935
+ if (id) {
9936
+ connectTargets(id, [art.id], "mitigated-by", nodeMap, addEdge, "privacy-ropa", "product");
9937
+ }
9938
+ }
9939
+ for (const asset of toList(art.frontmatter["protects-data-assets"])) {
9940
+ const id = asset.trim();
9941
+ if (id) {
9942
+ connectTargets(id, [art.id], "governs", nodeMap, addEdge, "data-asset", "product");
9943
+ }
9944
+ }
9221
9945
  }
9222
9946
  function connectAdrRelationships(art, nodeMap, addEdge) {
9223
9947
  for (const cmp of toList(art.frontmatter["affects-components"])) {
@@ -9241,8 +9965,11 @@ var CONNECTOR_MAP = {
9241
9965
  "use-case": connectUseCaseRelationships,
9242
9966
  "business-rule": (art, _map, addEdge) => connectBusinessRuleRelationships(art, addEdge),
9243
9967
  "abuse-case": connectAbuseCaseRelationships,
9968
+ "data-asset": connectDataAssetRelationships,
9969
+ "privacy-ropa": connectPrivacyRopaRelationships,
9244
9970
  "requirement": connectRequirementMitigations,
9245
9971
  "security-requirement": connectRequirementMitigations,
9972
+ "privacy-requirement": connectRequirementMitigations,
9246
9973
  "adr": connectAdrRelationships,
9247
9974
  "security-enclave": connectEnclaveRelationships
9248
9975
  };
@@ -9862,6 +10589,28 @@ var DASHBOARD_CLIENT_SCRIPT = `
9862
10589
  'height': 46
9863
10590
  }
9864
10591
  },
10592
+ {
10593
+ selector: 'node.type-data-asset',
10594
+ style: {
10595
+ 'shape': 'barrel',
10596
+ 'background-color': '#134e4a',
10597
+ 'border-color': '#5eead4',
10598
+ 'border-width': 2.5,
10599
+ 'width': 68,
10600
+ 'height': 42
10601
+ }
10602
+ },
10603
+ {
10604
+ selector: 'node.type-privacy-ropa',
10605
+ style: {
10606
+ 'shape': 'round-rectangle',
10607
+ 'background-color': '#1e3a8a',
10608
+ 'border-color': '#60a5fa',
10609
+ 'border-width': 2.5,
10610
+ 'width': 72,
10611
+ 'height': 40
10612
+ }
10613
+ },
9865
10614
  {
9866
10615
  selector: 'node.type-security-enclave',
9867
10616
  style: {
@@ -9874,7 +10623,7 @@ var DASHBOARD_CLIENT_SCRIPT = `
9874
10623
  }
9875
10624
  },
9876
10625
  {
9877
- selector: 'node.type-requirement, node.type-security-requirement',
10626
+ selector: 'node.type-requirement, node.type-security-requirement, node.type-privacy-requirement',
9878
10627
  style: {
9879
10628
  'shape': 'round-rectangle',
9880
10629
  'background-color': '#1e293b',
@@ -9907,7 +10656,7 @@ var DASHBOARD_CLIENT_SCRIPT = `
9907
10656
  }
9908
10657
  },
9909
10658
  {
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)',
10659
+ 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
10660
  style: { 'shape': 'diamond', 'background-color': '#0e7490', 'border-color': '#38bdf8', 'width': 50, 'height': 50 }
9912
10661
  },
9913
10662
  {
@@ -10105,7 +10854,15 @@ var DASHBOARD_CLIENT_SCRIPT = `
10105
10854
  typeBadgeColor = '#881337';
10106
10855
  typeTitle = 'ABUSE CASE (ABUSE)';
10107
10856
  typologyKey = 'abuse-case';
10108
- } else if (typeName === 'requirement' || typeName === 'security-requirement') {
10857
+ } else if (typeName === 'data-asset') {
10858
+ typeBadgeColor = '#134e4a';
10859
+ typeTitle = 'DATA ASSET (DATA-ASSET)';
10860
+ typologyKey = 'data-asset';
10861
+ } else if (typeName === 'privacy-ropa') {
10862
+ typeBadgeColor = '#1e3a8a';
10863
+ typeTitle = 'PRIVACY ROPA (PRIV-ROPA)';
10864
+ typologyKey = 'privacy-ropa';
10865
+ } else if (typeName === 'requirement' || typeName === 'security-requirement' || typeName === 'privacy-requirement') {
10109
10866
  typeBadgeColor = '#1e293b';
10110
10867
  typeTitle = 'REQUIREMENT (' + (data.id.split('-')[0] || 'REQ') + ')';
10111
10868
  typologyKey = 'requirement';
@@ -10159,7 +10916,9 @@ var DASHBOARD_CLIENT_SCRIPT = `
10159
10916
  'use-case': '.type-use-case, .type-usecase',
10160
10917
  'business-rule': '.type-business-rule, .type-rule',
10161
10918
  'abuse-case': '.type-abuse-case, .type-threat-actor',
10162
- 'requirement': '.type-requirement, .type-security-requirement, .layer-requirement',
10919
+ 'data-asset': '.type-data-asset',
10920
+ 'privacy-ropa': '.type-privacy-ropa',
10921
+ 'requirement': '.type-requirement, .type-security-requirement, .type-privacy-requirement, .layer-requirement',
10163
10922
  'architecture': '.type-component, .type-adr, .type-security-enclave, .layer-architecture',
10164
10923
  'test': '.type-bdd-feature, .type-code-test, .layer-test'
10165
10924
  };
@@ -10569,7 +11328,9 @@ var GRAPH_LEGEND_HTML = `
10569
11328
  <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
11329
  <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
11330
  <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>
11331
+ <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>
11332
+ <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>
11333
+ <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
11334
  <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
11335
  <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
11336
  </div>
@@ -10610,7 +11371,7 @@ function renderGraphToolbarHtml() {
10610
11371
  ` <div class="graph-toolbar">`,
10611
11372
  ` <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
11373
  ` <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>`,
11374
+ ` <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
11375
  ` <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
11376
  ` <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
11377
  ` <div class="tool-row"><input type="text" id="node-search" class="tool-input" placeholder="Search node ID..." oninput="searchNode(this.value)"></div>`,
@@ -11387,7 +12148,32 @@ var SPECIALIZED_AGENT_TEMPLATES = [
11387
12148
  - 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
12149
  - Every \`SEC-REQ-*\` must include negative BDD attack and rejection scenarios tagged \`@security @mitigation\`.
11389
12150
  - 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.`
12151
+ - 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.`
12152
+ },
12153
+ {
12154
+ id: "agent-privacy-officer",
12155
+ title: "Data Protection & Privacy-by-Design Specialist",
12156
+ 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.",
12157
+ globs: "privacy/**, specs/privacy/**, privacy-policy.yaml, templates/privacy/**, schemas/privacy/**",
12158
+ body: `## Role & Mission
12159
+ - **Role**: Data Protection & Privacy-by-Design Specialist Agent (\`agent-privacy-officer\`).
12160
+ - **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\`.
12161
+
12162
+ ## Operational Directives & Guardrails
12163
+ - Operate under bimodal discipline depending on the lifecycle phase:
12164
+ 1. **Shift-Left Design Mode (Post-Cybersecurity Handoff)**:
12165
+ - Inspect \`UC-*\`, \`FR-*\`, \`ABUSE-*\`, and \`SEC-REQ-*\` (and \`CMP-*\` during the technical security/privacy feedback loop from \`agent-system-architect\`).
12166
+ - 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/\`:
12167
+ - \`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\`).
12168
+ - \`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\`.
12169
+ - \`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\`.
12170
+ - \`status\` ALWAYS starts as \`draft\`.
12171
+ - **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.
12172
+ 2. **Pre-Merge Privacy Audit Mode (Downstream / PR Gate)**:
12173
+ - 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\`).
12174
+ - Block any PR with \`CRITICAL\` or \`HIGH\` privacy violations (exit code \`5\`).
12175
+ - Run \`pnpm run verify:schemas\` and \`pnpm run verify:privacy\` before delivering artifacts or audit verdicts.
12176
+ - 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
12177
  },
11392
12178
  {
11393
12179
  id: "agent-system-architect",
@@ -11399,22 +12185,22 @@ var SPECIALIZED_AGENT_TEMPLATES = [
11399
12185
  - **Mission**: Translate approved product definition into a modular technical architecture based on arc42 enriched with NAF v4.
11400
12186
 
11401
12187
  ## 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\`.
12188
+ - 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
12189
  - **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
12190
  - Generate interaction and sequence diagrams in native Mermaid syntax.
11405
12191
  - 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.`
12192
+ - Validate that architectural choices comply with legal constraints in \`license-policy.yaml\` and data protection constraints in \`privacy-policy.yaml\`.
12193
+ - **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.
12194
+ - 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
12195
  },
11410
12196
  {
11411
12197
  id: "agent-qa-engineer",
11412
12198
  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.",
12199
+ 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
12200
  globs: "tests/**, specs/changes/**/spec.md",
11415
12201
  body: `## Role & Mission
11416
12202
  - **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.
12203
+ - **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
12204
 
11419
12205
  ## Operational Directives & Guardrails
11420
12206
  - Read exclusively requirements cited in the \`handoff.yaml\` sidecar (\`HOF-*\`) and their referenced artifacts.
@@ -11429,7 +12215,7 @@ var SPECIALIZED_AGENT_TEMPLATES = [
11429
12215
  2. **Boundary Cases** (\`@boundary\` \`Scenario Outline\` + \`Examples\` table): values at the extremes of the accepted range.
11430
12216
  3. **Out-of-Range / Invalid Cases** (\`@invalid\` \`Scenario Outline\` + \`Examples\` table): null, empty, wrong types, values exceeding bounds.
11431
12217
  - **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.
12218
+ - Apply conditional categories when applicable: Security (\`@security @mitigation\`), Privacy (\`@privacy @gdpr\`), Performance (\`@performance\`), Idempotency (\`@idempotence\`), Postconditions, and Interface Contracts.
11433
12219
  - **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
12220
  - Tag all scenarios with \`@<FR-ID> @automated @regression\`.
11435
12221
  - **STRICTLY FORBIDDEN**: Including production code, suggesting implementation, or anticipating technical solutions.
@@ -11458,16 +12244,16 @@ Execute every implementation task following this strict sequential order:
11458
12244
 
11459
12245
  ## Operational Directives & Guardrails
11460
12246
  - 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.
12247
+ - **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
12248
  - 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.
12249
+ - Cite implemented \`FR-*\`, \`SEC-REQ-*\`, or \`PRIV-REQ-*\` IDs in test header comments to maintain 360\xB0 reverse traceability.
11464
12250
  - **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
12251
  - **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
12252
  - **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
12253
  - Before adding any external dependency, verify its SPDX license is permitted in \`license-policy.yaml\`.
11468
12254
  - 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
12255
  - 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.`
12256
+ - Upon completing green implementation, suggest handoff to \`agent-expert-user\` for Post-Development Functional Validation prior to security and privacy audit.`
11471
12257
  },
11472
12258
  {
11473
12259
  id: "agent-security-auditor",
@@ -11514,7 +12300,7 @@ Execute every implementation task following this strict sequential order:
11514
12300
  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
12301
  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
12302
  - 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.`
12303
+ - 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
12304
  },
11519
12305
  {
11520
12306
  id: "agent-code-reviewer",
@@ -11530,7 +12316,7 @@ Execute every implementation task following this strict sequential order:
11530
12316
  - Detect improper coupling, code smells, magic numbers, ambiguous identifiers, and encapsulation breaches.
11531
12317
  - Flag premature abstractions and speculative code violating YAGNI.
11532
12318
  - **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\`.
12319
+ - Coordinate Pre-Merge Audit Triad with \`agent-security-auditor\`, \`agent-privacy-officer\`, and \`agent-compliance-checker\`.
11534
12320
  - Categorize findings into: \`[BLOCKING]\` (quality violation or broken pattern), \`[CLEAN_CODE_SUGGESTION]\` (non-blocking improvement), and \`[COMPLIANT]\`.
11535
12321
  - 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
12322
  },
@@ -11605,6 +12391,186 @@ Canonical Reference: [\`process/09_agent_protocols.md\`](../../process/09_agent_
11605
12391
  ${agent.body}
11606
12392
  `;
11607
12393
  }
12394
+ var LIFECYCLE_SKILL_TEMPLATES = [
12395
+ {
12396
+ id: "aisdlc-greenfield",
12397
+ title: "Greenfield Project Inception & Delivery Playbook",
12398
+ 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.",
12399
+ 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).",
12400
+ body: `## Purpose & Trigger
12401
+ 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.
12402
+
12403
+ ## End-to-End Execution Playbook
12404
+
12405
+ ### Step 1: Repository Turnkey Initialization
12406
+ 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\`).
12407
+ 2. Install the Git telemetry hook via \`npx aisdlc git hook install\` (\`pnpm run git:hook:install\`).
12408
+ 3. Verify \`quality-policy.yaml\`, \`license-policy.yaml\`, and \`privacy-policy.yaml\` are present in the repository root.
12409
+
12410
+ ### Step 2: Phase 0 Product Inception (\`agent-product-analyst\`)
12411
+ 1. Delegate to or adopt [\`agent-product-analyst\`](../agent-product-analyst/SKILL.md).
12412
+ 2. **Discovery Interview (3\u20135 Questions)**: Before generating artifacts, clarify with the human Product Owner:
12413
+ - Core mission statement and business problem.
12414
+ - Primary actors (\`ACT-*\`) and external systems.
12415
+ - Essential MVP capabilities (\`UC-*\`) vs. future roadmap.
12416
+ - Top 3\u20135 quality goals (\`QR-*\`) and regulatory/technical constraints (\`CON-*\`).
12417
+ 3. **Enterprise & Capability Vision**: Create \`specs/architecture/ARCH-INTRO-001.md\` (\`status: draft\`, \`naf-perspective: "Enterprise & Capability"\`) using \`templates/architecture/introduction-and-goals.template.md\`.
12418
+ 4. **ProductShape Baseline**: Derive initial draft artifacts in \`specs/product/\`:
12419
+ - Actors (\`ACT-*\`), Use Cases (\`UC-*\`), Business Rules (\`BR-*\`), Functional Requirements (\`FR-*\` with mandatory \`@nominal\`, \`@boundary\`, \`@invalid\` Gherkin blocks), and Quality Requirements (\`QR-*\`).
12420
+ 5. Validate schemas and duplicates via MCP tools \`verify_schemas\` and \`verify_duplicates\` (or \`npx aisdlc check --fix\`).
12421
+ 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\`).
12422
+
12423
+ ### Step 3: Shift-Left Cybersecurity & Privacy-by-Design (\`agent-threat-modeler\` \u2794 \`agent-privacy-officer\`)
12424
+ 1. Delegate to or adopt [\`agent-threat-modeler\`](../agent-threat-modeler/SKILL.md).
12425
+ 2. Analyze every \`UC-*\` and \`FR-*\` using STRIDE and OWASP ASVS to create in \`specs/security/\`:
12426
+ - Threat Actors (\`ACT-THREAT-*\`)
12427
+ - Abuse Cases (\`ABUSE-*\` targeting \`UC-*\`)
12428
+ - Security Requirements (\`SEC-REQ-*\` with \`@security @mitigation\` negative Gherkin scenarios and \`SEC-ENC-*\` Zero Trust enclave bindings).
12429
+ 3. Hand off to [\`agent-privacy-officer\`](../agent-privacy-officer/SKILL.md) to apply LINDDUN and GDPR/LOPDGDD/ISO 27701 in \`specs/privacy/\`:
12430
+ - Personal Data Assets (\`DATA-ASSET-*\`), GDPR Art. 30 Records of Processing (\`PRIV-ROPA-*\`), and Privacy Requirements (\`PRIV-REQ-*\` with \`@privacy @gdpr\` Gherkin scenarios).
12431
+ 4. Run \`verify_schemas\` and \`verify_privacy\` (\`npx aisdlc verify privacy\`).
12432
+
12433
+ ### Step 4: Modular Systems Architecture (\`agent-system-architect\`)
12434
+ 1. Delegate to or adopt [\`agent-system-architect\`](../agent-system-architect/SKILL.md).
12435
+ 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-*\`).
12436
+ 3. Inspect third-party stack choices against \`license-policy.yaml\` via \`verify_licenses\` and subprocessors against \`privacy-policy.yaml\` via \`verify_privacy\`.
12437
+ 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.
12438
+
12439
+ ### Step 5: Release Milestone & Topological Wave SDD Plan (\`1 UC-* = 1 CHG-*\`)
12440
+ 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\`.
12441
+ 2. **Decompose into Topological Waves (DAG Parallelism)**:
12442
+ - **Wave 0 \u2014 Foundational Core (Sequential)**: Identify the foundational \`UC-*\` (core domain entities, shared contracts, auth/config) and deliver it first as \`CHG-001\` via [\`aisdlc-increment\`](../aisdlc-increment/SKILL.md) so downstream agents share locked interfaces.
12443
+ - **Waves 1..N \u2014 Orthogonal Capabilities (Parallel Multi-Agent)**: Once Wave 0 contracts are merged into \`release/v1.0.0\`, scaffold independent \`CHG-*\` increments (\`1 UC-* = 1 CHG-*\`) and execute them **in parallel** across isolated branches/worktrees (\`feat/CHG-002\`, \`feat/CHG-003\`, ...) whenever they target distinct components (\`CMP-*\`) or bounded contexts (\`BC-*\`).
12444
+ 3. **Release Consolidation (\`release/v1.0.0\` \u2794 \`main\`)**: Once all MVP \`CHG-*\` increments are integrated (\`sdd_integrate\`), run \`verify\` (\`npx aisdlc verify all\`), generate SBOM (\`npx aisdlc verify licenses --sbom reports/sbom.cdx.json --notices THIRD_PARTY_NOTICES.md\`), compute release KPIs (\`kpi_release\`), and open the Release PR into \`main\` for human Product Owner & Release Manager sign-off.
12445
+
12446
+ ## Non-Negotiable Guardrails
12447
+ - **FORBIDDEN Greenfield Monolith (\`1 UC-* = 1 CHG-*\`)**: Never bundle the entire product or multiple \`UC-*\` into a single SDD change (\`CHG-001\`). Deterministic Gate 3 (\`verify_governance\`) blocks any \`handoff.yaml\` containing $> 1$ Use Case (\`Greenfield monolith detected\`). Parallelism is achieved by running **multiple bounded \`CHG-*\` concurrently** on separate branches/worktrees, never by stuffing multiple \`UC-*\` into one \`CHG-*\`.
12448
+ - Never invoke \`sdd_change_new\` or write application code in \`src/\` on a Greenfield project before \`ARCH-INTRO-001\`, \`agent-expert-user\` MVP validation, and at least one \`UC-*\` and \`FR-*\` exist.
12449
+ - All newly drafted specifications must start with \`status: draft\`.
12450
+ - Respect the Workflow Handoff Protocol (\`templates/workflow/agent-handoff.template.md\`) whenever task autonomy is $\\ge$ \`HUMAN_REVIEW_PLAN\`.`
12451
+ },
12452
+ {
12453
+ id: "aisdlc-legacy-onboarding",
12454
+ title: "Legacy / Brownfield Retro-Inception Playbook",
12455
+ 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.",
12456
+ 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).",
12457
+ body: `## Purpose & Trigger
12458
+ 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.
12459
+
12460
+ ## End-to-End Execution Playbook
12461
+
12462
+ ### Step 1: Non-Destructive Framework Scaffolding
12463
+ 1. Run MCP tool \`new\` (or CLI \`npx @aisdlc/cli init\`) on the existing repository.
12464
+ - 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.
12465
+ 2. Install the Git commit trailer hook via \`npx aisdlc git hook install\`.
12466
+
12467
+ ### Step 2: Baseline Diagnostic Audit (Read-Only Assessment)
12468
+ Before modifying any code or creating SDD changes, run diagnostic verifiers to quantify existing technical, legal, privacy, and security debt:
12469
+ 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.
12470
+ 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.
12471
+ 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.
12472
+ 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$).
12473
+
12474
+ ### Step 3: Brownfield Retro-Inception (\`agent-system-architect\` & \`agent-product-analyst\`)
12475
+ 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:
12476
+ 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\`.
12477
+ 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-*\`).
12478
+ 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).
12479
+ 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.
12480
+
12481
+ ### Step 4: Characterization Testing & Synchronization
12482
+ 1. Run MCP tool \`sdd_check_fix\` (\`npx aisdlc check --fix\`) to extract \`.feature\` files and compute canonical SHA-256 digests.
12483
+ 2. Run \`verify_schemas\` and \`verify_pdac\` to confirm the reverse-engineered baseline graph is structurally valid and drift-free.
12484
+
12485
+ ### Step 5: Transition to Governed SDD Increments (Boy Scout / Strangler Rule)
12486
+ Once the target domain's baseline artifacts (\`ARCH-INTRO-*\`, \`UC-*\`, \`FR-*\`, \`CMP-*\`) are in place, execute all new features, refactorings, or bugfixes via [\`aisdlc-increment\`](../aisdlc-increment/SKILL.md).
12487
+
12488
+ ## Non-Negotiable Guardrails
12489
+ - **Zero Drive-By Rewrites**: Never mass-refactor untouched legacy modules during onboarding. Apply the Strangler / Boy Scout rule: bring touched functions into compliance with \`quality-policy.yaml\` incrementally via governed SDD tasks (\`TSK-*\`).
12490
+ - **Characterization First**: Never alter legacy business logic without first capturing its current behavior in an \`FR-*\` Gherkin specification and a verifiable test suite (\`agent-qa-engineer\`).
12491
+ - **Immediate Secret Remediation**: If Step 2 (\`verify_security\`) uncovers leaked credentials (exit code 4), halt feature work and remediate/rotate secrets immediately.`
12492
+ },
12493
+ {
12494
+ id: "aisdlc-increment",
12495
+ title: "Bounded SDD Feature & Bugfix Delivery Playbook",
12496
+ 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.",
12497
+ 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).",
12498
+ body: `## Purpose & Trigger
12499
+ 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.
12500
+
12501
+ ## End-to-End Execution Playbook
12502
+
12503
+ ### Step 1: Upstream Product, Security & Privacy Delta (\`agent-product-analyst\`, \`agent-threat-modeler\` & \`agent-privacy-officer\`)
12504
+ 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/\`.
12505
+ 2. If the increment introduces new behavior or modifies business rules:
12506
+ - Use [\`agent-product-analyst\`](../agent-product-analyst/SKILL.md) to create or update the \`UC-*\`, \`BR-*\`, and \`FR-*\` (with \`@nominal\`, \`@boundary\`, \`@invalid\` Gherkin scenarios).
12507
+ - Run MCP tool \`verify_duplicates\` (\`npx aisdlc verify duplicates\`) to block lexical or functional collisions early.
12508
+ - Use [\`agent-threat-modeler\`](../agent-threat-modeler/SKILL.md) to model any new \`ABUSE-*\` and \`SEC-REQ-*\` mitigations.
12509
+ - 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-*\`).
12510
+ 3. Run \`sdd_check_fix\` (\`npx aisdlc check --fix\`) to sync Gherkin \`.feature\` files and validate schemas.
12511
+
12512
+ ### Step 2: SDD Change Scaffolding & Architectural Design (\`agent-system-architect\`)
12513
+ 1. Scaffold the bounded change package and its cryptographic \`handoff.yaml\` sidecar (\`HOF-*\`) targeting **a single Use Case (\`1 UC-* = 1 CHG-*\`)** using MCP tool \`sdd_change_new\` (or CLI \`npx aisdlc change new "<Title>" --from <UC-ID> --profile <patch|standard|critical>\`).
12514
+ 2. Use [\`agent-system-architect\`](../agent-system-architect/SKILL.md) to complete \`specs/changes/active/<chg-id>/design.md\` and \`specs/architecture/CMP-*.md\`:
12515
+ - Define **Contract-First** shared interfaces/DTOs/schemas when spanning Frontend and Backend.
12516
+ - Map 100% of \`handoff.yaml\` requirements and components to atomic tasks (\`TSK-*\`) in \`tasks.md\` with explicit \`autonomy-mode\` (\`AUTONOMOUS\`, \`HUMAN_REVIEW_PLAN\`, \`HIGH_RISK_MANUAL\`, \`AMBIGUOUS\`).
12517
+ 3. Run \`verify_governance\` and \`verify_friction\` to validate task governance, 100% design/handoff scope coverage, and anti-monolith limits (\`maxUseCasesPerChange = 1\`).
12518
+
12519
+ ### Step 3: 4-Tier Git Branch Navigation & Multi-Agent Parallelism
12520
+ 1. Navigate to the task branch using \`npx aisdlc git checkout <TSK-ID>\` (\`pnpm run git:checkout <TSK-ID>\`), which cascade-creates:
12521
+ \`main\` \u2794 \`release/vX.Y.Z\` \u2794 \`feat/CHG-XXX\` \u2794 \`task/CHG-XXX/TSK-YYY-<slug>\`.
12522
+ 2. Validate branch naming compliance via \`npx aisdlc git validate <branch>\`.
12523
+ 3. **Parallel Agent Execution Rules**:
12524
+ - **Inter-Feature Parallelism (\`feat/CHG-001\` $\\parallel$ \`feat/CHG-002\`)**: Multiple agents may execute different \`CHG-*\` increments concurrently in isolated branches/worktrees (\`specs/changes/active/chg-XXX/\`) when their target \`CMP-*\` / \`UC-*\` have no blocking dependencies.
12525
+ - **Intra-Feature Parallelism (\`task/CHG-X/TSK-002\` $\\parallel$ \`task/CHG-X/TSK-003\`)**: Once \`TSK-001\` (Contract-First shared interfaces/DTOs) is merged into \`feat/CHG-X\`, multiple \`agent-developer\` subagents may implement independent tasks (e.g., Backend adapter vs. Frontend UI) concurrently on their respective \`task/*\` branches.
12526
+
12527
+ ### Step 4: Red Phase \u2014 Failing Test Suites (\`agent-qa-engineer\`)
12528
+ 1. Delegate to or adopt [\`agent-qa-engineer\`](../agent-qa-engineer/SKILL.md).
12529
+ 2. Author FAILING (red) BDD/Gherkin step definitions, integration/contract tests, and mandatory E2E/UI tests (evaluating Happy Path, Sad Path, and Boundary Values for every interactive UI element, plus \`UC-*\` alternative/exception flows) in \`tests/\`.
12530
+ 3. Run \`verify_testing\` (\`npx aisdlc verify testing\`) to confirm requirement test coverage before writing production code.
12531
+
12532
+ ### Step 5: Green & Refactor Phase \u2014 Surgical Implementation (\`agent-developer\`)
12533
+ 1. Delegate to or adopt [\`agent-developer\`](../agent-developer/SKILL.md).
12534
+ 2. Execute the **Mandatory 4-Step Implementation Order**:
12535
+ - (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).
12536
+ 3. Verify any new dependency against \`license-policy.yaml\` via \`verify_licenses\` and PII handling against \`privacy-policy.yaml\` via \`verify_privacy\`.
12537
+ 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.
12538
+
12539
+ ### Step 6: Post-Development Functional Validation & Pre-Merge Audit Triad
12540
+ 1. **Functional Validation (\`agent-expert-user\`)**: Validate live runtime behavior against \`UC-*\` and \`FR-*\` criteria (including \`0\` browser \`console.error\`/\`pageerror\` on UI changes).
12541
+ 2. **Pre-Merge Audit Triad**: Execute concurrent review across:
12542
+ - [\`agent-code-reviewer\`](../agent-code-reviewer/SKILL.md) (SOLID, DRY, YAGNI, AST thresholds, zero fake-wiring)
12543
+ - [\`agent-security-auditor\`](../agent-security-auditor/SKILL.md) (\`verify_security\`: Gitleaks secrets + OWASP SAST)
12544
+ - [\`agent-privacy-officer\`](../agent-privacy-officer/SKILL.md) (\`verify_privacy\`: GDPR/LOPDGDD ROPA + PII-SAST)
12545
+ - [\`agent-compliance-checker\`](../agent-compliance-checker/SKILL.md) (\`verify_licenses\`: SPDX & SBOM compliance)
12546
+ 3. **Consolidated Release Gate**: Run MCP tool \`verify\` (\`npx aisdlc verify all\`) and confirm all **12 Quality Gates** pass green.
12547
+
12548
+ ### Step 7: Human PR Sign-Off, Baseline Integration & Release Closure
12549
+ 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).
12550
+ 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/\`.
12551
+ 3. **Release Milestone Closure (\`release/vX.Y.Z\` \u2794 \`main\`)**: When all \`CHG-*\` increments planned for \`release/vX.Y.Z\` are integrated:
12552
+ - 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\`).
12553
+ - Open the Release PR from \`release/vX.Y.Z\` to \`main\` for final human Product Owner and Release Manager approval and semantic Git tagging (\`vX.Y.Z\`).
12554
+
12555
+ ## Non-Negotiable Guardrails
12556
+ - **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.
12557
+ - **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\`.`
12558
+ }
12559
+ ];
12560
+ function renderAntigravitySkillFile(skill) {
12561
+ return `---
12562
+ name: ${skill.id}
12563
+ description: >-
12564
+ ${skill.description}
12565
+ ---
12566
+
12567
+ # ${skill.id} (${skill.title})
12568
+
12569
+ Canonical Reference: ${skill.references}
12570
+
12571
+ ${skill.body}
12572
+ `;
12573
+ }
11608
12574
  var STARTER_ANTIGRAVITY_RULES = `# Google Antigravity & Gemini CLI Rules - AI-SDLC Framework
11609
12575
 
11610
12576
  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).
@@ -11618,7 +12584,7 @@ This file defines the operational rules and specialized role mappings for Google
11618
12584
  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.
11619
12585
  2. **FORBIDDEN TO INVENT PRODUCT OR ARCHITECTURE DECISIONS**: When facing ambiguous requirements, formulate clarifying questions (\`open-questions\`). Never assume unspecified intentions.
11620
12586
  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.
11621
- 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.
12587
+ 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.
11622
12588
  5. **MANDATORY CRYPTOGRAPHIC CITATION**: Every derived artifact must cite upstream artifacts using canonical identifiers and their Unix LF-normalized SHA-256 cryptographic hashes.
11623
12589
 
11624
12590
  ---
@@ -11639,23 +12605,31 @@ This file defines the operational rules and specialized role mappings for Google
11639
12605
  ### 2. \`agent-threat-modeler\` (Threat Modeler and Security Specialist)
11640
12606
  - **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.
11641
12607
  - **Input**: Use cases \`UC-*\`, functional requirements \`FR-*\`, or architecture components (\`CMP-*\`, Mermaid diagrams, ADRs).
11642
- - **Output**: Cybersecurity triad (\`ACT-THREAT-*\`, \`ABUSE-*\`, \`SEC-REQ-*\`) compliant with \`schemas/security/\`.
12608
+ - **Output**: Cybersecurity triad (\`ACT-THREAT-*\`, \`ABUSE-*\`, \`SEC-REQ-*\`) compliant with \`schemas/security/\`, followed by handoff to \`agent-privacy-officer\`.
11643
12609
  - **Guardrails**:
11644
12610
  - \`status\` always starts in \`draft\`.
11645
12611
  - Negative BDD attack and rejection scenarios tagged with \`@security @mitigation\`.
11646
12612
  - Assignment of Zero Trust enclaves \`SEC-ENC-*\`.
11647
12613
 
11648
- ### 3. \`agent-system-architect\` (System Architect)
12614
+ ### 3. \`agent-privacy-officer\` (Data Protection & Privacy-by-Design Specialist)
12615
+ - **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\`.
12616
+ - **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.
12617
+ - **Guardrails**:
12618
+ - \`status\` always starts in \`draft\`.
12619
+ - Every \`PRIV-REQ-*\` includes Gherkin scenarios tagged with \`@<PRIV-REQ-ID> @privacy @gdpr @automated @regression\`.
12620
+ - Run \`pnpm run verify:privacy\` to block PII in logs/prompts and enforce ROPA & retention/erasure policies.
12621
+
12622
+ ### 4. \`agent-system-architect\` (System Architect)
11649
12623
  - **Mission**: Translate the approved product definition into a modular technical architecture based on arc42 enriched with NAF v4.
11650
12624
  - **Output**: Architecture components (\`CMP-*\`), Mermaid diagrams, and immutable \`ADR-*\` records compliant with \`schemas/architecture/\`.
11651
12625
  - **Guardrails**:
11652
- - Every \`CMP-*\` must declare \`satisfies-requirements\` linking \`FR-*\`, \`QR-*\`, and \`SEC-REQ-*\`.
11653
- - Emit a return handoff to \`agent-threat-modeler\` in the technical security feedback loop when infrastructure or persistence decisions introduce new attack vectors.
12626
+ - Every \`CMP-*\` must declare \`satisfies-requirements\` linking \`FR-*\`, \`QR-*\`, \`SEC-REQ-*\`, and \`PRIV-REQ-*\`.
12627
+ - 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.
11654
12628
 
11655
- ### 4. \`agent-qa-engineer\` (QA Engineer and SDET)
11656
- - **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.
12629
+ ### 5. \`agent-qa-engineer\` (QA Engineer and SDET)
12630
+ - **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.
11657
12631
  - **Input**: Approved requirements from the \`handoff.yaml\` sidecar (\`HOF-*\`).
11658
- - **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).
12632
+ - **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).
11659
12633
  - **Guardrails**:
11660
12634
  - FORBIDDEN to include production code or anticipate implementations.
11661
12635
  - **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.
@@ -11665,7 +12639,7 @@ This file defines the operational rules and specialized role mappings for Google
11665
12639
  - Mandatory tags: \`@<FR-ID> @automated @regression\`.
11666
12640
  - Run \`pnpm run verify:testing\` before emitting handoff.
11667
12641
 
11668
- ### 5. \`agent-developer\` (Software Developer)
12642
+ ### 6. \`agent-developer\` (Software Developer)
11669
12643
  - **Mission**: Implement atomic tasks from SDD specifications (\`tasks.md\`) with clean, strictly typed code and thorough tests.
11670
12644
  - **Directives**:
11671
12645
  - **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.
@@ -11673,36 +12647,36 @@ This file defines the operational rules and specialized role mappings for Google
11673
12647
  - Make tests delivered by \`agent-qa-engineer\` pass green without altering them to accommodate code.
11674
12648
  - Respect \`quality-policy.yaml\` thresholds: CC $\\le 10$, Cognitive $\\le 15$, MI $\\ge 50$, LOC $\\le 40$.
11675
12649
  - Run pre-flight with auto-fix: \`pnpm run check:fix\` and full verification: \`pnpm run verify:all\`.
11676
- - Upon completing green implementation, suggest handoff to \`agent-expert-user\` for post-development functional validation prior to security audit.
12650
+ - Upon completing green implementation, suggest handoff to \`agent-expert-user\` for post-development functional validation prior to security and privacy audit.
11677
12651
 
11678
- ### 6. \`agent-security-auditor\` (Adversarial Code Auditor)
12652
+ ### 7. \`agent-security-auditor\` (Adversarial Code Auditor)
11679
12653
  - **Mission**: Rigorously examine Pull Requests for business logic vulnerabilities, injection vectors, secret leaks, and authorization flaws as part of the Pre-Merge Audit Triad.
11680
12654
  - **Directives**:
11681
12655
  - Analyze code diffs with an attacker mindset and run \`pnpm run verify:security\`.
11682
12656
  - Issue findings with CVSS v3.1 severity scoring and block any PR introducing CRITICAL or HIGH security risks.
11683
12657
 
11684
- ### 7. \`agent-compliance-checker\` (Open Source License Compliance Auditor)
12658
+ ### 8. \`agent-compliance-checker\` (Open Source License Compliance Auditor)
11685
12659
  - **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.
11686
12660
  - **Directives**:
11687
12661
  - Verify SPDX identifiers via \`pnpm run verify:licenses\`, immediately blocking viral (\`GPL\`, \`AGPL\`) or unapproved commercial (\`BSL\`, \`SSPL\`) licenses.
11688
12662
 
11689
- ### 8. \`agent-expert-user\` (Expert User and Domain Evaluator)
12663
+ ### 9. \`agent-expert-user\` (Expert User and Domain Evaluator)
11690
12664
  - **Mission**: Contrast design and specifications (design phase) and functionally validate finished software against \`UC-*\` and \`FR-*\` (post-development phase).
11691
12665
  - **Directives**:
11692
12666
  - 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\`).
11693
12667
  - 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.
11694
- - Emit handoff block suggesting \`agent-code-reviewer\` / \`agent-security-auditor\` if compliant, or return to \`agent-developer\` on functional drift.
12668
+ - Emit handoff block suggesting \`agent-code-reviewer\` / \`agent-security-auditor\` / \`agent-privacy-officer\` if compliant, or return to \`agent-developer\` on functional drift.
11695
12669
 
11696
- ### 9. \`agent-code-reviewer\` (Technical and Architectural Code Reviewer)
12670
+ ### 10. \`agent-code-reviewer\` (Technical and Architectural Code Reviewer)
11697
12671
  - **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.
11698
12672
  - **Directives**:
11699
12673
  - Respect \`quality-policy.yaml\` thresholds: CC $\\le 10$, Cognitive $\\le 15$, MI $\\ge 50$, LOC $\\le 40$.
11700
12674
  - Detect improper coupling, code smells, magic numbers, ambiguous names, and encapsulation violations.
11701
12675
  - Flag premature abstractions and speculative code violating YAGNI.
11702
- - Coordinate Pre-Merge Audit Triad with \`agent-security-auditor\` and \`agent-compliance-checker\`.
12676
+ - Coordinate Pre-Merge Audit Triad with \`agent-security-auditor\`, \`agent-privacy-officer\`, and \`agent-compliance-checker\`.
11703
12677
  - Classify findings into: \`[BLOCKING]\` (quality violation or broken pattern), \`[CLEAN_CODE_SUGGESTION]\` (non-blocking improvement), and \`[COMPLIANT]\`.
11704
12678
 
11705
- ### 10. \`agent-devops\` (Automation and Infrastructure Engineer)
12679
+ ### 11. \`agent-devops\` (Automation and Infrastructure Engineer)
11706
12680
  - **Mission**: Maintain, evolve, and audit automated project infrastructure: CI/CD workflows, Docker containers, IaC manifests, and support scripts.
11707
12681
  - **Directives**:
11708
12682
  - Strict infrastructure domain: Operates exclusively in \`.github/workflows/\`, \`Dockerfile*\`, \`docker-compose*.yml\`, IaC manifests, and \`scripts/\`.
@@ -11728,7 +12702,7 @@ This file defines the operational rules and specialized role mappings for Google
11728
12702
  - **Conditional Activation Rule by Autonomy**:
11729
12703
  - \u{1F7E2} **\`AUTONOMOUS\`** (or exclusive final supervision in PR/CI): **OMITTED**. Do not request or emit interactive handoff to avoid interrupting unattended execution.
11730
12704
  - \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**.
11731
- - **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).
12705
+ - **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).
11732
12706
  `;
11733
12707
  var STARTER_CURSOR_CORE_RULES = `---
11734
12708
  description: Global canonical directives, 5 unbreakable commandments, and AI-SDLC pre-flight
@@ -11745,7 +12719,7 @@ Every agent operating in this repository must strictly observe the following gua
11745
12719
  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.
11746
12720
  2. **FORBIDDEN TO INVENT PRODUCT OR ARCHITECTURE DECISIONS**: When facing ambiguity, formulate open questions (\`open-questions\`). Never assume undocumented requirements.
11747
12721
  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.
11748
- 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.
12722
+ 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.
11749
12723
  5. **MANDATORY CRYPTOGRAPHIC CITATION**: Link specifications using immutable identifiers and Unix LF-normalized SHA-256 hashes.
11750
12724
 
11751
12725
  ## 2. Pre-Flight Verification Commands
@@ -11765,7 +12739,8 @@ Before finalizing changes or proposing commits:
11765
12739
  | Role | Mission (summary) |
11766
12740
  | :--- | :--- |
11767
12741
  | \`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\`. |
11768
- | \`agent-threat-modeler\` | STRIDE/OWASP threat triad (\`ACT-THREAT-*\`, \`ABUSE-*\`, \`SEC-REQ-*\`). |
12742
+ | \`agent-threat-modeler\` | STRIDE/OWASP threat triad (\`ACT-THREAT-*\`, \`ABUSE-*\`, \`SEC-REQ-*\`); hands off to \`agent-privacy-officer\`. |
12743
+ | \`agent-privacy-officer\` | LINDDUN & GDPR/LOPDGDD privacy triad (\`DATA-ASSET-*\`, \`PRIV-ROPA-*\`, \`PRIV-REQ-*\`) + Pre-Merge \`verify:privacy\`. |
11769
12744
  | \`agent-system-architect\` | Modular arc42 + NAF v4 architecture (\`CMP-*\`, Mermaid diagrams, \`ADR-*\`). |
11770
12745
  | \`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. |
11771
12746
  | \`agent-developer\` | Atomic tasks from \`tasks.md\`; respects autonomy mode; runs \`pnpm run check:fix\` + \`pnpm run verify:all\`. |
@@ -11788,8 +12763,8 @@ Before finalizing changes or proposing commits:
11788
12763
  - **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).
11789
12764
  `;
11790
12765
  var STARTER_CURSOR_PRODUCT_RULES = `---
11791
- description: Directives for SDD specifications editing, ProductShape artifacts, and Cybersecurity
11792
- globs: specs/**, templates/**, product/**, security/**
12766
+ description: Directives for SDD specifications editing, ProductShape artifacts, Cybersecurity, and Privacy
12767
+ globs: specs/**, templates/**, product/**, security/**, privacy/**
11793
12768
  alwaysApply: false
11794
12769
  ---
11795
12770
 
@@ -11808,14 +12783,17 @@ Every generated or modified artifact must follow canonical naming and satisfy it
11808
12783
  - Threat Actors: \`ACT-THREAT-[SUFFIX]\` (\`schemas/security/threat-actor.schema.json\`)
11809
12784
  - Abuse Cases: \`ABUSE-[SUFFIX]\` (\`schemas/security/abuse-case.schema.json\`)
11810
12785
  - Security Requirements: \`SEC-REQ-[SUFFIX]\` (\`schemas/security/security-req.schema.json\`)
12786
+ - Data Assets: \`DATA-ASSET-[SUFFIX]\` (\`schemas/privacy/data-asset.schema.json\`)
12787
+ - Processing Activities (ROPA): \`PRIV-ROPA-[SUFFIX]\` (\`schemas/privacy/privacy-ropa.schema.json\`)
12788
+ - Privacy Requirements: \`PRIV-REQ-[SUFFIX]\` (\`schemas/privacy/privacy-req.schema.json\`)
11811
12789
 
11812
12790
  ## 2. "AI as Scribe" Protocol Rules
11813
12791
  - **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-*\`.
11814
12792
  - **Initial Status**: Every new artifact strictly starts with \`status: draft\`. Creating artifacts directly as \`active\` or \`approved\` is forbidden.
11815
12793
  - **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.
11816
- - **Security Mitigations**: Every \`SEC-REQ-*\` must include negative Gherkin tests (\`@security @mitigation\`).
12794
+ - **Security & Privacy Mitigations**: Every \`SEC-REQ-*\` must include negative Gherkin tests (\`@security @mitigation\`) and every \`PRIV-REQ-*\` must include Gherkin privacy scenarios (\`@privacy @gdpr\`).
11817
12795
  - **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>...\`.
11818
- - **Deterministic Validation**: Run \`pnpm run verify:schemas\` and \`pnpm run verify:duplicates\` before presenting the draft to the human reviewer.
12796
+ - **Deterministic Validation**: Run \`pnpm run verify:schemas\`, \`pnpm run verify:duplicates\`, and \`pnpm run verify:privacy\` before presenting the draft to the human reviewer.
11819
12797
  `;
11820
12798
  var STARTER_CURSOR_QUALITY_RULES = `---
11821
12799
  description: Directives for code quality, architecture, TDD, and complexity limits
@@ -11837,7 +12815,7 @@ Canonical Reference: [\`process/09_agent_protocols.md\`](process/09_agent_protoc
11837
12815
  ## 2. TDD Methodology, Clean Architecture & Unit Testing
11838
12816
  - **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.
11839
12817
  - Apply Test-Driven Development: generate unit tests before or alongside component logic.
11840
- - Tag tests linked to requirements with header comments citing the ID (\`FR-*\` or \`SEC-REQ-*\`) to enable reverse traceability.
12818
+ - Tag tests linked to requirements with header comments citing the ID (\`FR-*\`, \`SEC-REQ-*\`, or \`PRIV-REQ-*\`) to enable reverse traceability.
11841
12819
  - Suppressing types (\`any\`), linter rules (\`eslint-disable\`), or unit tests to force pipeline passage is prohibited.
11842
12820
 
11843
12821
  ## 3. Open Source License Policy (\`license-policy.yaml\`)
@@ -11852,7 +12830,7 @@ var STARTER_CLAUDE_RULES = `# Claude Code Instructions - AI-SDLC Monorepo
11852
12830
 
11853
12831
  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).
11854
12832
 
11855
- This repository implements the **AI-SDLC** framework (Spec-Driven Development, deterministic quality governance, and OSS license compliance for human-agent collaboration).
12833
+ This repository implements the **AI-SDLC** framework (Spec-Driven Development, deterministic quality governance, Privacy-by-Design, and OSS license compliance for human-agent collaboration).
11856
12834
 
11857
12835
  ---
11858
12836
 
@@ -11861,7 +12839,7 @@ This repository implements the **AI-SDLC** framework (Spec-Driven Development, d
11861
12839
  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.
11862
12840
  2. **FORBIDDEN TO INVENT PRODUCT OR ARCHITECTURE DECISIONS**: When facing ambiguous requirements, formulate open questions (\`open-questions\`). Never assume undocumented behaviors.
11863
12841
  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.
11864
- 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.
12842
+ 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.
11865
12843
  5. **MANDATORY CRYPTOGRAPHIC CITATION**: Every spec or sidecar must cite immutable identifiers and Unix LF-normalized SHA-256 digests.
11866
12844
 
11867
12845
  ---
@@ -11872,7 +12850,7 @@ This repository implements the **AI-SDLC** framework (Spec-Driven Development, d
11872
12850
  # 1. Pre-flight with deterministic auto-fix (Gherkin & SHA-256 digests)
11873
12851
  pnpm run check:fix
11874
12852
 
11875
- # 2. Complete verification across all Quality Gates (Quality, RTM, Governance, Testing, Licenses, PDaC, Schemas, Duplicates, Security)
12853
+ # 2. Complete verification across all Quality Gates (Quality, RTM, Governance, Testing, Licenses, PDaC, Schemas, Duplicates, Security, Privacy)
11876
12854
  pnpm run verify:all
11877
12855
 
11878
12856
  # 3. Complete automated test suite (Vitest)
@@ -11900,37 +12878,41 @@ npx tsx packages/cli/src/index.ts sdd integrate --change <chg-id>
11900
12878
  - **Guardrails**: \`status\` always starts in \`draft\`. Mandatory Gherkin criteria with \`@<ID> @automated @regression\`.
11901
12879
 
11902
12880
  ### 2. \`agent-threat-modeler\` (Threat Modeler and Security Specialist)
11903
- - **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.
12881
+ - **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\`.
11904
12882
  - **Output**: Cybersecurity triad (\`ACT-THREAT-*\`, \`ABUSE-*\`, \`SEC-REQ-*\`) compliant with \`schemas/security/\`.
11905
12883
 
11906
- ### 3. \`agent-system-architect\` (System Architect)
12884
+ ### 3. \`agent-privacy-officer\` (Data Protection & Privacy-by-Design Specialist)
12885
+ - **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\`.
12886
+ - **Directives**: Run \`pnpm run verify:privacy\`, enforce PII masking in logs/LLM prompts, and trigger \`DPIA-*\` requests on Art. 9 sensitive data.
12887
+
12888
+ ### 4. \`agent-system-architect\` (System Architect)
11907
12889
  - **Mission**: Translate the approved product definition into a modular technical architecture based on arc42 enriched with NAF v4 (\`CMP-*\`, Mermaid diagrams, \`ADR-*\`).
11908
- - **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.
12890
+ - **Guardrails**: Declare \`satisfies-requirements\` on every \`CMP-*\` (including \`PRIV-REQ-*\`) 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.
11909
12891
 
11910
- ### 4. \`agent-qa-engineer\` (QA Engineer and SDET)
11911
- - **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.
12892
+ ### 5. \`agent-qa-engineer\` (QA Engineer and SDET)
12893
+ - **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.
11912
12894
  - **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\`.
11913
12895
 
11914
- ### 5. \`agent-developer\` (Software Developer)
12896
+ ### 6. \`agent-developer\` (Software Developer)
11915
12897
  - **Mission**: Implement atomic tasks from SDD specifications (\`tasks.md\`) with clean, strictly typed code and thorough tests.
11916
12898
  - **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\`.
11917
12899
 
11918
- ### 6. \`agent-security-auditor\` (Adversarial Code Auditor)
12900
+ ### 7. \`agent-security-auditor\` (Adversarial Code Auditor)
11919
12901
  - **Mission**: Examine Pull Requests for business logic vulnerabilities, injection vectors, secret leaks, and authorization flaws as part of the Pre-Merge Audit Triad.
11920
12902
  - **Directives**: Run \`pnpm run verify:security\`, evaluate CVSS v3.1 severity, and block CRITICAL/HIGH risks.
11921
12903
 
11922
- ### 7. \`agent-compliance-checker\` (Open Source License Compliance Auditor)
12904
+ ### 8. \`agent-compliance-checker\` (Open Source License Compliance Auditor)
11923
12905
  - **Mission**: Audit dependency manifests against \`license-policy.yaml\` as part of the Pre-Merge Audit Triad.
11924
12906
  - **Directives**: Run \`pnpm run verify:licenses\`, blocking viral (\`GPL\`, \`AGPL\`) or unapproved commercial (\`BSL\`, \`SSPL\`) packages.
11925
12907
 
11926
- ### 8. \`agent-expert-user\` (Expert User and Domain Evaluator)
12908
+ ### 9. \`agent-expert-user\` (Expert User and Domain Evaluator)
11927
12909
  - **Mission**: Contrast design and specifications (design phase) and functionally validate finished software against \`UC-*\` and \`FR-*\` (post-development functional validation phase).
11928
12910
 
11929
- ### 9. \`agent-code-reviewer\` (Technical and Architectural Code Reviewer)
12911
+ ### 10. \`agent-code-reviewer\` (Technical and Architectural Code Reviewer)
11930
12912
  - **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.
11931
12913
  - **Findings classification**: \`[BLOCKING]\`, \`[CLEAN_CODE_SUGGESTION]\`, \`[COMPLIANT]\`.
11932
12914
 
11933
- ### 10. \`agent-devops\` (Automation and Infrastructure Engineer)
12915
+ ### 11. \`agent-devops\` (Automation and Infrastructure Engineer)
11934
12916
  - **Mission**: Maintain, evolve, and audit automated project infrastructure: CI/CD workflows, Docker containers, IaC manifests, and support scripts.
11935
12917
  - **NON-INVASION GUARDRAIL**: STRICTLY FORBIDDEN from modifying application source code (\`src/\`, \`packages/*/src/\`).
11936
12918
 
@@ -12001,8 +12983,8 @@ You operate as an assistant agent in the **AI-SDLC** repository. You are not a s
12001
12983
  - If a requirement is ambiguous or incomplete, formulate open questions (\`open-questions\`) to the human user. Guessing undocumented intentions is forbidden.
12002
12984
  3. **FORBIDDEN TO INTRODUCE DEPENDENCIES WITHOUT LICENSE INSPECTION**:
12003
12985
  - 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.
12004
- 4. **FORBIDDEN TO IGNORE CYBERSECURITY (SECURITY-BY-DEFAULT)**:
12005
- - 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.
12986
+ 4. **FORBIDDEN TO IGNORE CYBERSECURITY & PRIVACY (SECURITY-BY-DEFAULT & PRIVACY-BY-DEFAULT)**:
12987
+ - 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.
12006
12988
  5. **MANDATORY CRYPTOGRAPHIC CITATION**:
12007
12989
  - Every specification, design, or sidecar must reference canonical identifiers and their Unix LF-normalized SHA-256 digests.
12008
12990
 
@@ -12047,7 +13029,7 @@ Non-Negotiable Quality Thresholds (\`quality-policy.yaml\`):
12047
13029
  - **Conditional Activation**:
12048
13030
  * \u{1F7E2} **\`AUTONOMOUS\` Mode** (or PR/CI final supervision): **OMITTED**. Do not interrupt unattended execution.
12049
13031
  * \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**.
12050
- - **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).
13032
+ - **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).
12051
13033
 
12052
13034
  ---
12053
13035
 
@@ -12056,7 +13038,8 @@ Non-Negotiable Quality Thresholds (\`quality-policy.yaml\`):
12056
13038
  | Role | Mission (summary) |
12057
13039
  | :--- | :--- |
12058
13040
  | \`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\`. |
12059
- | \`agent-threat-modeler\` | STRIDE/OWASP threat triad (\`ACT-THREAT-*\`, \`ABUSE-*\`, \`SEC-REQ-*\`). |
13041
+ | \`agent-threat-modeler\` | STRIDE/OWASP threat triad (\`ACT-THREAT-*\`, \`ABUSE-*\`, \`SEC-REQ-*\`); hands off to \`agent-privacy-officer\`. |
13042
+ | \`agent-privacy-officer\` | LINDDUN & GDPR/LOPDGDD privacy triad (\`DATA-ASSET-*\`, \`PRIV-ROPA-*\`, \`PRIV-REQ-*\`) + Pre-Merge \`verify:privacy\`. |
12060
13043
  | \`agent-system-architect\` | Modular arc42 + NAF v4 architecture (\`CMP-*\`, Mermaid diagrams, \`ADR-*\`). |
12061
13044
  | \`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. |
12062
13045
  | \`agent-developer\` | Atomic tasks from \`tasks.md\`; autonomy mode must be respected; runs \`pnpm run check:fix\` + \`pnpm run verify:all\`. |
@@ -13118,6 +14101,10 @@ var STARTER_TEMPLATES_CI_GITHUB_WORKFLOWS_SDD_INTEGRATE_ON_MERGE_YML = 'name: SD
13118
14101
  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';
13119
14102
  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';
13120
14103
  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';
14104
+ 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';
14105
+ 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';
14106
+ 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';
14107
+ 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';
13121
14108
  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';
13122
14109
  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';
13123
14110
  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';
@@ -13169,10 +14156,10 @@ Describes the adversary's profile, technical skill level, available resources, a
13169
14156
  | :--- | :--- | :--- | :--- | :--- |\r
13170
14157
  | **1.0.0** | 2026-09-03 | Security Officer / Threat Modeler | Initial threat profile characterization | CHG-SEC-001 |\r
13171
14158
  `;
13172
- 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';
14159
+ 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';
13173
14160
  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";
13174
14161
  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';
13175
- 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";
14162
+ 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";
13176
14163
  var STARTER_BASE_TEMPLATES = [
13177
14164
  { relPath: "templates/ci/.gitlab-ci.yml", content: STARTER_TEMPLATES_CI__GITLAB_CI_YML },
13178
14165
  { relPath: "templates/ci/azure-pipelines.yml", content: STARTER_TEMPLATES_CI_AZURE_PIPELINES_YML },
@@ -13184,6 +14171,10 @@ var STARTER_BASE_TEMPLATES = [
13184
14171
  { relPath: "templates/compliance/commercial-acquisition-request.template.md", content: STARTER_TEMPLATES_COMPLIANCE_COMMERCIAL_ACQUISITION_REQUEST_TEMPLATE_MD },
13185
14172
  { relPath: "templates/manuals/production-manual.template.md", content: STARTER_TEMPLATES_MANUALS_PRODUCTION_MANUAL_TEMPLATE_MD },
13186
14173
  { relPath: "templates/manuals/user-manual.template.md", content: STARTER_TEMPLATES_MANUALS_USER_MANUAL_TEMPLATE_MD },
14174
+ { relPath: "templates/privacy/data-asset.template.md", content: STARTER_TEMPLATES_PRIVACY_DATA_ASSET_TEMPLATE_MD },
14175
+ { relPath: "templates/privacy/dpia-request.template.md", content: STARTER_TEMPLATES_PRIVACY_DPIA_REQUEST_TEMPLATE_MD },
14176
+ { relPath: "templates/privacy/privacy-req.template.md", content: STARTER_TEMPLATES_PRIVACY_PRIVACY_REQ_TEMPLATE_MD },
14177
+ { relPath: "templates/privacy/privacy-ropa.template.md", content: STARTER_TEMPLATES_PRIVACY_PRIVACY_ROPA_TEMPLATE_MD },
13187
14178
  { relPath: "templates/product/actor.template.md", content: STARTER_TEMPLATES_PRODUCT_ACTOR_TEMPLATE_MD },
13188
14179
  { relPath: "templates/product/business-rule.template.md", content: STARTER_TEMPLATES_PRODUCT_BUSINESS_RULE_TEMPLATE_MD },
13189
14180
  { relPath: "templates/product/journey.template.md", content: STARTER_TEMPLATES_PRODUCT_JOURNEY_TEMPLATE_MD },
@@ -13301,6 +14292,52 @@ categories:
13301
14292
  - "SSPL-1.0"
13302
14293
  - "BSL-1.1"
13303
14294
  `;
14295
+ var STARTER_PRIVACY_POLICY = `# ==============================================================================
14296
+ # AI-SDLC: Data Protection & Privacy-by-Design Governance Policy (PDaC)
14297
+ # ==============================================================================
14298
+ version: "1.0"
14299
+ project: "Standard AI-SDLC Project"
14300
+ regulatory_frameworks:
14301
+ - "GDPR"
14302
+ - "LOPDGDD"
14303
+ - "ISO-27701"
14304
+ default_pii_action: "DENY_UNCLASSIFIED"
14305
+
14306
+ classification_levels:
14307
+ PUBLIC:
14308
+ encryption_at_rest: false
14309
+ encryption_in_transit: true
14310
+ allow_in_logs: true
14311
+ allow_in_llm_prompts: true
14312
+ INTERNAL:
14313
+ encryption_at_rest: true
14314
+ encryption_in_transit: true
14315
+ allow_in_logs: true
14316
+ allow_in_llm_prompts: true
14317
+ CONFIDENTIAL_PII:
14318
+ encryption_at_rest: true
14319
+ encryption_in_transit: true
14320
+ allow_in_logs: false
14321
+ masking_in_logs: "HASH_OR_REDACT"
14322
+ allow_in_llm_prompts: false
14323
+ require_retention_policy: true
14324
+ require_erasure_mechanism: true
14325
+ RESTRICTED_SENSITIVE_PII:
14326
+ encryption_at_rest: true
14327
+ field_level_encryption: true
14328
+ encryption_in_transit: true
14329
+ allow_in_logs: false
14330
+ allow_in_llm_prompts: false
14331
+ require_dpia_approval: true
14332
+ require_explicit_consent_or_art9_basis: true
14333
+
14334
+ cross_border_transfers:
14335
+ allowed_regions:
14336
+ - "EU"
14337
+ - "EEA"
14338
+ require_scc_for_external: true
14339
+ approved_subprocessors: []
14340
+ `;
13304
14341
  var STARTER_TASK_TEMPLATE = `---
13305
14342
  tasks:
13306
14343
  - id: "TSK-001-setup"
@@ -13354,8 +14391,8 @@ var STARTER_WORKFLOW_HANDOFF_TEMPLATE = `# Workflow Handoff Template
13354
14391
 
13355
14392
  ### \u{1F504} Workflow Handoff
13356
14393
 
13357
- - **Completed Phase / Activity**: \`[Current phase, e.g. Product Definition / Threat Modeling / Architecture / SDD Implementation]\`
13358
- - **Acting Role**: \`[agent-product-analyst | agent-threat-modeler | agent-system-architect | agent-developer | agent-expert-user | agent-security-auditor | agent-compliance-checker]\`
14394
+ - **Completed Phase / Activity**: \`[Current phase, e.g. Product Definition / Threat Modeling / Privacy Modeling / Architecture / SDD Implementation]\`
14395
+ - **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]\`
13359
14396
  - **Task Autonomy Mode**: \`[HUMAN_REVIEW_PLAN | AMBIGUOUS | HIGH_RISK_MANUAL]\`
13360
14397
  - **Produced Deliverables**:
13361
14398
  - [x] \`[Path or ID of generated artifact, e.g. specs/product/uc-mission.md]\`
@@ -13843,6 +14880,10 @@ function appendAntigravityFiles(dirs, files) {
13843
14880
  { relPath: `.agent/skills/${agent.id}/SKILL.md`, content }
13844
14881
  );
13845
14882
  }
14883
+ for (const skill of LIFECYCLE_SKILL_TEMPLATES) {
14884
+ dirs.push(`.agent/skills/${skill.id}`);
14885
+ files.push({ relPath: `.agent/skills/${skill.id}/SKILL.md`, content: renderAntigravitySkillFile(skill) });
14886
+ }
13846
14887
  }
13847
14888
  function appendCursorFiles(dirs, files) {
13848
14889
  dirs.push(".cursor/rules");
@@ -13938,6 +14979,7 @@ var BASE_DIRECTORIES = [
13938
14979
  "compliance",
13939
14980
  "schemas/product",
13940
14981
  "schemas/security",
14982
+ "schemas/privacy",
13941
14983
  "schemas/compliance",
13942
14984
  "schemas/architecture",
13943
14985
  "schemas/safety",
@@ -13947,6 +14989,7 @@ var BASE_DIRECTORIES = [
13947
14989
  "schemas/ide",
13948
14990
  "templates/product",
13949
14991
  "templates/security",
14992
+ "templates/privacy",
13950
14993
  "templates/compliance",
13951
14994
  "templates/architecture",
13952
14995
  "templates/safety",
@@ -13991,6 +15034,7 @@ function collectStarterFiles(ciProvider, agentFiles = [], archGranularity = "min
13991
15034
  const files = [
13992
15035
  { relPath: "quality-policy.yaml", content: STARTER_QUALITY_POLICY },
13993
15036
  { relPath: "license-policy.yaml", content: STARTER_LICENSE_POLICY },
15037
+ { relPath: "privacy-policy.yaml", content: STARTER_PRIVACY_POLICY },
13994
15038
  ...STARTER_BASE_TEMPLATES,
13995
15039
  ...STARTER_SCHEMAS.map((s) => ({ relPath: s.relPath, content: s.content })),
13996
15040
  ...getCiWorkflowFiles(ciProvider),
@@ -14012,6 +15056,7 @@ var STANDARD_AISDLC_SCRIPTS = {
14012
15056
  check: "aisdlc check",
14013
15057
  "check:fix": "aisdlc check --fix",
14014
15058
  "verify:quality": "aisdlc verify quality",
15059
+ "verify:privacy": "aisdlc verify privacy",
14015
15060
  "verify:all": "aisdlc verify all",
14016
15061
  "change:new": "aisdlc change new"
14017
15062
  };
@@ -14119,11 +15164,14 @@ exports.BRANCH_PATTERNS = BRANCH_PATTERNS;
14119
15164
  exports.DEFAULT_EXCLUDED_PATTERNS = DEFAULT_EXCLUDED_PATTERNS;
14120
15165
  exports.DEFAULT_EXCLUDES = DEFAULT_EXCLUDES;
14121
15166
  exports.DEFAULT_EXTENSIONS = DEFAULT_EXTENSIONS;
15167
+ exports.DEFAULT_PRIVACY_POLICY = DEFAULT_PRIVACY_POLICY;
14122
15168
  exports.DEFAULT_SAST_EXCLUDES = DEFAULT_SAST_EXCLUDES;
14123
15169
  exports.GENERAL_SOURCE_EXTENSIONS = GENERAL_SOURCE_EXTENSIONS;
14124
15170
  exports.KPI_SUMMARY_END_TAG = KPI_SUMMARY_END_TAG;
14125
15171
  exports.KPI_SUMMARY_START_TAG = KPI_SUMMARY_START_TAG;
15172
+ exports.LIFECYCLE_SKILL_TEMPLATES = LIFECYCLE_SKILL_TEMPLATES;
14126
15173
  exports.OpenSpecAdapter = OpenSpecAdapter;
15174
+ exports.PII_SAST_RULES = PII_SAST_RULES;
14127
15175
  exports.PREPARE_COMMIT_MSG_SCRIPT = PREPARE_COMMIT_MSG_SCRIPT;
14128
15176
  exports.PROMPT_INJECTION_SIGNATURES = PROMPT_INJECTION_SIGNATURES;
14129
15177
  exports.PROTECTED_BYPASS_PATTERNS = PROTECTED_BYPASS_PATTERNS;
@@ -14137,6 +15185,10 @@ exports.SCHEMA_SCHEMAS_COMPLIANCE_QUALITY_POLICY_SCHEMA_JSON = SCHEMA_SCHEMAS_CO
14137
15185
  exports.SCHEMA_SCHEMAS_IDE_MCP_CONFIG_SCHEMA_JSON = SCHEMA_SCHEMAS_IDE_MCP_CONFIG_SCHEMA_JSON;
14138
15186
  exports.SCHEMA_SCHEMAS_MANUALS_PRODUCTION_MANUAL_SCHEMA_JSON = SCHEMA_SCHEMAS_MANUALS_PRODUCTION_MANUAL_SCHEMA_JSON;
14139
15187
  exports.SCHEMA_SCHEMAS_MANUALS_USER_MANUAL_SCHEMA_JSON = SCHEMA_SCHEMAS_MANUALS_USER_MANUAL_SCHEMA_JSON;
15188
+ exports.SCHEMA_SCHEMAS_PRIVACY_DATA_ASSET_SCHEMA_JSON = SCHEMA_SCHEMAS_PRIVACY_DATA_ASSET_SCHEMA_JSON;
15189
+ exports.SCHEMA_SCHEMAS_PRIVACY_PRIVACY_POLICY_SCHEMA_JSON = SCHEMA_SCHEMAS_PRIVACY_PRIVACY_POLICY_SCHEMA_JSON;
15190
+ exports.SCHEMA_SCHEMAS_PRIVACY_PRIVACY_REQ_SCHEMA_JSON = SCHEMA_SCHEMAS_PRIVACY_PRIVACY_REQ_SCHEMA_JSON;
15191
+ exports.SCHEMA_SCHEMAS_PRIVACY_PRIVACY_ROPA_SCHEMA_JSON = SCHEMA_SCHEMAS_PRIVACY_PRIVACY_ROPA_SCHEMA_JSON;
14140
15192
  exports.SCHEMA_SCHEMAS_PRODUCT_ACTOR_SCHEMA_JSON = SCHEMA_SCHEMAS_PRODUCT_ACTOR_SCHEMA_JSON;
14141
15193
  exports.SCHEMA_SCHEMAS_PRODUCT_BUSINESS_RULE_SCHEMA_JSON = SCHEMA_SCHEMAS_PRODUCT_BUSINESS_RULE_SCHEMA_JSON;
14142
15194
  exports.SCHEMA_SCHEMAS_PRODUCT_JOURNEY_SCHEMA_JSON = SCHEMA_SCHEMAS_PRODUCT_JOURNEY_SCHEMA_JSON;
@@ -14191,6 +15243,7 @@ exports.STARTER_GITHUB_PULL_REQUEST_TEMPLATE = STARTER_GITHUB_PULL_REQUEST_TEMPL
14191
15243
  exports.STARTER_GITHUB_SDD_INTEGRATE = STARTER_GITHUB_SDD_INTEGRATE;
14192
15244
  exports.STARTER_GITLAB_CI = STARTER_GITLAB_CI;
14193
15245
  exports.STARTER_LICENSE_POLICY = STARTER_LICENSE_POLICY;
15246
+ exports.STARTER_PRIVACY_POLICY = STARTER_PRIVACY_POLICY;
14194
15247
  exports.STARTER_PROCESS_README = STARTER_PROCESS_README;
14195
15248
  exports.STARTER_PULL_REQUEST_TEMPLATE = STARTER_PULL_REQUEST_TEMPLATE;
14196
15249
  exports.STARTER_QUALITY_POLICY = STARTER_QUALITY_POLICY;
@@ -14208,6 +15261,10 @@ exports.STARTER_TEMPLATES_CI__GITLAB_CI_YML = STARTER_TEMPLATES_CI__GITLAB_CI_YM
14208
15261
  exports.STARTER_TEMPLATES_COMPLIANCE_COMMERCIAL_ACQUISITION_REQUEST_TEMPLATE_MD = STARTER_TEMPLATES_COMPLIANCE_COMMERCIAL_ACQUISITION_REQUEST_TEMPLATE_MD;
14209
15262
  exports.STARTER_TEMPLATES_MANUALS_PRODUCTION_MANUAL_TEMPLATE_MD = STARTER_TEMPLATES_MANUALS_PRODUCTION_MANUAL_TEMPLATE_MD;
14210
15263
  exports.STARTER_TEMPLATES_MANUALS_USER_MANUAL_TEMPLATE_MD = STARTER_TEMPLATES_MANUALS_USER_MANUAL_TEMPLATE_MD;
15264
+ exports.STARTER_TEMPLATES_PRIVACY_DATA_ASSET_TEMPLATE_MD = STARTER_TEMPLATES_PRIVACY_DATA_ASSET_TEMPLATE_MD;
15265
+ exports.STARTER_TEMPLATES_PRIVACY_DPIA_REQUEST_TEMPLATE_MD = STARTER_TEMPLATES_PRIVACY_DPIA_REQUEST_TEMPLATE_MD;
15266
+ exports.STARTER_TEMPLATES_PRIVACY_PRIVACY_REQ_TEMPLATE_MD = STARTER_TEMPLATES_PRIVACY_PRIVACY_REQ_TEMPLATE_MD;
15267
+ exports.STARTER_TEMPLATES_PRIVACY_PRIVACY_ROPA_TEMPLATE_MD = STARTER_TEMPLATES_PRIVACY_PRIVACY_ROPA_TEMPLATE_MD;
14211
15268
  exports.STARTER_TEMPLATES_PRODUCT_ACTOR_TEMPLATE_MD = STARTER_TEMPLATES_PRODUCT_ACTOR_TEMPLATE_MD;
14212
15269
  exports.STARTER_TEMPLATES_PRODUCT_BUSINESS_RULE_TEMPLATE_MD = STARTER_TEMPLATES_PRODUCT_BUSINESS_RULE_TEMPLATE_MD;
14213
15270
  exports.STARTER_TEMPLATES_PRODUCT_JOURNEY_TEMPLATE_MD = STARTER_TEMPLATES_PRODUCT_JOURNEY_TEMPLATE_MD;
@@ -14293,7 +15350,9 @@ exports.generateDuplicatesReportMarkdown = generateDuplicatesReportMarkdown;
14293
15350
  exports.generateGovernanceReportMarkdown = generateGovernanceReportMarkdown;
14294
15351
  exports.generateLicenseReportMarkdown = generateLicenseReportMarkdown;
14295
15352
  exports.generatePdacReportMarkdown = generatePdacReportMarkdown;
15353
+ exports.generatePrivacyReportMarkdown = generatePrivacyReportMarkdown;
14296
15354
  exports.generateQualityReport = generateQualityReport;
15355
+ exports.generateRopaInventoryMarkdown = generateRopaInventoryMarkdown;
14297
15356
  exports.generateSastReportMarkdown = generateSastReportMarkdown;
14298
15357
  exports.generateSecretsReportMarkdown = generateSecretsReportMarkdown;
14299
15358
  exports.generateTestingCoverageReportMarkdown = generateTestingCoverageReportMarkdown;
@@ -14316,6 +15375,7 @@ exports.isPlaceholderOrIgnored = isPlaceholderOrIgnored;
14316
15375
  exports.isRequirementArtifact = isRequirementArtifact2;
14317
15376
  exports.isSemgrepInstalled = isSemgrepInstalled;
14318
15377
  exports.isToolAvailable = isToolAvailable;
15378
+ exports.loadPrivacyPolicy = loadPrivacyPolicy;
14319
15379
  exports.loadProductHandoffSidecar = loadProductHandoffSidecar;
14320
15380
  exports.locateTaskInActiveChanges = locateTaskInActiveChanges;
14321
15381
  exports.maskSecret = maskSecret;
@@ -14335,6 +15395,7 @@ exports.processPackageDir = processPackageDir;
14335
15395
  exports.readCodeCoverageSummary = readCodeCoverageSummary;
14336
15396
  exports.readPackageJson = readPackageJson;
14337
15397
  exports.renderAntigravityAgentFile = renderAntigravityAgentFile;
15398
+ exports.renderAntigravitySkillFile = renderAntigravitySkillFile;
14338
15399
  exports.renderAutonomyModeSection = renderAutonomyModeSection;
14339
15400
  exports.renderClaudeAgentFile = renderClaudeAgentFile;
14340
15401
  exports.renderCopilotAgentFile = renderCopilotAgentFile;
@@ -14356,6 +15417,7 @@ exports.scaffoldSddChange = scaffoldSddChange;
14356
15417
  exports.scanAllProductHandoffs = scanAllProductHandoffs;
14357
15418
  exports.scanAllTestArtifacts = scanAllTestArtifacts;
14358
15419
  exports.scanContentForSecrets = scanContentForSecrets;
15420
+ exports.scanFileForPrivacyViolations = scanFileForPrivacyViolations;
14359
15421
  exports.scanFileForSast = scanFileForSast;
14360
15422
  exports.scanInstalledLicenses = scanInstalledLicenses;
14361
15423
  exports.scanManualsInWorkspace = scanManualsInWorkspace;
@@ -14375,6 +15437,7 @@ exports.verifyArtifactsSchemas = verifyArtifactsSchemas;
14375
15437
  exports.verifyLicenses = verifyLicenses;
14376
15438
  exports.verifyManuals = verifyManuals;
14377
15439
  exports.verifyPdacGraph = verifyPdacGraph;
15440
+ exports.verifyPrivacy = verifyPrivacy;
14378
15441
  exports.verifyProgressiveFriction = verifyProgressiveFriction;
14379
15442
  exports.verifyQualityGate = verifyQualityGate;
14380
15443
  exports.verifySast = verifySast;