@the-rfp-hub/standard 1.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.
Files changed (77) hide show
  1. package/ARTIFACTS.md +85 -0
  2. package/CHANGELOG.md +264 -0
  3. package/LICENSE +121 -0
  4. package/NORMATIVE.md +77 -0
  5. package/PROCESS.md +239 -0
  6. package/README.md +83 -0
  7. package/conformance/README.md +52 -0
  8. package/conformance/v1.0.0/fail/deadline-fixed-date-null.json +22 -0
  9. package/conformance/v1.0.0/fail/deadline-fixed-without-date.json +21 -0
  10. package/conformance/v1.0.0/fail/eligibility-value-not-string.json +21 -0
  11. package/conformance/v1.0.0/fail/empty-sponsoring-organizations.json +11 -0
  12. package/conformance/v1.0.0/fail/missing-matching-type-block.json +14 -0
  13. package/conformance/v1.0.0/fail/missing-required-properties.json +5 -0
  14. package/conformance/v1.0.0/fail/missing-sponsoring-organizations.json +10 -0
  15. package/conformance/v1.0.0/fail/one-block-per-fundingtype.json +18 -0
  16. package/conformance/v1.0.0/fail/source-url-removed.json +17 -0
  17. package/conformance/v1.0.0/fail/status-not-in-enum.json +15 -0
  18. package/conformance/v1.0.0/fail/unknown-top-level-property.json +16 -0
  19. package/conformance/v1.0.0/fail/wrong-fundingtype-value.json +14 -0
  20. package/conformance/v1.0.0/fail/wrong-specversion.json +15 -0
  21. package/conformance/v1.0.0/pass/deadline-rolling-without-date.json +23 -0
  22. package/conformance/v1.0.0/pass/full-featured.json +137 -0
  23. package/conformance/v1.0.0/pass/grant-funding-mechanisms-array.json +27 -0
  24. package/conformance/v1.0.0/pass/grant.json +45 -0
  25. package/conformance/v1.0.0/pass/hackathon.json +67 -0
  26. package/conformance/v1.0.0/pass/minimal-required-only.json +15 -0
  27. package/conformance/v1.0.0/pass/self-identification.json +18 -0
  28. package/conformance/v1.0.0/pass/source-empty-object.json +30 -0
  29. package/dist/index.cjs +902 -0
  30. package/dist/index.cjs.map +1 -0
  31. package/dist/index.d.cts +661 -0
  32. package/dist/index.d.ts +661 -0
  33. package/dist/index.js +896 -0
  34. package/dist/index.js.map +1 -0
  35. package/meta/rfphub-schema.meta.json +131 -0
  36. package/package.json +56 -0
  37. package/registries/deadline-labels.json +38 -0
  38. package/registries/eligibility-keys.json +46 -0
  39. package/registries/entry.schema.json +48 -0
  40. package/registries/index.json +44 -0
  41. package/registries/program-models.json +26 -0
  42. package/schemas/index.json +12 -0
  43. package/schemas/v1.0.0/BENCHMARK.md +160 -0
  44. package/schemas/v1.0.0/CROSSWALK.md +200 -0
  45. package/schemas/v1.0.0/FIELDS.md +530 -0
  46. package/schemas/v1.0.0/STATUS.md +81 -0
  47. package/schemas/v1.0.0/context.jsonld +86 -0
  48. package/schemas/v1.0.0/examples/01-hackathon-fundingmap_1200.json +181 -0
  49. package/schemas/v1.0.0/examples/02-hackathon-fundingmap_1197.json +122 -0
  50. package/schemas/v1.0.0/examples/03-hackathon-fundingmap_1095.json +114 -0
  51. package/schemas/v1.0.0/examples/04-grant-fundingmap_1459.json +67 -0
  52. package/schemas/v1.0.0/examples/05-hackathon-fundingmap_1210.json +97 -0
  53. package/schemas/v1.0.0/examples/06-hackathon-fundingmap_1340.json +91 -0
  54. package/schemas/v1.0.0/examples/07-hackathon-fundingmap_1093.json +89 -0
  55. package/schemas/v1.0.0/examples/08-hackathon-fundingmap_1091.json +89 -0
  56. package/schemas/v1.0.0/examples/09-hackathon-fundingmap_1094.json +89 -0
  57. package/schemas/v1.0.0/examples/10-grant-fundingmap_600.json +65 -0
  58. package/schemas/v1.0.0/examples/11-hackathon-fundingmap_1389.json +83 -0
  59. package/schemas/v1.0.0/examples/12-hackathon-fundingmap_1356.json +83 -0
  60. package/schemas/v1.0.0/examples/13-grant-fundingmap_1458.json +59 -0
  61. package/schemas/v1.0.0/examples/14-grant-fundingmap_1059.json +57 -0
  62. package/schemas/v1.0.0/examples/15-hackathon-fundingmap_1430.json +82 -0
  63. package/schemas/v1.0.0/examples/16-hackathon-fundingmap_1092.json +79 -0
  64. package/schemas/v1.0.0/examples/17-hackathon-fundingmap_1277.json +75 -0
  65. package/schemas/v1.0.0/examples/18-hackathon-fundingmap_1302.json +72 -0
  66. package/schemas/v1.0.0/examples/19-hackathon-fundingmap_1231.json +76 -0
  67. package/schemas/v1.0.0/examples/20-hackathon-fundingmap_1235.json +74 -0
  68. package/schemas/v1.0.0/examples/21-hackathon-fundingmap_1219.json +73 -0
  69. package/schemas/v1.0.0/examples/22-hackathon-fundingmap_1254.json +72 -0
  70. package/schemas/v1.0.0/examples/23-grant-fundingmap_491.json +57 -0
  71. package/schemas/v1.0.0/examples/24-hackathon-fundingmap_1358.json +73 -0
  72. package/schemas/v1.0.0/examples/25-grant-fundingmap_1021.json +57 -0
  73. package/schemas/v1.0.0/examples/26-bounty-fundingmap_1453.json +57 -0
  74. package/schemas/v1.0.0/examples/27-accelerator-fundingmap_1291.json +56 -0
  75. package/schemas/v1.0.0/examples/28-rfp-fundingmap_1242.json +43 -0
  76. package/schemas/v1.0.0/opportunity.schema.json +758 -0
  77. package/spec.config.json +11 -0
