great-cto 2.37.1 → 2.39.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.
@@ -959,6 +959,24 @@ const RULES = [
959
959
  return `gov-public detected (${bits.join(", ") || "government domain signals"}) — FedRAMP/NIST 800-53/Section 508 gates required`;
960
960
  },
961
961
  },
962
+ // ── defense-govcon (US defense contractor — CMMC / NIST 800-171 / DFARS) ──
963
+ // Distinct from gov-public: the buyer is DoD and the obligation is protecting
964
+ // Controlled Unclassified Information (CUI) under DFARS 252.204-7012 + CMMC 2.0,
965
+ // with export controls (ITAR/EAR) and supply-chain bans (Section 889).
966
+ {
967
+ archetype: "defense-govcon",
968
+ score: (d) => {
969
+ let s = 0;
970
+ const kws = d.readmeKeywords;
971
+ // detect.ts "defense" bucket fires on cmmc / nist 800-171 / dfars / cui / itar / section 889.
972
+ // These are unambiguous DoD-contractor signals — more specific than generic
973
+ // gov-public (fedramp/government), so weight high enough to outrank it.
974
+ if (kws.includes("defense"))
975
+ s += 12;
976
+ return s;
977
+ },
978
+ reason: (_d) => "US defense-contractor signals (CMMC / NIST 800-171 / DFARS 252.204-7012 / CUI / ITAR / Section 889) — CMMC assessment + CUI protection gates required",
979
+ },
962
980
  // ── insurance (insurtech — NAIC / Solvency II / actuarial / claims fraud) ──
963
981
  // Fintech-adjacent but distinct: multi-state filings, anti-discrimination
964
982
  // pricing, actuarial model auditability, claims fraud detection.
