Skip to content

Commit 28d045e

Browse files
authored
[Issue #114] ADR for governance model (#120)
* refactor(website): Updates format of ADRs * feat(website): Adds ADR for governance model
1 parent 29717ef commit 28d045e

17 files changed

Lines changed: 112 additions & 123 deletions

website/src/content/docs/decisions/adr-template.md

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,9 @@ description: ADR documenting the decision to use <decision outcome> for <decisio
55
draft: true
66
---
77

8-
## Summary
9-
10-
### Problem statement
11-
128
[A few brief sentences describing the decision that needs to be made]
139

14-
### Decision outcome
10+
## Decision
1511

1612
[Brief summary of what was decided]
1713

@@ -20,7 +16,7 @@ draft: true
2016
- **Negative consequences**
2117
- [Negative consequence of decision]
2218

23-
### Decision drivers
19+
### Criteria
2420

2521
<!-- Optional - Remove if unused -->
2622

website/src/content/docs/decisions/adr/0001-using-adrs.md

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,9 @@ title: Using ADRs
33
description: ADR to document the use of ADRs to record decisions.
44
---
55

6-
## Summary
7-
8-
### Problem statement
9-
106
What is the best way to document key architectural decisions made within the project so that future contributors can understand the rationale behind those decisions?
117

12-
### Decision outcome
8+
## Decision
139

1410
We've decided to use Architecture Decision Records (ADRs) as described in [Recording decisions](/decisions/overview). These records will be published on the website for this project.
1511

@@ -22,7 +18,7 @@ We've decided to use Architecture Decision Records (ADRs) as described in [Recor
2218
- It may be harder for folks to create decision records if they are not familiar with markdown or GitHub
2319
- We'll need to spend time keeping these decision records up-to-date, so they aren't inaccurate
2420

25-
### Decision drivers
21+
### Criteria
2622

2723
- **Transparency:** We want our decisions to be transparent to project stakeholders.
2824
- **Discoverability:** We want our decisions to be easily discoverable by project maintainers and external stakeholders.

website/src/content/docs/decisions/adr/0002-website-framework.md

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,9 @@ title: Website framework
33
description: ADR documenting the decision to use Astro's Starlight template for project documentation.
44
---
55

6-
## Summary
7-
8-
### Problem statement
9-
106
We need a framework to build and maintain our documentation site for the protocol that balances simplicity, extensibility, and dynamic content generation. The solution should align with existing tooling for the project and be widely supported within the developer community.
117

12-
### Decision outcome
8+
## Decision
139

1410
We chose [Astro's Starlight template](https://starlight.astro.build/) for our documentation framework.
1511

@@ -22,7 +18,7 @@ We chose [Astro's Starlight template](https://starlight.astro.build/) for our do
2218
- Fewer prebuilt themes than MkDocs or Hugo.
2319
- Less popular than MkDocs or Next.js, resulting in potentially fewer community resources.
2420

25-
### Decision drivers
21+
### Criteria
2622

2723
- **Simplicity:** Easy to set up, maintain, and host documentation.
2824
- **Extensibility:** Allows customization and supports reusable components.

website/src/content/docs/decisions/adr/0003-website-hosting.md

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,9 @@ title: GitHub website hosting
33
description: ADR documenting the decision to use GitHub Pages as the hosting platform for project documentation.
44
---
55

6-
## Summary
7-
8-
### Problem statement
9-
106
We need a hosting platform for our documentation site that is cost-effective, simple to set up, and integrates seamlessly with our GitHub-based development workflow.
117

12-
### Decision outcome
8+
## Decision
139

1410
We chose GitHub Pages as the hosting platform for our documentation site.
1511

@@ -24,7 +20,7 @@ If SSR or server-side functions (e.g. to process form submissions) become a requ
2420
- Does not support server-side rendering (SSR) or dynamic functions, which may limit future enhancements.
2521
- PR previews aren't supported by default.
2622

27-
### Decision drivers
23+
### Criteria
2824

2925
- **Cost:** Free or very low cost to host.
3026
- **Simplicity:** Easy setup with built-in SSL and custom domain support.
@@ -86,7 +82,9 @@ Cloudflare Pages is best if:
8682
- More complex setup for advanced features
8783
- Costs money if we exceed free plan (though less than Netlify or Vercel)
8884

89-
### Option 3: AWS Amplify, S3, and CloudFront
85+
### Option 3: AWS
86+
87+
Publish the site using AWS amplify with S3 static site hosting and CloudFront CDN.
9088

9189
:::note[Bottom line]
9290
AWS hosting is best if:

website/src/content/docs/decisions/adr/0004-specification-framework.md

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,9 @@ title: Specification framework
33
description: ADR documenting the decision to use TypeSpec as the framework for defining the grant protocol and data standard.
44
---
55

6-
## Summary
7-
8-
### Problem statement
9-
106
We need a framework to define the specification for the grant protocol and data standard that prioritizes modularity, extensibility, validation, compatibility with developer tools, and widespread adoption.
117

12-
### Decision outcome
8+
## Decision
139

1410
We chose TypeSpec as the framework for defining the grant protocol and data standard, mainly for its ability to define types and API services using a modular approach that can transpile to more common formats like JSON schema and OpenAPI.
1511

@@ -23,7 +19,7 @@ We chose TypeSpec as the framework for defining the grant protocol and data stan
2319
- Steeper learning curve compared to simpler formats.
2420
- Requires more upfront setup for developer tooling.
2521

26-
### Decision drivers
22+
### Criteria
2723

2824
- **Validation:** Specification format can be used to validate that implementations comply with the standard.
2925
- **Modularity:** Specification components can be broken into reusable modules.

website/src/content/docs/decisions/adr/0005-protocol-scope.md

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,11 @@ title: Protocol design and scope
33
description: ADR documenting the decision to use FHIR as a mental model for the grant protocol.
44
---
55

6-
## Summary
6+
We need to determine the scope of our grant protocol specification. Existing protocols range from simple data standards (like GeoJSON) to comprehensive specifications that include both data models and standardized operations (like FHIR and ActivityPub).
77

8-
### Problem statement
8+
## Decision
99

10-
The definition of a “protocol” and the scope of its specification depends heavily on sources from which we’re drawing inspiration. Some only focus on data standards (e.g., GeoJSON) without defining the kinds of operations that data supports. Others define both data standards and operations, but scope them in different ways (e.g., FHIR and ActivityPub).
11-
12-
_Which existing protocol should we use as a mental model for the grant protocol? How does that impact the scope or design of our specification?_
13-
14-
### Decision outcome
15-
16-
We decided to adopt a combined approach inspired by **FHIR**, defining both standard models for grant data and a minimum set of client-to-server operations that grant platforms should support on that data (e.g. search for and applying to grant opportunities).
10+
We chose to adopt an approach inspired by **FHIR**, defining both standard models for grant data and a minimum set of client-to-server operations that grant platforms should support (e.g. searching for and applying to grant opportunities).
1711

1812
- **Positive consequences**
1913
- Enables third-parties to build tools that are interoperable with any platform that adopts the protocol.
@@ -23,7 +17,7 @@ We decided to adopt a combined approach inspired by **FHIR**, defining both stan
2317
- The protocol's client-to-server operations might be too complex for some grant platforms to adopt and too restrictive for others that want to support additional functionality.
2418
- Some grant platforms may be hesitant to adopt the protocol if the required operations differ significantly from their existing API.
2519

26-
### Decision drivers
20+
### Criteria
2721

2822
- **Interoperability**: Make it easier for third-party developers to build tools that work with multiple grant platforms.
2923
- **Scalability**: Make it easier to support a large number of grant platforms.

website/src/content/docs/decisions/adr/0006-protocol-compliance.md

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,9 @@ title: Protocol compliance
33
description: ADR documenting the decision to define compliance as implementing all required routes and models.
44
---
55

6-
## Summary
7-
8-
### Problem statement
9-
106
In addition to defining the protocol, we need to define what it means to “comply” with that protocol. This definition should guarantee some consistency across implementations, while also enabling platforms to extend the spec to meet their unique needs.
117

12-
_What definition of compliance balances consistency with flexibility across implementations?_
13-
14-
### Decision outcome
8+
## Decision
159

1610
We define compliance as implementing all required models and routes from the base spec while allowing implementations to support additional routes and models outside the spec.
1711

@@ -32,6 +26,10 @@ We define compliance as implementing all required models and routes from the bas
3226

3327
### Options considered
3428

29+
- **Strict implementation:** APIs must implement the base spec exactly as defined.
30+
- **Full implementation with extensions:** APIs must implement all required routes from the base spec (with approved extensions), and may also define additional routes.
31+
- **Partial implementation:** APIs only need to implement a subset of required routes.
32+
3533
## Evaluation
3634

3735
### Side-by-side
@@ -45,7 +43,7 @@ We define compliance as implementing all required models and routes from the bas
4543

4644
### Option 1: Strict implementation
4745

48-
Each valid input to the implementation spec is also a valid input to the base spec. The implementation does not define additional routes or types that aren't defined by the base spec.
46+
The API implementation must match the base spec exactly.
4947

5048
:::note[Bottom line]
5149
Option 1 is best if:
@@ -63,7 +61,7 @@ Option 1 is best if:
6361

6462
### Option 2: Full implementation with extensions
6563

66-
The implementation spec includes _all_ of the required routes and types from the base spec, these routes and models provide valid inputs to the base spec. But a given implementation may define additional routes and models outside the base spec.
64+
The API implementation includes all required routes from the base spec (with approved extensions). It may also define additional routes that are not specified in the base spec, as long as they don't conflict with the base spec.
6765

6866
:::note[Bottom line]
6967
Option 2 is best if:
@@ -82,7 +80,7 @@ Option 2 is best if:
8280

8381
### Option 3: Partial implementation
8482

85-
Implementation doesn't have to implement all required routes and models, but the routes and models it implements do need to provide valid inputs to the base spec.
83+
The API implementation doesn't have to implement all required routes and models, but the routes and models it implements can't conflict with the base spec.
8684

8785
:::note[Bottom line]
8886
Option 3 is best if:

website/src/content/docs/decisions/adr/0007-initial-models-and-routes.md

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,9 @@ title: v0.1.0 models and routes
33
description: This ADR documents the decision to focus on the models and routes needed for search.
44
---
55

6-
## Summary
6+
We need to determine which models and routes should be included in the v0.1.0 release of the protocol. A good v0.1.0 release should be immediately useful, while also laying the groundwork for future expansion.
77

8-
### Problem statement
9-
10-
The v0.1.0 release of the protocol should include enough functionality that we demonstrate immediate value, without prematurely defining requirements that may discourage adoption.
11-
12-
_Which models and routes should the v0.1.0 release of the protocol include?_
13-
14-
### Decision outcome
8+
## Decision
159

1610
We'll limit the scope of the v0.1.0 protocol to the models and routes needed to support search, while also defining foundational types that make it easier to extend the base spec in the future.
1711

@@ -25,7 +19,7 @@ We'll limit the scope of the v0.1.0 protocol to the models and routes needed to
2519
- Doesn't (yet) support key features like applications and reporting.
2620
- May be harder to make changes once platforms have started adopting the protocol.
2721

28-
### Decision drivers
22+
### Criteria
2923

3024
- Encourage early adoption by multiple platforms and stakeholders.
3125
- Establish foundational elements without over-committing to complex use cases.
@@ -36,7 +30,7 @@ We'll limit the scope of the v0.1.0 protocol to the models and routes needed to
3630

3731
#### Data types
3832

39-
1. **Base types:** Includes essential reusable fields such as currency, GeoJSON, and custom fields.
33+
1. **Base types and fields:** Defines essential types like UUIDs and dates; reusable fields like currency and custom fields; and other foundational patterns like pagination and filtering.
4034
2. **Grant opportunity models:** Models describing the metadata for grant opportunities.
4135
3. **Individuals and organizations:** Basic models for describing grantors and grant seekers.
4236
4. **Application forms and submissions:** Models describing application forms and submissions.

website/src/content/docs/decisions/adr/0008-custom-fields.md

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,11 @@ title: Custom fields
33
description: ADR documenting the approach to defining custom fields.
44
---
55

6-
## Summary
7-
8-
### Problem statement
9-
106
While the protocol defines a minimum set of fields that are consistent across all implementations, it should also provide a consistent mechanism for defining custom fields that may be shared by some, but not all, implementations.
117

128
_How can the specification allow developers to define custom fields for their own implementations, while also enabling other implementations to re-use them?_
139

14-
### Sub-questions
10+
### Questions
1511

1612
- Should custom fields have a single `value` property with an associated `type`, or multiple type-based properties (e.g., `stringValue`, `arrayValue`)?
1713
- Should the `customFields` property be an array of `CustomField` models? Or an object where each value is a `CustomField` model?

website/src/content/docs/decisions/adr/0009-monetary-fields.md

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,9 @@ title: Monetary fields
33
description: ADR documenting the decision to follow PayPal's format for representing monetary values.
44
---
55

6-
## Summary
7-
8-
### Problem statement
9-
106
We need to choose a format for representing monetary values that balances precision, readability, and flexibility.
117

12-
### Decision outcome
8+
## Decision
139

1410
We decided to represent monetary values using decimal string representation for the `amount` and an ISO 4217-compliant `currencyCode` field to indicate the denomination. This format is also used by PayPal, ApplePay, Google Wallet and other well known APIs that support monetary transactions.
1511

@@ -32,7 +28,7 @@ Here's an example of that format:
3228
- **Precision issues:** Parsing string representations into numeric types could also introduce precision issues to individual implementations.
3329
- **Numeric operations:** Numeric operations (i.e. sorting, aggregating, etc.) will be harder to do with the raw JSON output.
3430

35-
### Decision drivers
31+
### Criteria
3632

3733
- Avoids common errors with floating point precision.
3834
- Easy for API consumers to understand and debug.

0 commit comments

Comments
 (0)