@@ -0,0 +1,137 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/The-RFP-Hub/the-rfp-hub/main/packages/standard/schemas/v1.0.0/opportunity.schema.json",
3
+ "specVersion": "1.0.0",
4
+ "id": "conformance:full",
5
+ "fundingType": "rfp",
6
+ "title": "OPSEC Ratings System & Coalition",
7
+ "description": "A milestone-paid RFP with no application portal, multiple labelled deadlines, structured eligibility and a service-agreement arrangement. Exercises every field the re-cut added.",
8
+ "summary": "Milestone-paid RFP run by an operator on a sponsor's behalf.",
9
+ "status": "open",
10
+ "sponsoringOrganizations": [
11
+ {
12
+ "name": "Example Foundation",
13
+ "slug": "example-foundation",
14
+ "type": "foundation",
15
+ "description": "The issuing/backing entity. Not necessarily where the money comes from.",
16
+ "website": "https://example.org",
17
+ "ecosystems": [
18
+ "Ethereum"
19
+ ],
20
+ "contacts": [
21
+ {
22
+ "name": "A. Steward",
23
+ "role": "Program owner",
24
+ "telegram": "@example_steward",
25
+ "email": "grants@example.org"
26
+ },
27
+ {}
28
+ ]
29
+ },
30
+ {
31
+ "name": "Second Backer"
32
+ }
33
+ ],
34
+ "operatingOrganizations": [
35
+ {
36
+ "name": "Example Operations Co",
37
+ "type": "company"
38
+ }
39
+ ],
40
+ "source": {
41
+ "publisher": "example-foundation",
42
+ "submittedBy": "example-foundation",
43
+ "submittedAt": "2026-07-01T09:00:00.000Z",
44
+ "ingestedVia": "publisher_api",
45
+ "originalId": "rfp-2026-07",
46
+ "verifiedAgainstSource": true,
47
+ "verifiedAt": "2026-07-20T09:00:00.000Z",
48
+ "snapshotUrl": "ipfs://bafyexamplesnapshot"
49
+ },
50
+ "ecosystems": [
51
+ "Ethereum",
52
+ "Optimism"
53
+ ],
54
+ "networks": [
55
+ "optimism"
56
+ ],
57
+ "categories": [
58
+ "Public Goods",
59
+ "Security"
60
+ ],
61
+ "tags": [
62
+ "opsec",
63
+ "ratings"
64
+ ],
65
+ "eligibility": {
66
+ "stage": "Teams with a shipped product and a public track record",
67
+ "geography": "Global",
68
+ "jurisdiction": "Excludes OFAC-sanctioned jurisdictions",
69
+ "entityType": "Registered legal entity required before payout",
70
+ "compliance": "KYB and quarterly reporting required"
71
+ },
72
+ "prerequisites": "A proposal must include: prior track record, technical approach, a milestone plan with amounts, and disclosure of any conflicts.",
73
+ "resourceLinks": "Original forum posting: https://forum.example.org/t/opsec-rfp/1 · Prior round retrospective: https://example.org/retro",
74
+ "serviceAgreement": "Runs as a rolling ~12-month engagement rather than a one-off deliverable; renewal is decided at the end of each term by the sponsoring foundation.",
75
+ "applicationUrl": "https://forum.example.org/t/opsec-rfp/1",
76
+ "website": "https://example.org/opsec",
77
+ "logoUrl": "https://example.org/logo.png",
78
+ "bannerUrl": "https://example.org/banner.png",
79
+ "socialLinks": {
80
+ "twitter": "https://x.com/example",
81
+ "forum": "https://forum.example.org"
82
+ },
83
+ "funding": {
84
+ "currency": "USD",
85
+ "budget": 175000,
86
+ "allocated": 50000,
87
+ "minAward": 50000,
88
+ "maxAward": 75000
89
+ },
90
+ "milestones": [
91
+ {
92
+ "title": "Ratings framework published",
93
+ "amount": 50000,
94
+ "criteria": "Published methodology, reviewed by the coalition. Due within 8 weeks of kickoff."
95
+ },
96
+ {
97
+ "title": "Coalition assembled",
98
+ "amount": 50000,
99
+ "criteria": "At least five member organisations signed on."
100
+ },
101
+ {
102
+ "title": "First ratings round shipped",
103
+ "amount": 75000,
104
+ "criteria": "Ratings for twenty projects published with reproducible evidence."
105
+ }
106
+ ],
107
+ "opensAt": "2026-07-01T00:00:00.000Z",
108
+ "deadlines": [
109
+ {
110
+ "type": "fixed",
111
+ "date": "2026-08-15T23:59:59.000Z",
112
+ "label": "community feedback"
113
+ },
114
+ {
115
+ "type": "fixed",
116
+ "date": "2026-09-30T23:59:59.000Z",
117
+ "label": "application"
118
+ },
119
+ {
120
+ "type": "rolling",
121
+ "label": "reviewed quarterly after the first round"
122
+ }
123
+ ],
124
+ "postedAt": "2026-06-28T12:00:00.000Z",
125
+ "createdAt": "2026-07-01T09:00:00.000Z",
126
+ "updatedAt": "2026-07-20T09:00:00.000Z",
127
+ "rfp": {
128
+ "scope": "Design, publish and operate an operational-security ratings system. In scope: methodology, coalition governance, first ratings round. Out of scope: custody of user funds, paid placement of any kind.",
129
+ "requirements": [
130
+ "Methodology must be reproducible from public evidence.",
131
+ "All ratings must be published under an open licence."
132
+ ]
133
+ },
134
+ "extensions": {
135
+ "example.internalId": "RFP-2026-07"
136
+ }
137
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "specVersion": "1.0.0",
3
+ "id": "conformance:mechanisms",
4
+ "fundingType": "grant",
5
+ "title": "Co-occurring funding mechanisms",
6
+ "description": "A funder offering a fixed grant and a matching grant in the same programme. The scalar fundingMechanism could not express this; the array can, and 'matching' is now a registered value.",
7
+ "status": "open",
8
+ "sponsoringOrganizations": [
9
+ {
10
+ "name": "Example Foundation"
11
+ },
12
+ {
13
+ "name": "Matching Partner"
14
+ }
15
+ ],
16
+ "source": {},
17
+ "funding": {
18
+ "currency": "USD",
19
+ "budget": 500000
20
+ },
21
+ "grant": {
22
+ "fundingMechanisms": ["proactive", "matching"],
23
+ "programModel": "program",
24
+ "milestoneBased": true,
25
+ "recurring": false
26
+ }
27
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "specVersion": "1.0.0",
3
+ "id": "conformance:grant",
4
+ "fundingType": "grant",
5
+ "title": "Example Ecosystem Grants",
6
+ "description": "An ordinary open grants programme with an application deadline and a funding envelope. Adapted from the pre-re-cut valid fixture of the same name.",
7
+ "summary": "Open grants for ecosystem tooling.",
8
+ "status": "open",
9
+ "sponsoringOrganizations": [
10
+ {
11
+ "name": "Example Foundation",
12
+ "slug": "example-foundation",
13
+ "type": "foundation",
14
+ "website": "https://example.org"
15
+ }
16
+ ],
17
+ "source": {
18
+ "publisher": "example-foundation",
19
+ "ingestedVia": "publisher_api",
20
+ "verifiedAgainstSource": null
21
+ },
22
+ "ecosystems": ["Ethereum", "Optimism"],
23
+ "categories": ["Developer Tooling"],
24
+ "applicationUrl": "https://example.org/apply",
25
+ "funding": {
26
+ "currency": "USD",
27
+ "budget": 250000,
28
+ "allocated": 40000,
29
+ "minAward": 5000,
30
+ "maxAward": 50000
31
+ },
32
+ "opensAt": "2026-01-01T00:00:00.000Z",
33
+ "deadlines": [
34
+ {
35
+ "type": "fixed",
36
+ "date": "2026-12-31T23:59:59.000Z",
37
+ "label": "application"
38
+ }
39
+ ],
40
+ "grant": {
41
+ "fundingMechanisms": ["proactive"],
42
+ "milestoneBased": true,
43
+ "recurring": false
44
+ }
45
+ }
@@ -0,0 +1,67 @@
1
+ {
2
+ "specVersion": "1.0.0",
3
+ "id": "conformance:hackathon",
4
+ "fundingType": "hackathon",
5
+ "title": "Example Hackathon",
6
+ "description": "A hackathon whose registration deadline, submission deadline and event boundaries all live in the shared deadlines array. Adapted from the pre-re-cut valid fixture of the same name.",
7
+ "status": "upcoming",
8
+ "sponsoringOrganizations": [
9
+ {
10
+ "name": "Example Events",
11
+ "type": "company"
12
+ }
13
+ ],
14
+ "source": {
15
+ "ingestedVia": "import",
16
+ "originalId": "evt-1"
17
+ },
18
+ "ecosystems": ["Ethereum"],
19
+ "applicationUrl": "https://example.org/hack",
20
+ "funding": {
21
+ "currency": "USD",
22
+ "budget": 100000
23
+ },
24
+ "deadlines": [
25
+ {
26
+ "type": "fixed",
27
+ "date": "2026-05-01T23:59:59.000Z",
28
+ "label": "registration"
29
+ },
30
+ {
31
+ "type": "fixed",
32
+ "date": "2026-05-10T12:00:00.000Z",
33
+ "label": "event start"
34
+ },
35
+ {
36
+ "type": "fixed",
37
+ "date": "2026-05-12T12:00:00.000Z",
38
+ "label": "submission"
39
+ },
40
+ {
41
+ "type": "fixed",
42
+ "date": "2026-05-12T18:00:00.000Z",
43
+ "label": "event end"
44
+ }
45
+ ],
46
+ "hackathon": {
47
+ "location": "Berlin, Germany",
48
+ "online": true,
49
+ "tracks": ["DeFi", "Infra"],
50
+ "prizes": [
51
+ {
52
+ "track": "DeFi",
53
+ "amount": 25000,
54
+ "currency": "USD"
55
+ },
56
+ {
57
+ "track": "Infra",
58
+ "amount": 25000,
59
+ "currency": "USD"
60
+ }
61
+ ],
62
+ "teamSize": {
63
+ "min": 1,
64
+ "max": 5
65
+ }
66
+ }
67
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "specVersion": "1.0.0",
3
+ "id": "conformance:minimal",
4
+ "fundingType": "grant",
5
+ "title": "Minimal conforming grant",
6
+ "description": "Carries exactly the eight required top-level properties plus the type block the discriminator demands. Nothing optional is present, and source is the empty object the re-cut permits.",
7
+ "status": "open",
8
+ "sponsoringOrganizations": [
9
+ {
10
+ "name": "Example Foundation"
11
+ }
12
+ ],
13
+ "source": {},
14
+ "grant": {}
15
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/The-RFP-Hub/the-rfp-hub/main/packages/standard/schemas/v1.0.0/opportunity.schema.json",
3
+ "@context": "https://raw.githubusercontent.com/The-RFP-Hub/the-rfp-hub/main/packages/standard/schemas/v1.0.0/context.jsonld",
4
+ "@type": "schema:Grant",
5
+ "specVersion": "1.0.0",
6
+ "id": "conformance:self-id",
7
+ "fundingType": "grant",
8
+ "title": "Self-identifying instance",
9
+ "description": "Carries $schema, @context and @type at the top level. All three are permitted against additionalProperties: false so a generic validator can discover the contract and a JSON-LD processor can consume the record, and all three are otherwise ignored by validation.",
10
+ "status": "open",
11
+ "sponsoringOrganizations": [
12
+ {
13
+ "name": "Example Foundation"
14
+ }
15
+ ],
16
+ "source": {},
17
+ "grant": {}
18
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "specVersion": "1.0.0",
3
+ "id": "conformance:source-empty",
4
+ "fundingType": "rfp",
5
+ "title": "Rich record with no provenance at all",
6
+ "description": "The provenance block has no required property since source.url was removed. A fully populated record may still carry \"source\": {} — provenance completeness is an ingestion-policy concern, not a validation one.",
7
+ "status": "open",
8
+ "sponsoringOrganizations": [
9
+ {
10
+ "name": "Example DAO"
11
+ }
12
+ ],
13
+ "source": {},
14
+ "applicationUrl": "https://forum.example.org/t/rfp-thread/42",
15
+ "ecosystems": ["Ethereum"],
16
+ "funding": {
17
+ "currency": "USD",
18
+ "budget": 120000
19
+ },
20
+ "deadlines": [
21
+ {
22
+ "type": "fixed",
23
+ "date": "2026-09-30T23:59:59.000Z",
24
+ "label": "application"
25
+ }
26
+ ],
27
+ "rfp": {
28
+ "scope": "Build and operate the thing. Out of scope: anything requiring custody of user funds."
29
+ }
30
+ }