@@ -1024,7 +1042,7 @@ const RULES = [
1024
1042
  // higher in this list (more specific / domain-bound first).
1025
1043
  const TIE_BREAK_PRIORITY = [
1026
1044
  "browser-extension", "iot-embedded", "web3", "game",
1027
- "agent-product", "fintech", "insurance", "healthcare", "edtech", "gov-public", "marketplace",
1045
+ "agent-product", "fintech", "insurance", "healthcare", "edtech", "defense-govcon", "gov-public", "marketplace",
1028
1046
  "mlops", "streaming",
1029
1047
  "commerce", "enterprise-saas", "ai-system", "devtools",
1030
1048
  "data-platform", "cms", "infra", "mobile-app",
@@ -1242,6 +1260,17 @@ export function suggestCompliance(d, archetype) {
1242
1260
  c.add("anti-discrimination-pricing");
1243
1261
  c.add("actuarial-asops");
1244
1262
  c.add("state-doi"); // Department of Insurance per US state
1263
+ c.add("naic-ai-model-bulletin");
1264
+ c.add("colorado-sb-21-169"); // US insurance-AI rules
1265
+ }
1266
+ if (archetype === "defense-govcon") {
1267
+ c.add("cmmc-2.0");
1268
+ c.add("nist-800-171");
1269
+ c.add("dfars-252.204-7012");
1270
+ c.add("itar");
1271
+ c.add("ear");
1272
+ c.add("section-889");
1273
+ c.add("fedramp");
1245
1274
  }
1246
1275
  // ── stack-derived (cross-archetype) ──────────────
1247
1276
  if (d.stack.includes("stripe") || d.stack.includes("braintree") ||
@@ -1301,6 +1330,7 @@ export const REVIEWERS_BY_ARCHETYPE = {
1301
1330
  "edtech": ["edtech-reviewer"],
1302
1331
  "gov-public": ["gov-reviewer", "security-officer"],
1303
1332
  "insurance": ["insurance-reviewer", "regulated-reviewer"],
1333
+ "defense-govcon": ["cmmc-reviewer", "gov-reviewer", "security-officer"],
1304
1334
  "greenfield": [],
1305
1335
  };
1306
1336
  /**
@@ -1336,6 +1366,7 @@ export const GATES_BY_ARCHETYPE = {
1336
1366
  "edtech": ["plan", "qa", "edtech-review", "security", "ship", "compliance"],
1337
1367
  "gov-public": ["plan", "qa", "gov-review", "security", "ship", "compliance"],
1338
1368
  "insurance": ["plan", "qa", "insurance-review", "security", "ship", "compliance"],
1369
+ "defense-govcon": ["plan", "qa", "cmmc-assessment", "security", "ship", "compliance"],
1339
1370
  "greenfield": ["plan"],
1340
1371
  };
1341
1372
  /**
package/dist/detect.js CHANGED
@@ -1113,6 +1113,10 @@ function mineReadmeKeywords(dir) {
1113
1113
  "sarbanes", "regulated entity", "regulated industry",
1114
1114
  "compliance automation", "audit trail", "iso 27001",
1115
1115
  "pci compliance", "soc 2 type", "compliance officer"],
1116
+ "defense": ["cmmc", "nist 800-171", "nist sp 800-171", "dfars", "252.204-7012",
1117
+ "controlled unclassified", "cui ", " cui", "itar", "ear99",
1118
+ "section 889", "defense contractor", "dod contract", "govcon",
1119
+ "facility clearance", "fcl ", "sprs", "cui marking"],
1116
1120
  };
1117
1121
  for (const [bucket, terms] of Object.entries(buckets)) {
1118
1122
  if (terms.some((t) => text.includes(t)))
@@ -1176,6 +1180,24 @@ function mineReadmeKeywords(dir) {
1176
1180
  "supplement recommendation", "supplement ai", "diet ai", "meal plan ai",
1177
1181
  "macro ai", "physician review", "physician hitl", "doctor in the loop",
1178
1182
  "clinical review workflow", "remote patient monitoring", "rpm", "teleconsultation",
1183
+ // US-market packs — keep in sync with packs.ts SIGNALS.keywords
1184
+ // sec-cyber-pack
1185
+ "public company", "publicly traded", "10-k", "10k", "8-k", "8k", "s-1", "ipo",
1186
+ "sec filing", "investor relations", "material incident", "materiality",
1187
+ "incident response", "incident disclosure", "breach notification", "siem",
1188
+ "security operations", "circia", "cisa reporting",
1189
+ // adtech-privacy-pack
1190
+ "meta pixel", "facebook pixel", "fbevents", "conversions api", "capi",
1191
+ "google analytics", "ga4", "google tag manager", "tiktok pixel", "ad pixel",
1192
+ "tracking pixel", "session replay", "session recording", "heatmap",
1193
+ "fullstory", "hotjar", "logrocket", "retargeting", "behavioral advertising",
1194
+ "vppa", "cipa", "wiretap", "my health my data", "mhmda", "consumer health data",
1195
+ // us-ai-pack
1196
+ "nist ai rmf", "ai rmf", "ai risk management", "colorado ai act", "sb 205",
1197
+ "algorithmic discrimination", "consequential decision", "high-risk ai",
1198
+ "automated decision", "ai impact assessment", "utah ai", "traiga",
1199
+ "ai transparency", "ab 2013", "sb 942", "training data transparency",
1200
+ "ai disclosure", "generative ai disclosure", "deepfake disclosure", "ai governance",
1179
1201
  ];
1180
1202
  for (const term of packTerms) {
1181
1203
  if (text.includes(term))
package/dist/flow.js CHANGED
@@ -47,6 +47,7 @@ const GATE_LABEL = {
47
47
  "edtech-review": "gate:edtech-review",
48
48
  "gov-review": "gate:gov-review",
49
49
  "insurance-review": "gate:insurance-review",
50
+ "cmmc-assessment": "gate:cmmc-assessment",
50
51
  };
51
52
  // Cost (low, high) per feature cycle by archetype tier
52
53
  const ARCHETYPE_COST = {
package/dist/packs.js CHANGED
@@ -21,6 +21,9 @@ const PACK_REVIEWERS = {
21
21
  "climate-pack": ["climate-mrv-reviewer", "biosecurity-reviewer"],
22
22
  "drug-discovery-pack": ["drug-discovery-ml-reviewer", "glp-glab-reviewer", "lab-automation-reviewer"],
23
23
  "digital-health-pack": ["digital-health-reviewer", "ai-clinical-reviewer", "healthcare-reviewer"],
24
+ "sec-cyber-pack": ["sec-cyber-disclosure-reviewer"],
25
+ "adtech-privacy-pack": ["adtech-privacy-reviewer", "us-privacy-reviewer"],
26
+ "us-ai-pack": ["us-ai-reviewer"],
24
27
  };
25
28
  const PACK_GATES = {
26
29
  "voice-pack": ["gate:voice-compliance"],
@@ -34,6 +37,9 @@ const PACK_GATES = {
34
37
  "climate-pack": ["gate:mrv-methodology", "gate:durc-signoff", "gate:open-weights-release"],
35
38
  "drug-discovery-pack": ["gate:model-card-signoff", "gate:csv-validation", "gate:iq-oq-pq"],
36
39
  "digital-health-pack": ["gate:wellness-vs-samd", "gate:hitl-design", "gate:wearable-api-access", "gate:supplement-safety", "gate:mental-health-protocol"],
40
+ "sec-cyber-pack": ["gate:cyber-disclosure-readiness"],
41
+ "adtech-privacy-pack": ["gate:tracking-consent"],
42
+ "us-ai-pack": ["gate:ai-governance"],
37
43
  };
38
44
  // Trigger signals — stack tokens OR README keywords.
39
45
  const SIGNALS = {
@@ -106,6 +112,35 @@ const SIGNALS = {
106
112
  "remote patient monitoring", "rpm", "teleconsultation",
107
113
  ],
108
114
  },
115
+ "sec-cyber-pack": {
116
+ stack: ["pagerduty", "opsgenie", "statuspage", "splunk", "datadog-siem", "sentinel", "wazuh"],
117
+ keywords: [
118
+ "public company", "publicly traded", "10-k", "10k", "8-k", "8k", "s-1", "ipo",
119
+ "sec filing", "investor relations", "material incident", "materiality",
120
+ "incident response", "incident disclosure", "breach notification", "siem",
121
+ "security operations", "soc 2 incident", "circia", "cisa reporting",
122
+ ],
123
+ },
124
+ "adtech-privacy-pack": {
125
+ stack: ["fbevents", "facebook-pixel", "meta-pixel", "gtag", "ga4", "google-tag-manager", "gtm", "tiktok-pixel", "fullstory", "hotjar", "logrocket", "mouseflow", "smartlook"],
126
+ keywords: [
127
+ "meta pixel", "facebook pixel", "fbevents", "conversions api", "capi",
128
+ "google analytics", "ga4", "google tag manager", "tiktok pixel", "ad pixel",
129
+ "tracking pixel", "session replay", "session recording", "heatmap",
130
+ "fullstory", "hotjar", "logrocket", "retargeting", "behavioral advertising",
131
+ "vppa", "cipa", "wiretap", "my health my data", "mhmda", "consumer health data",
132
+ ],
133
+ },
134
+ "us-ai-pack": {
135
+ stack: [],
136
+ keywords: [
137
+ "nist ai rmf", "ai rmf", "ai risk management", "colorado ai act", "sb 205",
138
+ "algorithmic discrimination", "consequential decision", "high-risk ai",
139
+ "automated decision", "ai impact assessment", "utah ai", "traiga",
140
+ "ai transparency", "ab 2013", "sb 942", "training data transparency",
141
+ "ai disclosure", "generative ai disclosure", "deepfake disclosure", "ai governance",
142
+ ],
143
+ },
109
144
  };
110
145
  /** Return packs whose signals match the detection result. Deterministic + sorted. */
111
146
  export function suggestPacks(d) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "great-cto",
3
- "version": "2.37.1",
3
+ "version": "2.39.0",
4
4
  "description": "One command install for the great_cto Claude Code plugin. Auto-detects your stack, picks the right archetype, bootstraps PROJECT.md.",
5
5
  "keywords": [
6
6
  "claude-code",