@cassiomc1/forgeloop 2.0.0-rc.4 → 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 +3 -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 +24 -20
- package/THIRD_PARTY_NOTICES.md +59 -6
- package/docs/AGENT_PROTOCOL_SUMMARY.md +1 -1
- package/docs/AGENT_SKILL.md +31 -0
- package/docs/DOCUMENTATION_GUIDE.md +6 -0
- package/docs/FORGELOOP_AUDIT.md +71 -0
- package/docs/GETTING_STARTED.md +6 -0
- package/docs/GUIDE_MAINTENANCE.md +106 -0
- package/docs/OPENSRC_ADAPTER.md +1 -1
- package/docs/PACKAGE_CONTENTS.md +25 -2
- package/docs/RELEASE_CHECKLIST.md +79 -20
- 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 +15 -2
- package/docs/documentation-manifest.json +255 -0
- package/package.json +14 -4
- package/scripts/generate-forgeloop-skill.mjs +14 -0
- package/scripts/verify-revenue-design-skill.mjs +37 -0
- package/scripts/verify-security-audit-skill.mjs +68 -0
- package/skills/forgeloop/SKILL.md +14 -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
package/docs/TROUBLESHOOTING.md
CHANGED
|
@@ -27,7 +27,7 @@ install the kit before expecting the complete `doctor` report to be healthy.
|
|
|
27
27
|
## Concurrent task creation
|
|
28
28
|
|
|
29
29
|
Task creation revalidates write claims atomically. If the catalog changes while
|
|
30
|
-
a command is prepared,
|
|
30
|
+
a command is prepared, RC4 refreshes authoritative claim inputs with bounded
|
|
31
31
|
backoff and jitter without replaying the command or its external effects.
|
|
32
32
|
Overlapping claims still fail. Sustained contention can exhaust the retry
|
|
33
33
|
bound and return a catalog-change refusal; inspect fresh task discovery
|
|
@@ -133,7 +133,8 @@ tests or change assertions. Local coverage remains an explicit command because
|
|
|
133
133
|
instrumentation adds measurable overhead; the PR unit lane wraps that same
|
|
134
134
|
`test:ci` process across four deterministic shards, then aggregates coverage
|
|
135
135
|
without running the suite again. Docs-only changes run the quick suite only on
|
|
136
|
-
the first Node 24 shard; the other shards
|
|
136
|
+
the first Node 24 shard; the other shards do not install. The minimum Node
|
|
137
|
+
24.19.0 compatibility lane runs only for applicable source or runtime changes.
|
|
137
138
|
|
|
138
139
|
#### Native Windows guidance
|
|
139
140
|
|
|
@@ -279,6 +280,18 @@ forgeloop record-diagnosis --task <id> \
|
|
|
279
280
|
--next-safe-action="Smallest safe action to address the hypothesis"
|
|
280
281
|
```
|
|
281
282
|
|
|
283
|
+
A new finding discovered in `REVIEWING` can also be diagnosed there. First
|
|
284
|
+
record the actual negative observation with `record-check --kind manual-review
|
|
285
|
+
--status failed --evidence-kind OBSERVED`, binding it to the affected
|
|
286
|
+
requirement. A blocked finding uses `--status blocked --evidence-kind BLOCKED`.
|
|
287
|
+
Passed evidence remains restricted to `VERIFYING`. Both legacy and structured
|
|
288
|
+
diagnoses must reference a failed or blocked check from the current cycle.
|
|
289
|
+
Then follow `next`, enter `CORRECTING`, and rerun verification in the new cycle.
|
|
290
|
+
A task already in `CORRECTING` from review follows the same finding and
|
|
291
|
+
diagnosis requirements. Repository-only drift may be refreshed through
|
|
292
|
+
`reconcile-closure` after its contract-bound check passes; that refresh neither
|
|
293
|
+
creates a diagnosis nor authorizes a retry.
|
|
294
|
+
|
|
282
295
|
Then advance to `CORRECTING`:
|
|
283
296
|
|
|
284
297
|
```bash
|
|
@@ -1405,6 +1405,261 @@
|
|
|
1405
1405
|
"self-hosted-node-validation"
|
|
1406
1406
|
],
|
|
1407
1407
|
"packaged": true
|
|
1408
|
+
},
|
|
1409
|
+
{
|
|
1410
|
+
"path": "docs/FORGELOOP_AUDIT.md",
|
|
1411
|
+
"id": "forgeloop-audit",
|
|
1412
|
+
"class": "operational",
|
|
1413
|
+
"audience": [
|
|
1414
|
+
"user",
|
|
1415
|
+
"maintainer"
|
|
1416
|
+
],
|
|
1417
|
+
"canonicalFor": [],
|
|
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
|
|
1408
1663
|
}
|
|
1409
1664
|
]
|
|
1410
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",
|
|
@@ -82,6 +82,7 @@
|
|
|
82
82
|
"docs/MCP.md",
|
|
83
83
|
"docs/UNIVERSAL_INTEGRATION.md",
|
|
84
84
|
"docs/AUDIT_UX.md",
|
|
85
|
+
"docs/FORGELOOP_AUDIT.md",
|
|
85
86
|
"docs/DIAGNOSTIC_MODEL.md",
|
|
86
87
|
"docs/EXECUTION_TRACE.md",
|
|
87
88
|
"docs/CODE_ATTESTATION.md",
|
|
@@ -121,7 +122,14 @@
|
|
|
121
122
|
"!src/core/workflow-compatibility.js",
|
|
122
123
|
"!src/core/cli-metadata.js",
|
|
123
124
|
"LICENSE",
|
|
124
|
-
"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"
|
|
125
133
|
],
|
|
126
134
|
"scripts": {
|
|
127
135
|
"test": "node scripts/run-tests.js",
|
|
@@ -183,7 +191,9 @@
|
|
|
183
191
|
"mcp:test:clean": "node scripts/run-mcp-clean-tests.mjs",
|
|
184
192
|
"release:quick": "node scripts/run-rc-release.mjs",
|
|
185
193
|
"release:rc:check": "node scripts/check-rc-release.mjs",
|
|
186
|
-
"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"
|
|
187
197
|
},
|
|
188
198
|
"devDependencies": {
|
|
189
199
|
"c8": "^12.0.0",
|
|
@@ -193,7 +203,7 @@
|
|
|
193
203
|
},
|
|
194
204
|
"dependencies": {
|
|
195
205
|
"@typesafe-ai/sdk": "0.6.0",
|
|
196
|
-
"smol-toml": "1.
|
|
206
|
+
"smol-toml": "1.9.0"
|
|
197
207
|
},
|
|
198
208
|
"exports": {
|
|
199
209
|
".": "./src/cli.js",
|
|
@@ -42,6 +42,12 @@ Runtime registries and validators outrank canonical protocol docs; canonical doc
|
|
|
42
42
|
|
|
43
43
|
In ForgeLoop's own source repository, use \`node src/cli.js\`. In a consumer repository, use that repository's configured local invocation. Never silently install or upgrade ForgeLoop, and never use a stale global CLI when repository-local code exists. If compatibility is uncertain, inspect \`protocol-info --json\`.
|
|
44
44
|
|
|
45
|
+
## ForgeLoopAudit Workspace
|
|
46
|
+
|
|
47
|
+
ForgeLoopAudit is maintained at \`ForgeLoopAudit/\` inside the ForgeLoop repository, replacing the standalone repository and sibling path \`../ForgeLoopAudit\`. ForgeLoop is its source and contribution home. This source layout is not a prerequisite for consumer projects or npm installations. Audit remains a read-only auditor with its own package, documentation, build, and verification commands; it is not included in the core ForgeLoop npm package.
|
|
48
|
+
|
|
49
|
+
Resolve the target root before running commands. For core work, stay at the ForgeLoop root and use \`node src/cli.js\`. For Audit work, enter \`ForgeLoopAudit/\`, read its own project instructions and \`README.md\`, and resolve its configured ForgeLoop runtime there. Audit development uses \`npm run dev:web\`; its full verification uses \`npm run verify:full\`, both from the Audit root. Do not apply the parent's CLI path blindly in the child directory or merge their task state. A directory move does not rebind receipts, workspace bindings, or stored project paths; inspect affected artifacts through supported tooling and never rewrite protocol state to repair a moved root.
|
|
50
|
+
|
|
45
51
|
## Operating Workflow
|
|
46
52
|
|
|
47
53
|
1. Discover existing work with \`node src/cli.js task-list --json\`.
|
|
@@ -58,6 +64,14 @@ Respect active write claims. Do not steal, override, manually release, or edit o
|
|
|
58
64
|
|
|
59
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.
|
|
60
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
|
+
|
|
61
75
|
## Recovery Rules
|
|
62
76
|
|
|
63
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
|
+
}
|
|
@@ -27,6 +27,12 @@ Runtime registries and validators outrank canonical protocol docs; canonical doc
|
|
|
27
27
|
|
|
28
28
|
In ForgeLoop's own source repository, use `node src/cli.js`. In a consumer repository, use that repository's configured local invocation. Never silently install or upgrade ForgeLoop, and never use a stale global CLI when repository-local code exists. If compatibility is uncertain, inspect `protocol-info --json`.
|
|
29
29
|
|
|
30
|
+
## ForgeLoopAudit Workspace
|
|
31
|
+
|
|
32
|
+
ForgeLoopAudit is maintained at `ForgeLoopAudit/` inside the ForgeLoop repository, replacing the standalone repository and sibling path `../ForgeLoopAudit`. ForgeLoop is its source and contribution home. This source layout is not a prerequisite for consumer projects or npm installations. Audit remains a read-only auditor with its own package, documentation, build, and verification commands; it is not included in the core ForgeLoop npm package.
|
|
33
|
+
|
|
34
|
+
Resolve the target root before running commands. For core work, stay at the ForgeLoop root and use `node src/cli.js`. For Audit work, enter `ForgeLoopAudit/`, read its own project instructions and `README.md`, and resolve its configured ForgeLoop runtime there. Audit development uses `npm run dev:web`; its full verification uses `npm run verify:full`, both from the Audit root. Do not apply the parent's CLI path blindly in the child directory or merge their task state. A directory move does not rebind receipts, workspace bindings, or stored project paths; inspect affected artifacts through supported tooling and never rewrite protocol state to repair a moved root.
|
|
35
|
+
|
|
30
36
|
## Operating Workflow
|
|
31
37
|
|
|
32
38
|
1. Discover existing work with `node src/cli.js task-list --json`.
|
|
@@ -43,6 +49,14 @@ Respect active write claims. Do not steal, override, manually release, or edit o
|
|
|
43
49
|
|
|
44
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.
|
|
45
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
|
+
|
|
46
60
|
## Recovery Rules
|
|
47
61
|
|
|
48
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`.
|