@cassiomc1/forgeloop 2.0.0-rc.5 → 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/CONTRIBUTING.md +3 -1
- package/DOCS_INDEX.md +2 -0
- package/ENG/accessibility-eng.md +6 -6
- package/ENG/clean-code-eng.md +2 -2
- package/ENG/design-code-eng.md +13 -13
- package/ENG/documentation-quality-eng.md +10 -2
- package/ENG/flutter-development-eng.md +38 -59
- package/ENG/games-code-design-web-eng.md +2 -2
- package/ENG/perf-code-eng.md +3 -3
- package/ENG/php-development-eng.md +2 -2
- package/ENG/premium-sites-studio-eng.md +9 -2
- package/ENG/python-development-eng.md +7 -1
- package/ENG/rust-development-eng.md +22 -32
- package/ENG/sec-code-eng.md +19 -3
- package/ENG/taste-frontend-eng.md +108 -1
- package/ENG/test-code-eng.md +2 -2
- package/GUIDE_ROUTER.md +18 -4
- package/README.md +15 -13
- package/THIRD_PARTY_NOTICES.md +59 -6
- package/docs/AGENT_PROTOCOL_SUMMARY.md +1 -1
- package/docs/AGENT_SKILL.md +16 -0
- package/docs/DOCUMENTATION_GUIDE.md +6 -0
- package/docs/GUIDE_MAINTENANCE.md +106 -0
- package/docs/PACKAGE_CONTENTS.md +18 -0
- package/docs/RELEASE_CHECKLIST.md +41 -29
- package/docs/REVENUE_CENTRIC_DESIGN.md +69 -0
- package/docs/SECURITY_AUDIT_SKILL.md +131 -0
- package/docs/SECURITY_REVIEW.md +6 -0
- package/docs/STABLE_2_ACCEPTANCE.md +80 -0
- package/docs/TROUBLESHOOTING.md +12 -0
- package/docs/documentation-manifest.json +244 -0
- package/package.json +12 -3
- package/scripts/generate-forgeloop-skill.mjs +8 -0
- package/scripts/verify-revenue-design-skill.mjs +37 -0
- package/scripts/verify-security-audit-skill.mjs +68 -0
- package/skills/forgeloop/SKILL.md +8 -0
- package/skills/forgeloop/references/revenue-centric-design/LICENSE +30 -0
- package/skills/forgeloop/references/revenue-centric-design/PIN.json +14 -0
- package/skills/forgeloop/references/revenue-centric-design/SKILL.md +64 -0
- package/skills/forgeloop/references/revenue-centric-design/references/playbook.md +36 -0
- package/skills/security-audit/AI-AND-LLM.md +83 -0
- package/skills/security-audit/ATTACK-CLASSES.md +130 -0
- package/skills/security-audit/CLIENT-SIDE.md +83 -0
- package/skills/security-audit/CLOUD-AND-DEPLOYMENT.md +86 -0
- package/skills/security-audit/DATA-ISOLATION-AND-LIFECYCLE.md +84 -0
- package/skills/security-audit/DESKTOP-MOBILE-AND-LOCAL-IPC.md +89 -0
- package/skills/security-audit/HUNTING.md +251 -0
- package/skills/security-audit/LICENSE +21 -0
- package/skills/security-audit/MEMORY-SAFETY-AND-BINARY.md +101 -0
- package/skills/security-audit/PIN.json +30 -0
- package/skills/security-audit/PROTOCOLS-RPC-AND-MESSAGING.md +81 -0
- package/skills/security-audit/RECONNAISSANCE.md +156 -0
- package/skills/security-audit/RESOURCE-EXHAUSTION-AND-AVAILABILITY.md +78 -0
- package/skills/security-audit/SKILL.md +192 -0
- package/skills/security-audit/SUPPLY-CHAIN-AND-RELEASE.md +73 -0
- package/skills/security-audit/VALIDATION-AND-REPORTING.md +186 -0
- package/skills/security-audit/WEB-PROTOCOL-AND-AUTH.md +105 -0
- package/skills/security-audit/report-schema.json +461 -0
- package/skills/security-audit/validate-coverage-ledger.cjs +872 -0
- package/skills/security-audit/validate-coverage-ledger.test.cjs +740 -0
- package/skills/security-audit/validate-findings.cjs +773 -0
- package/skills/security-audit/validate-findings.test.cjs +652 -0
- package/src/core/completion-artifacts.js +4 -7
- package/src/core/diagnosis.js +3 -5
- package/src/core/diagnostic-record.js +4 -4
- package/src/core/next-action-recovery-phases.js +3 -0
- package/src/core/next-action-review-correction.js +26 -0
- package/src/core/next-action-review-phase.js +11 -10
- package/src/core/reconcile-closure.js +5 -0
- package/src/core/review-correction.js +51 -0
- package/src/storage/capabilities.js +1 -1
|
@@ -1416,6 +1416,250 @@
|
|
|
1416
1416
|
],
|
|
1417
1417
|
"canonicalFor": [],
|
|
1418
1418
|
"packaged": true
|
|
1419
|
+
},
|
|
1420
|
+
{
|
|
1421
|
+
"path": "docs/SECURITY_AUDIT_SKILL.md",
|
|
1422
|
+
"id": "security-audit-skill",
|
|
1423
|
+
"class": "guide",
|
|
1424
|
+
"audience": [
|
|
1425
|
+
"user",
|
|
1426
|
+
"harness",
|
|
1427
|
+
"maintainer"
|
|
1428
|
+
],
|
|
1429
|
+
"canonicalFor": [
|
|
1430
|
+
"security-audit-companion"
|
|
1431
|
+
],
|
|
1432
|
+
"packaged": true
|
|
1433
|
+
},
|
|
1434
|
+
{
|
|
1435
|
+
"path": "skills/security-audit/AI-AND-LLM.md",
|
|
1436
|
+
"id": "cloudflare-audit-ai-and-llm",
|
|
1437
|
+
"class": "reference",
|
|
1438
|
+
"audience": [
|
|
1439
|
+
"harness",
|
|
1440
|
+
"maintainer"
|
|
1441
|
+
],
|
|
1442
|
+
"canonicalFor": [],
|
|
1443
|
+
"packaged": true
|
|
1444
|
+
},
|
|
1445
|
+
{
|
|
1446
|
+
"path": "skills/security-audit/ATTACK-CLASSES.md",
|
|
1447
|
+
"id": "cloudflare-audit-attack-classes",
|
|
1448
|
+
"class": "reference",
|
|
1449
|
+
"audience": [
|
|
1450
|
+
"harness",
|
|
1451
|
+
"maintainer"
|
|
1452
|
+
],
|
|
1453
|
+
"canonicalFor": [],
|
|
1454
|
+
"packaged": true
|
|
1455
|
+
},
|
|
1456
|
+
{
|
|
1457
|
+
"path": "skills/security-audit/CLIENT-SIDE.md",
|
|
1458
|
+
"id": "cloudflare-audit-client-side",
|
|
1459
|
+
"class": "reference",
|
|
1460
|
+
"audience": [
|
|
1461
|
+
"harness",
|
|
1462
|
+
"maintainer"
|
|
1463
|
+
],
|
|
1464
|
+
"canonicalFor": [],
|
|
1465
|
+
"packaged": true
|
|
1466
|
+
},
|
|
1467
|
+
{
|
|
1468
|
+
"path": "skills/security-audit/CLOUD-AND-DEPLOYMENT.md",
|
|
1469
|
+
"id": "cloudflare-audit-cloud-and-deployment",
|
|
1470
|
+
"class": "reference",
|
|
1471
|
+
"audience": [
|
|
1472
|
+
"harness",
|
|
1473
|
+
"maintainer"
|
|
1474
|
+
],
|
|
1475
|
+
"canonicalFor": [],
|
|
1476
|
+
"packaged": true
|
|
1477
|
+
},
|
|
1478
|
+
{
|
|
1479
|
+
"path": "skills/security-audit/DATA-ISOLATION-AND-LIFECYCLE.md",
|
|
1480
|
+
"id": "cloudflare-audit-data-isolation-and-lifecycle",
|
|
1481
|
+
"class": "reference",
|
|
1482
|
+
"audience": [
|
|
1483
|
+
"harness",
|
|
1484
|
+
"maintainer"
|
|
1485
|
+
],
|
|
1486
|
+
"canonicalFor": [],
|
|
1487
|
+
"packaged": true
|
|
1488
|
+
},
|
|
1489
|
+
{
|
|
1490
|
+
"path": "skills/security-audit/DESKTOP-MOBILE-AND-LOCAL-IPC.md",
|
|
1491
|
+
"id": "cloudflare-audit-desktop-mobile-and-local-ipc",
|
|
1492
|
+
"class": "reference",
|
|
1493
|
+
"audience": [
|
|
1494
|
+
"harness",
|
|
1495
|
+
"maintainer"
|
|
1496
|
+
],
|
|
1497
|
+
"canonicalFor": [],
|
|
1498
|
+
"packaged": true
|
|
1499
|
+
},
|
|
1500
|
+
{
|
|
1501
|
+
"path": "skills/security-audit/HUNTING.md",
|
|
1502
|
+
"id": "cloudflare-audit-hunting",
|
|
1503
|
+
"class": "reference",
|
|
1504
|
+
"audience": [
|
|
1505
|
+
"harness",
|
|
1506
|
+
"maintainer"
|
|
1507
|
+
],
|
|
1508
|
+
"canonicalFor": [],
|
|
1509
|
+
"packaged": true
|
|
1510
|
+
},
|
|
1511
|
+
{
|
|
1512
|
+
"path": "skills/security-audit/MEMORY-SAFETY-AND-BINARY.md",
|
|
1513
|
+
"id": "cloudflare-audit-memory-safety-and-binary",
|
|
1514
|
+
"class": "reference",
|
|
1515
|
+
"audience": [
|
|
1516
|
+
"harness",
|
|
1517
|
+
"maintainer"
|
|
1518
|
+
],
|
|
1519
|
+
"canonicalFor": [],
|
|
1520
|
+
"packaged": true
|
|
1521
|
+
},
|
|
1522
|
+
{
|
|
1523
|
+
"path": "skills/security-audit/PROTOCOLS-RPC-AND-MESSAGING.md",
|
|
1524
|
+
"id": "cloudflare-audit-protocols-rpc-and-messaging",
|
|
1525
|
+
"class": "reference",
|
|
1526
|
+
"audience": [
|
|
1527
|
+
"harness",
|
|
1528
|
+
"maintainer"
|
|
1529
|
+
],
|
|
1530
|
+
"canonicalFor": [],
|
|
1531
|
+
"packaged": true
|
|
1532
|
+
},
|
|
1533
|
+
{
|
|
1534
|
+
"path": "skills/security-audit/RECONNAISSANCE.md",
|
|
1535
|
+
"id": "cloudflare-audit-reconnaissance",
|
|
1536
|
+
"class": "reference",
|
|
1537
|
+
"audience": [
|
|
1538
|
+
"harness",
|
|
1539
|
+
"maintainer"
|
|
1540
|
+
],
|
|
1541
|
+
"canonicalFor": [],
|
|
1542
|
+
"packaged": true
|
|
1543
|
+
},
|
|
1544
|
+
{
|
|
1545
|
+
"path": "skills/security-audit/RESOURCE-EXHAUSTION-AND-AVAILABILITY.md",
|
|
1546
|
+
"id": "cloudflare-audit-resource-exhaustion-and-availability",
|
|
1547
|
+
"class": "reference",
|
|
1548
|
+
"audience": [
|
|
1549
|
+
"harness",
|
|
1550
|
+
"maintainer"
|
|
1551
|
+
],
|
|
1552
|
+
"canonicalFor": [],
|
|
1553
|
+
"packaged": true
|
|
1554
|
+
},
|
|
1555
|
+
{
|
|
1556
|
+
"path": "skills/security-audit/SKILL.md",
|
|
1557
|
+
"id": "cloudflare-audit-skill",
|
|
1558
|
+
"class": "reference",
|
|
1559
|
+
"audience": [
|
|
1560
|
+
"harness",
|
|
1561
|
+
"maintainer"
|
|
1562
|
+
],
|
|
1563
|
+
"canonicalFor": [],
|
|
1564
|
+
"packaged": true
|
|
1565
|
+
},
|
|
1566
|
+
{
|
|
1567
|
+
"path": "skills/security-audit/SUPPLY-CHAIN-AND-RELEASE.md",
|
|
1568
|
+
"id": "cloudflare-audit-supply-chain-and-release",
|
|
1569
|
+
"class": "reference",
|
|
1570
|
+
"audience": [
|
|
1571
|
+
"harness",
|
|
1572
|
+
"maintainer"
|
|
1573
|
+
],
|
|
1574
|
+
"canonicalFor": [],
|
|
1575
|
+
"packaged": true
|
|
1576
|
+
},
|
|
1577
|
+
{
|
|
1578
|
+
"path": "skills/security-audit/VALIDATION-AND-REPORTING.md",
|
|
1579
|
+
"id": "cloudflare-audit-validation-and-reporting",
|
|
1580
|
+
"class": "reference",
|
|
1581
|
+
"audience": [
|
|
1582
|
+
"harness",
|
|
1583
|
+
"maintainer"
|
|
1584
|
+
],
|
|
1585
|
+
"canonicalFor": [],
|
|
1586
|
+
"packaged": true
|
|
1587
|
+
},
|
|
1588
|
+
{
|
|
1589
|
+
"path": "skills/security-audit/WEB-PROTOCOL-AND-AUTH.md",
|
|
1590
|
+
"id": "cloudflare-audit-web-protocol-and-auth",
|
|
1591
|
+
"class": "reference",
|
|
1592
|
+
"audience": [
|
|
1593
|
+
"harness",
|
|
1594
|
+
"maintainer"
|
|
1595
|
+
],
|
|
1596
|
+
"canonicalFor": [],
|
|
1597
|
+
"packaged": true
|
|
1598
|
+
},
|
|
1599
|
+
{
|
|
1600
|
+
"path": "docs/GUIDE_MAINTENANCE.md",
|
|
1601
|
+
"id": "guide-maintenance",
|
|
1602
|
+
"class": "guide",
|
|
1603
|
+
"audience": [
|
|
1604
|
+
"maintainer",
|
|
1605
|
+
"harness",
|
|
1606
|
+
"user"
|
|
1607
|
+
],
|
|
1608
|
+
"canonicalFor": [
|
|
1609
|
+
"guide-maintenance"
|
|
1610
|
+
],
|
|
1611
|
+
"packaged": true
|
|
1612
|
+
},
|
|
1613
|
+
{
|
|
1614
|
+
"path": "docs/REVENUE_CENTRIC_DESIGN.md",
|
|
1615
|
+
"id": "revenue-centric-design",
|
|
1616
|
+
"class": "guide",
|
|
1617
|
+
"audience": [
|
|
1618
|
+
"user",
|
|
1619
|
+
"harness",
|
|
1620
|
+
"maintainer"
|
|
1621
|
+
],
|
|
1622
|
+
"canonicalFor": [
|
|
1623
|
+
"revenue-design-companion"
|
|
1624
|
+
],
|
|
1625
|
+
"packaged": true
|
|
1626
|
+
},
|
|
1627
|
+
{
|
|
1628
|
+
"path": "skills/forgeloop/references/revenue-centric-design/SKILL.md",
|
|
1629
|
+
"id": "revenue-centric-design-skill",
|
|
1630
|
+
"class": "reference",
|
|
1631
|
+
"audience": [
|
|
1632
|
+
"user",
|
|
1633
|
+
"harness",
|
|
1634
|
+
"maintainer"
|
|
1635
|
+
],
|
|
1636
|
+
"canonicalFor": [],
|
|
1637
|
+
"packaged": true
|
|
1638
|
+
},
|
|
1639
|
+
{
|
|
1640
|
+
"path": "skills/forgeloop/references/revenue-centric-design/references/playbook.md",
|
|
1641
|
+
"id": "revenue-centric-design-playbook",
|
|
1642
|
+
"class": "reference",
|
|
1643
|
+
"audience": [
|
|
1644
|
+
"user",
|
|
1645
|
+
"harness",
|
|
1646
|
+
"maintainer"
|
|
1647
|
+
],
|
|
1648
|
+
"canonicalFor": [],
|
|
1649
|
+
"packaged": true
|
|
1650
|
+
},
|
|
1651
|
+
{
|
|
1652
|
+
"path": "docs/STABLE_2_ACCEPTANCE.md",
|
|
1653
|
+
"id": "stable-2-acceptance",
|
|
1654
|
+
"class": "reference",
|
|
1655
|
+
"audience": [
|
|
1656
|
+
"user",
|
|
1657
|
+
"maintainer"
|
|
1658
|
+
],
|
|
1659
|
+
"canonicalFor": [
|
|
1660
|
+
"stable-storage-release-acceptance"
|
|
1661
|
+
],
|
|
1662
|
+
"packaged": true
|
|
1419
1663
|
}
|
|
1420
1664
|
]
|
|
1421
1665
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cassiomc1/forgeloop",
|
|
3
|
-
"version": "2.0.0
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Evidence-first engineering protocol for AI coding environments and developer workflows",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -122,7 +122,14 @@
|
|
|
122
122
|
"!src/core/workflow-compatibility.js",
|
|
123
123
|
"!src/core/cli-metadata.js",
|
|
124
124
|
"LICENSE",
|
|
125
|
-
"scripts/run-mcp-clean-tests.mjs"
|
|
125
|
+
"scripts/run-mcp-clean-tests.mjs",
|
|
126
|
+
"docs/SECURITY_AUDIT_SKILL.md",
|
|
127
|
+
"scripts/verify-security-audit-skill.mjs",
|
|
128
|
+
"skills/security-audit",
|
|
129
|
+
"docs/GUIDE_MAINTENANCE.md",
|
|
130
|
+
"docs/REVENUE_CENTRIC_DESIGN.md",
|
|
131
|
+
"scripts/verify-revenue-design-skill.mjs",
|
|
132
|
+
"docs/STABLE_2_ACCEPTANCE.md"
|
|
126
133
|
],
|
|
127
134
|
"scripts": {
|
|
128
135
|
"test": "node scripts/run-tests.js",
|
|
@@ -184,7 +191,9 @@
|
|
|
184
191
|
"mcp:test:clean": "node scripts/run-mcp-clean-tests.mjs",
|
|
185
192
|
"release:quick": "node scripts/run-rc-release.mjs",
|
|
186
193
|
"release:rc:check": "node scripts/check-rc-release.mjs",
|
|
187
|
-
"storage:writer-inventory": "node scripts/storage-writer-inventory.mjs"
|
|
194
|
+
"storage:writer-inventory": "node scripts/storage-writer-inventory.mjs",
|
|
195
|
+
"security-skill:check": "node scripts/verify-security-audit-skill.mjs",
|
|
196
|
+
"revenue-skill:check": "node scripts/verify-revenue-design-skill.mjs"
|
|
188
197
|
},
|
|
189
198
|
"devDependencies": {
|
|
190
199
|
"c8": "^12.0.0",
|
|
@@ -64,6 +64,14 @@ Respect active write claims. Do not steal, override, manually release, or edit o
|
|
|
64
64
|
|
|
65
65
|
\`run-check\` executes the exact command and records ForgeLoop-owned provenance. \`record-check\` is serialization-only; its command text is metadata and is never executed. Claims, provider/advisory output, screenshots, and actor summaries are not evidence by themselves. Missing tools remain unavailable; do not auto-install a verifier.
|
|
66
66
|
|
|
67
|
+
## Optional Security Audit Companion
|
|
68
|
+
|
|
69
|
+
For requested source security questions or vulnerability reviews, ForgeLoop bundles Cloudflare's pinned \`security-audit\` companion under \`skills/security-audit/\` in its package/source root. Consult \`docs/SECURITY_AUDIT_SKILL.md\` there for setup, provenance, and authority boundaries. Load the companion only when available and relevant. Host discovery is opt-in; \`init\` and \`update\` do not install it. Routine security routing does not require a full audit. Full audits require an explicit audit/report request, independent verifiers, and the upstream execution isolation controls; unavailable capabilities remain explicit blockers. Preserve \`confirmed\`, \`needs_validation\`, and \`rejected\`; reports and report-validator success do not establish canonical evidence or ForgeLoop completion. This companion is separate from ForgeLoopAudit and the host-injected Security Review provider.
|
|
70
|
+
|
|
71
|
+
## Optional Product Design Companion
|
|
72
|
+
|
|
73
|
+
For relevant SaaS product journeys, activation, pricing clarity or retention work, read the bundled \`references/revenue-centric-design/SKILL.md\` relative to this skill directory. Consult \`docs/REVENUE_CENTRIC_DESIGN.md\` in the package root for setup and provenance. The adaptation credits Richard (@richardrx) and preserves the full custom source-available license, including its gambling/betting/casino-use exclusion. It is advisory, adds no guide ID or gate, and grants no lifecycle, evidence, payment or publication authority. Use measured user value, informed choice and accessibility as constraints; do not claim conversion lift from UI tests. No updater or media is bundled, and host discovery copies remain opt-in.
|
|
74
|
+
|
|
67
75
|
## Recovery Rules
|
|
68
76
|
|
|
69
77
|
Use supported recovery only. Preserve failed evidence and follow \`next\` through diagnosis/correction. For state or ledger divergence, stop lifecycle mutation and inspect validation/classification. Never edit task state, receipts, recovery, continuity, claims, hashes, or \`events.ndjson\` manually. Reconcile \`COMMIT_UNKNOWN\` before any retry.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { lstat, readFile, readdir } from "node:fs/promises";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
|
|
7
|
+
const defaultRoot = fileURLToPath(new URL("../skills/forgeloop/references/revenue-centric-design/", import.meta.url));
|
|
8
|
+
const files = ["LICENSE", "SKILL.md", "references/playbook.md"];
|
|
9
|
+
async function regular(filename, directory = false) {
|
|
10
|
+
const metadata = await lstat(filename);
|
|
11
|
+
if (metadata.isSymbolicLink() || !(directory ? metadata.isDirectory() : metadata.isFile())) throw new Error("Design companion must contain regular files and directories only");
|
|
12
|
+
}
|
|
13
|
+
export async function verifyRevenueDesignSkill({ rootDir = defaultRoot } = {}) {
|
|
14
|
+
await regular(rootDir, true);
|
|
15
|
+
await regular(path.join(rootDir, "references"), true);
|
|
16
|
+
await regular(path.join(rootDir, "PIN.json"));
|
|
17
|
+
const pin = JSON.parse(await readFile(path.join(rootDir, "PIN.json"), "utf8"));
|
|
18
|
+
if (pin.schemaVersion !== 1 || pin.repository !== "https://github.com/heliocosta-dev/revenue-centric-design"
|
|
19
|
+
|| pin.commit !== "1942760c2242f609bf63ce2c97204f5a1791bd68"
|
|
20
|
+
|| JSON.stringify(Object.keys(pin.files ?? {}).sort()) !== JSON.stringify(files)) throw new Error("Invalid design companion pin");
|
|
21
|
+
const rootNames = (await readdir(rootDir)).sort();
|
|
22
|
+
if (JSON.stringify(rootNames) !== JSON.stringify(["LICENSE", "PIN.json", "SKILL.md", "references"])
|
|
23
|
+
|| JSON.stringify(await readdir(path.join(rootDir, "references"))) !== JSON.stringify(["playbook.md"])) throw new Error("Unexpected design companion files");
|
|
24
|
+
for (const name of files) {
|
|
25
|
+
const filename = path.join(rootDir, name);
|
|
26
|
+
await regular(filename);
|
|
27
|
+
const bytes = (await readFile(filename, "utf8")).replaceAll("\r\n", "\n");
|
|
28
|
+
const digest = createHash("sha256").update(bytes).digest("hex");
|
|
29
|
+
if (digest !== pin.files[name]) throw new Error(`Design companion hash mismatch: ${name}`);
|
|
30
|
+
}
|
|
31
|
+
if (pin.files.LICENSE !== pin.upstreamLicenseSha256) throw new Error("Upstream design license differs");
|
|
32
|
+
return { valid: true, commit: pin.commit, filesChecked: files.length, digestFormat: pin.digestFormat };
|
|
33
|
+
}
|
|
34
|
+
if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
|
|
35
|
+
try { console.log(JSON.stringify(await verifyRevenueDesignSkill())); }
|
|
36
|
+
catch (error) { console.error(error.message); process.exitCode = 1; }
|
|
37
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { createHash } from "node:crypto";
|
|
4
|
+
import { lstat, readFile, readdir } from "node:fs/promises";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import { fileURLToPath } from "node:url";
|
|
7
|
+
|
|
8
|
+
const defaultRoot = fileURLToPath(new URL("../skills/security-audit/", import.meta.url));
|
|
9
|
+
const upstream = "https://github.com/cloudflare/security-audit-skill";
|
|
10
|
+
const requiredFiles = ["SKILL.md", "LICENSE", "report-schema.json", "validate-findings.cjs", "validate-coverage-ledger.cjs"];
|
|
11
|
+
|
|
12
|
+
async function regularFile(file) {
|
|
13
|
+
let metadata;
|
|
14
|
+
try { metadata = await lstat(file); } catch (error) {
|
|
15
|
+
if (error.code === "ENOENT") throw new Error(`Skill integrity: missing ${path.basename(file)}`);
|
|
16
|
+
throw error;
|
|
17
|
+
}
|
|
18
|
+
if (!metadata.isFile() || metadata.isSymbolicLink()) {
|
|
19
|
+
throw new Error(`Skill integrity: expected a regular file, no symlink: ${path.basename(file)}`);
|
|
20
|
+
}
|
|
21
|
+
return readFile(file);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function validatePin(pin) {
|
|
25
|
+
if (pin?.schemaVersion !== 1 || pin.repository !== upstream
|
|
26
|
+
|| pin.upstreamDirectory !== "skills/security-audit" || pin.license !== "MIT"
|
|
27
|
+
|| typeof pin.commit !== "string" || !/^[a-f0-9]{40}$/u.test(pin.commit)
|
|
28
|
+
|| !pin.files || typeof pin.files !== "object" || Array.isArray(pin.files)) {
|
|
29
|
+
throw new Error("Skill integrity: invalid upstream pin");
|
|
30
|
+
}
|
|
31
|
+
for (const [name, digest] of Object.entries(pin.files)) {
|
|
32
|
+
if (name === "PIN.json" || !/^[A-Za-z0-9][A-Za-z0-9._-]*$/u.test(name)
|
|
33
|
+
|| typeof digest !== "string" || !/^[a-f0-9]{64}$/u.test(digest)) {
|
|
34
|
+
throw new Error(`Skill integrity: unsafe filename or invalid digest: ${name}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (requiredFiles.some(name => !Object.hasOwn(pin.files, name))) {
|
|
38
|
+
throw new Error("Skill integrity: invalid pin missing required resources");
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export async function verifySecurityAuditSkill({ rootDir = defaultRoot } = {}) {
|
|
43
|
+
const metadata = await lstat(rootDir);
|
|
44
|
+
if (!metadata.isDirectory() || metadata.isSymbolicLink()) throw new Error("Skill integrity: expected a directory, no symlink");
|
|
45
|
+
const pin = JSON.parse(await regularFile(path.join(rootDir, "PIN.json")));
|
|
46
|
+
validatePin(pin);
|
|
47
|
+
const expected = [...Object.keys(pin.files), "PIN.json"].sort();
|
|
48
|
+
const actual = (await readdir(rootDir)).sort();
|
|
49
|
+
if (JSON.stringify(expected) !== JSON.stringify(actual)) {
|
|
50
|
+
throw new Error("Skill integrity: missing or unexpected files");
|
|
51
|
+
}
|
|
52
|
+
for (const [name, digest] of Object.entries(pin.files)) {
|
|
53
|
+
const bytes = await regularFile(path.join(rootDir, name));
|
|
54
|
+
if (createHash("sha256").update(bytes).digest("hex") !== digest) {
|
|
55
|
+
throw new Error(`Skill integrity: SHA-256 mismatch: ${name}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return { valid: true, commit: pin.commit, filesChecked: Object.keys(pin.files).length };
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
|
|
62
|
+
try {
|
|
63
|
+
console.log(JSON.stringify(await verifySecurityAuditSkill()));
|
|
64
|
+
} catch (error) {
|
|
65
|
+
console.error(error.message);
|
|
66
|
+
process.exitCode = 1;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -49,6 +49,14 @@ Respect active write claims. Do not steal, override, manually release, or edit o
|
|
|
49
49
|
|
|
50
50
|
`run-check` executes the exact command and records ForgeLoop-owned provenance. `record-check` is serialization-only; its command text is metadata and is never executed. Claims, provider/advisory output, screenshots, and actor summaries are not evidence by themselves. Missing tools remain unavailable; do not auto-install a verifier.
|
|
51
51
|
|
|
52
|
+
## Optional Security Audit Companion
|
|
53
|
+
|
|
54
|
+
For requested source security questions or vulnerability reviews, ForgeLoop bundles Cloudflare's pinned `security-audit` companion under `skills/security-audit/` in its package/source root. Consult `docs/SECURITY_AUDIT_SKILL.md` there for setup, provenance, and authority boundaries. Load the companion only when available and relevant. Host discovery is opt-in; `init` and `update` do not install it. Routine security routing does not require a full audit. Full audits require an explicit audit/report request, independent verifiers, and the upstream execution isolation controls; unavailable capabilities remain explicit blockers. Preserve `confirmed`, `needs_validation`, and `rejected`; reports and report-validator success do not establish canonical evidence or ForgeLoop completion. This companion is separate from ForgeLoopAudit and the host-injected Security Review provider.
|
|
55
|
+
|
|
56
|
+
## Optional Product Design Companion
|
|
57
|
+
|
|
58
|
+
For relevant SaaS product journeys, activation, pricing clarity or retention work, read the bundled `references/revenue-centric-design/SKILL.md` relative to this skill directory. Consult `docs/REVENUE_CENTRIC_DESIGN.md` in the package root for setup and provenance. The adaptation credits Richard (@richardrx) and preserves the full custom source-available license, including its gambling/betting/casino-use exclusion. It is advisory, adds no guide ID or gate, and grants no lifecycle, evidence, payment or publication authority. Use measured user value, informed choice and accessibility as constraints; do not claim conversion lift from UI tests. No updater or media is bundled, and host discovery copies remain opt-in.
|
|
59
|
+
|
|
52
60
|
## Recovery Rules
|
|
53
61
|
|
|
54
62
|
Use supported recovery only. Preserve failed evidence and follow `next` through diagnosis/correction. For state or ledger divergence, stop lifecycle mutation and inspect validation/classification. Never edit task state, receipts, recovery, continuity, claims, hashes, or `events.ndjson` manually. Reconcile `COMMIT_UNKNOWN` before any retry.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
Revenue-Centric Design Skill — License & Usage Terms
|
|
2
|
+
Copyright (c) 2026 the curators of this repository.
|
|
3
|
+
|
|
4
|
+
The underlying ideas, frameworks, examples, and the coined term "Revenue-Centric
|
|
5
|
+
Design" are the intellectual property of Richard (@richardrx on X) and are used
|
|
6
|
+
here WITH PERMISSION. This repository is a distilled, translated index of his
|
|
7
|
+
public posts, shared for educational and reference use.
|
|
8
|
+
|
|
9
|
+
You are granted permission to use, copy, and share this material, subject to ALL
|
|
10
|
+
of the following conditions:
|
|
11
|
+
|
|
12
|
+
1. ATTRIBUTION. You must retain clear attribution to Richard (@richardrx) and a
|
|
13
|
+
link to the source. Do not misrepresent the origin of these ideas.
|
|
14
|
+
|
|
15
|
+
2. NO GAMBLING / BETTING / CASINO USE. You may NOT use this material — in whole
|
|
16
|
+
or in part — to design, build, optimize, market, or grow betting, casino,
|
|
17
|
+
gambling, or other real-money games-of-chance products or projects (including
|
|
18
|
+
loot-box and real-money-gaming mechanics). This restriction was set by the
|
|
19
|
+
original author as an explicit condition of reuse and MUST be preserved in any
|
|
20
|
+
copy or derivative.
|
|
21
|
+
|
|
22
|
+
3. PRESERVE THESE TERMS. Any copy or derivative work must include this license in
|
|
23
|
+
full, including the restrictions above.
|
|
24
|
+
|
|
25
|
+
4. NO WARRANTY. This material is provided "AS IS", without warranty of any kind,
|
|
26
|
+
express or implied. The curators and the original author are not liable for any
|
|
27
|
+
claim, damages, or other liability arising from its use.
|
|
28
|
+
|
|
29
|
+
Note: Because of the field-of-use restriction in clause 2, this is a
|
|
30
|
+
SOURCE-AVAILABLE license, not an OSI-approved open-source license.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"repository": "https://github.com/heliocosta-dev/revenue-centric-design",
|
|
4
|
+
"commit": "1942760c2242f609bf63ce2c97204f5a1791bd68",
|
|
5
|
+
"license": "Custom source-available; attribution and no gambling/betting/casino use",
|
|
6
|
+
"adaptation": "ForgeLoop-focused entry point and local playbook; full upstream license retained; upstream references linked at the pinned commit; no updater or media bundled.",
|
|
7
|
+
"digestFormat": "SHA-256 of UTF-8 file bytes after CRLF to LF normalization",
|
|
8
|
+
"upstreamLicenseSha256": "29e6d8b0a1e3dd78776b46b22b9a9a3df94fdbf6a73482f59d688dee7fd38e32",
|
|
9
|
+
"files": {
|
|
10
|
+
"LICENSE": "29e6d8b0a1e3dd78776b46b22b9a9a3df94fdbf6a73482f59d688dee7fd38e32",
|
|
11
|
+
"SKILL.md": "666ca4a0a7a1b2a8adf2882aa4571c30d51316c2163ea1ba1fd4d3424183d655",
|
|
12
|
+
"references/playbook.md": "0cdf065d41e4baa33a45bd0ad0e13bc57fcb237e768a27f8b494415aebb24805"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: revenue-centric-design
|
|
3
|
+
description: Improve SaaS product journeys, activation, pricing clarity and retention using evidence-led design hypotheses. Use for relevant product or UX work; exclude gambling, betting, casino and real-money games-of-chance products.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Revenue-centric design for ForgeLoop
|
|
7
|
+
|
|
8
|
+
Adapted from [heliocosta-dev/revenue-centric-design](https://github.com/heliocosta-dev/revenue-centric-design/tree/1942760c2242f609bf63ce2c97204f5a1791bd68),
|
|
9
|
+
curated from **Richard ([@richardrx](https://x.com/richardrx))**. Preserve this
|
|
10
|
+
attribution, source link and the complete [custom license](LICENSE) in copies
|
|
11
|
+
or derivatives. This material is source-available, with a field-of-use restriction;
|
|
12
|
+
it is not covered by ForgeLoop's license.
|
|
13
|
+
|
|
14
|
+
Do not apply this material to betting, casino, gambling or real-money
|
|
15
|
+
games-of-chance products, including loot-box and real-money-gaming mechanics.
|
|
16
|
+
The upstream permission excludes those uses.
|
|
17
|
+
|
|
18
|
+
## Apply to the actual journey
|
|
19
|
+
|
|
20
|
+
Use when product work concerns landing-page clarity, signup, checkout,
|
|
21
|
+
onboarding, pricing, useful dashboards or retention. Do not load it for
|
|
22
|
+
unrelated storage, security or protocol maintenance. For ForgeLoopAudit,
|
|
23
|
+
use it only when changing the auditor's user journey: optimize comprehension,
|
|
24
|
+
first successful inspection and actionable evidence, never simulated revenue.
|
|
25
|
+
|
|
26
|
+
Read [the focused playbook](references/playbook.md) and only the upstream
|
|
27
|
+
pinned theme relevant to the request. The playbook links each theme separately.
|
|
28
|
+
No updater, media download, external account or Skills CLI is needed.
|
|
29
|
+
|
|
30
|
+
1. Inspect the implemented journey and real product facts. Identify the user's
|
|
31
|
+
intended outcome, the friction observed and one measurable value event.
|
|
32
|
+
Avoid inventing customer segments, pricing, conversion baselines or proof.
|
|
33
|
+
2. Choose a small reversible intervention. State the mechanism as a hypothesis,
|
|
34
|
+
the expected user benefit, the business metric and possible user harm.
|
|
35
|
+
A cited anecdote or statistic is not an expected result for this product.
|
|
36
|
+
3. Follow the project's ForgeLoop contract, selected design/accessibility guides
|
|
37
|
+
and canonical `next` actions. This companion neither adds guide IDs or gates
|
|
38
|
+
nor grants lifecycle, evidence, publication or payment authority.
|
|
39
|
+
4. Verify the changed journey: understandable copy, complete price and renewal
|
|
40
|
+
disclosure, keyboard/focus behavior, errors, responsive layout and an honest
|
|
41
|
+
empty state. Use the host's available browser tools when behavior changes.
|
|
42
|
+
5. Report observed usability separately from measured commercial impact.
|
|
43
|
+
Without sufficient real traffic or a sound experiment, report a design
|
|
44
|
+
hypothesis and qualitative observations, not a conversion improvement.
|
|
45
|
+
|
|
46
|
+
## Preserve informed choice
|
|
47
|
+
|
|
48
|
+
Keep cancellation, opt-out and account deletion findable and usable. Explain
|
|
49
|
+
consequences accurately and allow the user to continue. Do not introduce fake
|
|
50
|
+
urgency, fabricated reviews/logos, concealed charges, misleading plan comparisons,
|
|
51
|
+
preselected paid upgrades or obstacles designed to trap users. Defaults should
|
|
52
|
+
serve the intended task and remain visible and reversible. Do not add tracking,
|
|
53
|
+
paid experiments or third-party services merely to use this companion.
|
|
54
|
+
|
|
55
|
+
Upstream examples and numeric rules are contextual source claims. Check their
|
|
56
|
+
original sources before quoting them as facts; do not treat them as universal
|
|
57
|
+
thresholds, verified research or financial guidance.
|
|
58
|
+
|
|
59
|
+
## Suggested review result
|
|
60
|
+
|
|
61
|
+
Return the inspected journey, observed friction, selected source principle,
|
|
62
|
+
proposed change, user-value metric, guardrail metric, verification performed
|
|
63
|
+
and unresolved measurement. Implementation remains within the user's scope.
|
|
64
|
+
The companion's review is advisory and cannot establish `COMPLETE` or `VALID`.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Focused journey playbook
|
|
2
|
+
|
|
3
|
+
Adapted with attribution to Richard ([@richardrx](https://x.com/richardrx)) and
|
|
4
|
+
[the pinned upstream curation](https://github.com/heliocosta-dev/revenue-centric-design/tree/1942760c2242f609bf63ce2c97204f5a1791bd68).
|
|
5
|
+
The complete [custom license](../LICENSE), including its no-gambling-use
|
|
6
|
+
restriction, applies. The prompts below are design hypotheses, not measured
|
|
7
|
+
results or universal benchmarks.
|
|
8
|
+
|
|
9
|
+
| Journey | Useful intervention | Observe | Guardrail | Read when needed |
|
|
10
|
+
| --- | --- | --- | --- | --- |
|
|
11
|
+
| Landing page | Describe the actual audience, problem, delivered outcome and next step; show available product proof | Can a new visitor explain the offer and begin the intended task? | No invented claims, testimonials or customer logos | [Conversion](https://github.com/heliocosta-dev/revenue-centric-design/blob/1942760c2242f609bf63ce2c97204f5a1791bd68/references/conversion-and-landing-pages.md) |
|
|
12
|
+
| Signup and checkout | Request information when needed and show total cost before commitment | Task completion, field errors and abandonment at a specific step | No hidden fees or unconsented paid choices; preserve security checks | [Forms](https://github.com/heliocosta-dev/revenue-centric-design/blob/1942760c2242f609bf63ce2c97204f5a1791bd68/references/checkout-and-forms.md) |
|
|
13
|
+
| First use | Make the first real value event obvious; provide a useful empty state and recoverable errors | Time to the first successful value event | No fake success, mandatory unrelated setup or premature upgrade interruption | [Activation](https://github.com/heliocosta-dev/revenue-centric-design/blob/1942760c2242f609bf63ce2c97204f5a1791bd68/references/onboarding-and-activation.md) |
|
|
14
|
+
| Pricing and limits | Explain who a plan serves, actual limits, billing cadence and upgrade consequences | Understanding of the choice and successful intended purchase | Total price, renewals and trial conditions stay explicit | [Pricing](https://github.com/heliocosta-dev/revenue-centric-design/blob/1942760c2242f609bf63ce2c97204f5a1791bd68/references/pricing-and-monetization.md) |
|
|
15
|
+
| Retention and cancellation | Fix mismatches between promised and delivered value; offer relevant alternatives while preserving an easy exit | Repeated value events, cancellation reasons and support burden | Successful cancellation and opt-out remain first-class outcomes | [Retention](https://github.com/heliocosta-dev/revenue-centric-design/blob/1942760c2242f609bf63ce2c97204f5a1791bd68/references/churn-and-retention.md) |
|
|
16
|
+
| Dashboard | Put the user's next decision beside understandable evidence and explicit freshness | Can the user interpret the state and take the next useful action? | Missing or stale data must remain visible; color is not the only signal | [Dashboards](https://github.com/heliocosta-dev/revenue-centric-design/blob/1942760c2242f609bf63ce2c97204f5a1791bd68/references/dashboards-and-data-viz.md) |
|
|
17
|
+
| Feature scope | Prefer the smallest feature that resolves observed user friction | Adoption and completion of the value event | Avoid increasing setup cost or hiding existing core functionality | [Product strategy](https://github.com/heliocosta-dev/revenue-centric-design/blob/1942760c2242f609bf63ce2c97204f5a1791bd68/references/product-strategy-and-features.md) |
|
|
18
|
+
| Positioning | Use confirmed customer needs and demonstrated differentiation | Whether the intended audience understands the offer | An assumption is labeled until validated | [Positioning](https://github.com/heliocosta-dev/revenue-centric-design/blob/1942760c2242f609bf63ce2c97204f5a1791bd68/references/positioning-icp-and-gtm.md) |
|
|
19
|
+
| Experiment | Define the value event, hypothesis, comparison and stopping rule before measurement | Sample size, uncertainty and guardrail outcomes | Do not stop opportunistically or infer business lift from a UI test | [Measurement](https://github.com/heliocosta-dev/revenue-centric-design/blob/1942760c2242f609bf63ce2c97204f5a1791bd68/references/metrics-and-experimentation.md) |
|
|
20
|
+
|
|
21
|
+
For cross-cutting rationale, read the pinned [design method](https://github.com/heliocosta-dev/revenue-centric-design/blob/1942760c2242f609bf63ce2c97204f5a1791bd68/references/revenue-centric-design.md),
|
|
22
|
+
[behavioral toolkit](https://github.com/heliocosta-dev/revenue-centric-design/blob/1942760c2242f609bf63ce2c97204f5a1791bd68/references/behavioral-science-toolkit.md)
|
|
23
|
+
or [differentiation discussion](https://github.com/heliocosta-dev/revenue-centric-design/blob/1942760c2242f609bf63ce2c97204f5a1791bd68/references/ai-era-differentiation.md)
|
|
24
|
+
only when relevant. These are external references; offline use remains possible
|
|
25
|
+
with this local playbook. A reference link does not authorize scraping X or
|
|
26
|
+
running upstream updater scripts.
|
|
27
|
+
|
|
28
|
+
## ForgeLoop and ForgeLoopAudit example
|
|
29
|
+
|
|
30
|
+
For a new auditor opening a project, define the value event as a successful
|
|
31
|
+
read-only inspection with a comprehensible finding and canonical next action.
|
|
32
|
+
Review project selection, empty/error states, evidence freshness and navigation.
|
|
33
|
+
Measure task success and time-to-understanding in a user study if available.
|
|
34
|
+
A successful browser test demonstrates that the journey works; it does not
|
|
35
|
+
prove activation, retention or revenue lift. Preserve read-only authority,
|
|
36
|
+
source identity, accessibility and every integrity warning.
|