great-cto 2.82.1 → 2.82.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "great_cto",
|
|
3
3
|
"id": "great_cto",
|
|
4
4
|
"description": "Engineering process for solo founders and teams up to 50 engineers. Agents do architecture, code review, QA, and security. You make two decisions per feature.",
|
|
5
|
-
"version": "2.82.
|
|
5
|
+
"version": "2.82.2",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Great CTO",
|
|
8
8
|
"url": "https://github.com/avelikiy/great_cto"
|
|
@@ -310,6 +310,22 @@ const RULES = [
|
|
|
310
310
|
s += 9;
|
|
311
311
|
if (d.readmeKeywords.includes("fintech"))
|
|
312
312
|
s += 2;
|
|
313
|
+
// tax-prep signals — keep in sync with detect.ts tax-pack terms.
|
|
314
|
+
// Unambiguous regulatory/professional-standard terms get a strong
|
|
315
|
+
// bump; softer generic terms (irs/e-file/tax-prep) get a light one
|
|
316
|
+
// since they can appear in unrelated fixtures.
|
|
317
|
+
const kws = d.readmeKeywords;
|
|
318
|
+
const taxStrong = ["ptin", "circular-230", "form-8879", "mef",
|
|
319
|
+
"pub-4557", "section-7216"];
|
|
320
|
+
const taxSoft = ["irs", "e-file", "tax-prep", "tax-preparation"];
|
|
321
|
+
const taxStrongCount = taxStrong.filter((k) => kws.includes(k)).length;
|
|
322
|
+
const taxSoftCount = taxSoft.filter((k) => kws.includes(k)).length;
|
|
323
|
+
if (taxStrongCount >= 2)
|
|
324
|
+
s += 9;
|
|
325
|
+
else if (taxStrongCount === 1)
|
|
326
|
+
s += 6;
|
|
327
|
+
if (taxSoftCount > 0)
|
|
328
|
+
s += 1;
|
|
313
329
|
return s;
|
|
314
330
|
},
|
|
315
331
|
reason: (d) => {
|
|
@@ -330,6 +346,15 @@ const RULES = [
|
|
|
330
346
|
bits.push("Flutterwave (Africa)");
|
|
331
347
|
if (d.stack.includes("mercadopago"))
|
|
332
348
|
bits.push("MercadoPago (LATAM)");
|
|
349
|
+
const kws = d.readmeKeywords;
|
|
350
|
+
if (kws.includes("ptin"))
|
|
351
|
+
bits.push("PTIN mention");
|
|
352
|
+
if (kws.includes("circular-230"))
|
|
353
|
+
bits.push("Circular 230 mention");
|
|
354
|
+
if (kws.includes("form-8879"))
|
|
355
|
+
bits.push("Form 8879 mention");
|
|
356
|
+
if (kws.includes("mef"))
|
|
357
|
+
bits.push("MeF mention");
|
|
333
358
|
return `fintech integration: ${bits.join(", ")} — SOX, PCI, KYC/AML compliance gates`;
|
|
334
359
|
},
|
|
335
360
|
},
|
|
@@ -394,6 +419,34 @@ const RULES = [
|
|
|
394
419
|
s += 3;
|
|
395
420
|
if (d.readmeKeywords.includes("sso") || d.readmeKeywords.includes("saml"))
|
|
396
421
|
s += 3;
|
|
422
|
+
// procurement signals — keep in sync with detect.ts procurement-pack terms.
|
|
423
|
+
// "three-way-match"/"punchout"/"ofac" are unambiguous procurement/source-
|
|
424
|
+
// to-pay terms; "rfp"/"sourcing" are softer and get a lighter bump.
|
|
425
|
+
const kws = d.readmeKeywords;
|
|
426
|
+
const procurementStrong = ["purchase-order", "three-way-match", "punchout",
|
|
427
|
+
"cxml", "ofac", "requisition"];
|
|
428
|
+
const procurementSoft = ["rfp", "sourcing", "procurement", "spend-management"];
|
|
429
|
+
const procurementStrongCount = procurementStrong.filter((k) => kws.includes(k)).length;
|
|
430
|
+
const procurementSoftCount = procurementSoft.filter((k) => kws.includes(k)).length;
|
|
431
|
+
if (procurementStrongCount >= 2)
|
|
432
|
+
s += 9;
|
|
433
|
+
else if (procurementStrongCount === 1)
|
|
434
|
+
s += 6;
|
|
435
|
+
if (procurementSoftCount > 0)
|
|
436
|
+
s += 1;
|
|
437
|
+
// MSP signals — keep in sync with detect.ts msp-pack terms.
|
|
438
|
+
// "rmm"/"psa"/"credential-vault"/"msp" are unambiguous MSP terms;
|
|
439
|
+
// "msa"/"sla"/"managed-service(s)" are softer, lighter bump.
|
|
440
|
+
const mspStrong = ["rmm", "psa", "credential-vault", "msp"];
|
|
441
|
+
const mspSoft = ["msa", "sla", "managed-service", "managed-services"];
|
|
442
|
+
const mspStrongCount = mspStrong.filter((k) => kws.includes(k)).length;
|
|
443
|
+
const mspSoftCount = mspSoft.filter((k) => kws.includes(k)).length;
|
|
444
|
+
if (mspStrongCount >= 2)
|
|
445
|
+
s += 9;
|
|
446
|
+
else if (mspStrongCount === 1)
|
|
447
|
+
s += 6;
|
|
448
|
+
if (mspSoftCount > 0)
|
|
449
|
+
s += 1;
|
|
397
450
|
// Stripe billing + multi-tenant signals = SaaS
|
|
398
451
|
if (s > 0 && d.stack.includes("stripe"))
|
|
399
452
|
s += 1;
|
|
@@ -411,6 +464,15 @@ const RULES = [
|
|
|
411
464
|
bits.push("SAML lib");
|
|
412
465
|
if (d.stack.includes("scim"))
|
|
413
466
|
bits.push("SCIM");
|
|
467
|
+
const kws = d.readmeKeywords;
|
|
468
|
+
if (kws.includes("three-way-match"))
|
|
469
|
+
bits.push("three-way match mention");
|
|
470
|
+
if (kws.includes("punchout"))
|
|
471
|
+
bits.push("punchout mention");
|
|
472
|
+
if (kws.includes("rmm"))
|
|
473
|
+
bits.push("RMM mention");
|
|
474
|
+
if (kws.includes("psa"))
|
|
475
|
+
bits.push("PSA mention");
|
|
414
476
|
return `enterprise B2B SaaS (${bits.join(", ")}) — multi-tenant isolation + SSO + audit log + SOC2 mandatory`;
|
|
415
477
|
},
|
|
416
478
|
},
|
package/dist/archetypes.js
CHANGED
|
@@ -310,6 +310,22 @@ const RULES = [
|
|
|
310
310
|
s += 9;
|
|
311
311
|
if (d.readmeKeywords.includes("fintech"))
|
|
312
312
|
s += 2;
|
|
313
|
+
// tax-prep signals — keep in sync with detect.ts tax-pack terms.
|
|
314
|
+
// Unambiguous regulatory/professional-standard terms get a strong
|
|
315
|
+
// bump; softer generic terms (irs/e-file/tax-prep) get a light one
|
|
316
|
+
// since they can appear in unrelated fixtures.
|
|
317
|
+
const kws = d.readmeKeywords;
|
|
318
|
+
const taxStrong = ["ptin", "circular-230", "form-8879", "mef",
|
|
319
|
+
"pub-4557", "section-7216"];
|
|
320
|
+
const taxSoft = ["irs", "e-file", "tax-prep", "tax-preparation"];
|
|
321
|
+
const taxStrongCount = taxStrong.filter((k) => kws.includes(k)).length;
|
|
322
|
+
const taxSoftCount = taxSoft.filter((k) => kws.includes(k)).length;
|
|
323
|
+
if (taxStrongCount >= 2)
|
|
324
|
+
s += 9;
|
|
325
|
+
else if (taxStrongCount === 1)
|
|
326
|
+
s += 6;
|
|
327
|
+
if (taxSoftCount > 0)
|
|
328
|
+
s += 1;
|
|
313
329
|
return s;
|
|
314
330
|
},
|
|
315
331
|
reason: (d) => {
|
|
@@ -330,6 +346,15 @@ const RULES = [
|
|
|
330
346
|
bits.push("Flutterwave (Africa)");
|
|
331
347
|
if (d.stack.includes("mercadopago"))
|
|
332
348
|
bits.push("MercadoPago (LATAM)");
|
|
349
|
+
const kws = d.readmeKeywords;
|
|
350
|
+
if (kws.includes("ptin"))
|
|
351
|
+
bits.push("PTIN mention");
|
|
352
|
+
if (kws.includes("circular-230"))
|
|
353
|
+
bits.push("Circular 230 mention");
|
|
354
|
+
if (kws.includes("form-8879"))
|
|
355
|
+
bits.push("Form 8879 mention");
|
|
356
|
+
if (kws.includes("mef"))
|
|
357
|
+
bits.push("MeF mention");
|
|
333
358
|
return `fintech integration: ${bits.join(", ")} — SOX, PCI, KYC/AML compliance gates`;
|
|
334
359
|
},
|
|
335
360
|
},
|
|
@@ -394,6 +419,34 @@ const RULES = [
|
|
|
394
419
|
s += 3;
|
|
395
420
|
if (d.readmeKeywords.includes("sso") || d.readmeKeywords.includes("saml"))
|
|
396
421
|
s += 3;
|
|
422
|
+
// procurement signals — keep in sync with detect.ts procurement-pack terms.
|
|
423
|
+
// "three-way-match"/"punchout"/"ofac" are unambiguous procurement/source-
|
|
424
|
+
// to-pay terms; "rfp"/"sourcing" are softer and get a lighter bump.
|
|
425
|
+
const kws = d.readmeKeywords;
|
|
426
|
+
const procurementStrong = ["purchase-order", "three-way-match", "punchout",
|
|
427
|
+
"cxml", "ofac", "requisition"];
|
|
428
|
+
const procurementSoft = ["rfp", "sourcing", "procurement", "spend-management"];
|
|
429
|
+
const procurementStrongCount = procurementStrong.filter((k) => kws.includes(k)).length;
|
|
430
|
+
const procurementSoftCount = procurementSoft.filter((k) => kws.includes(k)).length;
|
|
431
|
+
if (procurementStrongCount >= 2)
|
|
432
|
+
s += 9;
|
|
433
|
+
else if (procurementStrongCount === 1)
|
|
434
|
+
s += 6;
|
|
435
|
+
if (procurementSoftCount > 0)
|
|
436
|
+
s += 1;
|
|
437
|
+
// MSP signals — keep in sync with detect.ts msp-pack terms.
|
|
438
|
+
// "rmm"/"psa"/"credential-vault"/"msp" are unambiguous MSP terms;
|
|
439
|
+
// "msa"/"sla"/"managed-service(s)" are softer, lighter bump.
|
|
440
|
+
const mspStrong = ["rmm", "psa", "credential-vault", "msp"];
|
|
441
|
+
const mspSoft = ["msa", "sla", "managed-service", "managed-services"];
|
|
442
|
+
const mspStrongCount = mspStrong.filter((k) => kws.includes(k)).length;
|
|
443
|
+
const mspSoftCount = mspSoft.filter((k) => kws.includes(k)).length;
|
|
444
|
+
if (mspStrongCount >= 2)
|
|
445
|
+
s += 9;
|
|
446
|
+
else if (mspStrongCount === 1)
|
|
447
|
+
s += 6;
|
|
448
|
+
if (mspSoftCount > 0)
|
|
449
|
+
s += 1;
|
|
397
450
|
// Stripe billing + multi-tenant signals = SaaS
|
|
398
451
|
if (s > 0 && d.stack.includes("stripe"))
|
|
399
452
|
s += 1;
|
|
@@ -411,6 +464,15 @@ const RULES = [
|
|
|
411
464
|
bits.push("SAML lib");
|
|
412
465
|
if (d.stack.includes("scim"))
|
|
413
466
|
bits.push("SCIM");
|
|
467
|
+
const kws = d.readmeKeywords;
|
|
468
|
+
if (kws.includes("three-way-match"))
|
|
469
|
+
bits.push("three-way match mention");
|
|
470
|
+
if (kws.includes("punchout"))
|
|
471
|
+
bits.push("punchout mention");
|
|
472
|
+
if (kws.includes("rmm"))
|
|
473
|
+
bits.push("RMM mention");
|
|
474
|
+
if (kws.includes("psa"))
|
|
475
|
+
bits.push("PSA mention");
|
|
414
476
|
return `enterprise B2B SaaS (${bits.join(", ")}) — multi-tenant isolation + SSO + audit log + SOC2 mandatory`;
|
|
415
477
|
},
|
|
416
478
|
},
|
package/dist/detect.js
CHANGED
|
@@ -1158,6 +1158,19 @@ function mineReadmeKeywords(dir) {
|
|
|
1158
1158
|
"policy", "underwriting", "premium", "acord", "naic", "actuarial",
|
|
1159
1159
|
"reinsurance", "solvency", "carrier", "mga", "mgu", "tpa", "insurance",
|
|
1160
1160
|
"insurtech", "insurer", "insured", "deductible", "coverage", "bordereau",
|
|
1161
|
+
// tax-pack — keep in sync with archetypes.ts fintech score()
|
|
1162
|
+
// "irs"/"e-file"/"tax-prep" deliberately soft signals: generic enough
|
|
1163
|
+
// to appear in unrelated fixtures, so weighted low in the scorer.
|
|
1164
|
+
"ptin", "circular-230", "form-8879", "mef", "pub-4557", "section-7216",
|
|
1165
|
+
"e-file", "tax-prep", "tax-preparation", "irs",
|
|
1166
|
+
// procurement-pack — keep in sync with archetypes.ts enterprise-saas score()
|
|
1167
|
+
// "rfp"/"sourcing" deliberately soft: generic terms, weighted low.
|
|
1168
|
+
"purchase-order", "three-way-match", "rfp", "ofac", "requisition",
|
|
1169
|
+
"punchout", "cxml", "sourcing", "procurement", "spend-management",
|
|
1170
|
+
// msp-pack — keep in sync with archetypes.ts enterprise-saas score()
|
|
1171
|
+
// "sla" deliberately soft: generic term, weighted low.
|
|
1172
|
+
"msa", "sla", "rmm", "psa", "multi-tenant", "managed-service",
|
|
1173
|
+
"credential-vault", "msp", "managed-services",
|
|
1161
1174
|
];
|
|
1162
1175
|
for (const term of packTerms) {
|
|
1163
1176
|
if (text.includes(term))
|
package/package.json
CHANGED