Skip to content

Commit 62188c8

Browse files
authored
Merge pull request #141 from aicodingstack/agent/project-review-foundation
feat: establish project maintenance and trust foundation
2 parents aa5a068 + ae83e1d commit 62188c8

96 files changed

Lines changed: 965 additions & 1037 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/CODEOWNERS

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,18 @@
1515
/manifests/**/*.json @aicodingstack/maintainers
1616

1717
# Schema files - require careful review as they affect validation
18-
/manifests/schemas/**/*.json @aicodingstack/maintainers
18+
/manifests/$schemas/**/*.json @aicodingstack/maintainers
1919

2020
# Build and validation scripts - require careful review
21-
/scripts/**/*.mjs @aicodingstack/maintainers
21+
/scripts/**/*.ts @aicodingstack/maintainers
2222

2323
# GitHub Actions workflows - require review for security
2424
/.github/workflows/**/*.yml @aicodingstack/maintainers
2525

2626
# Configuration files
2727
/package.json @aicodingstack/maintainers
2828
/tsconfig.json @aicodingstack/maintainers
29-
/next.config.mjs @aicodingstack/maintainers
29+
/next.config.ts @aicodingstack/maintainers
3030
/wrangler.toml @aicodingstack/maintainers
3131

3232
# Documentation - can be reviewed by broader team

.github/ISSUE_TEMPLATE/config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ contact_links:
77
url: https://github.com/aicodingstack/aicodingstack.io/blob/main/docs
88
about: Read the technical documentation
99
- name: Schema Documentation
10-
url: https://github.com/aicodingstack/aicodingstack.io/tree/main/manifests/schemas
10+
url: https://github.com/aicodingstack/aicodingstack.io/tree/main/manifests/%24schemas
1111
about: View JSON schema documentation for manifests

.github/ISSUE_TEMPLATE/metadata_contribution.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ body:
88
value: |
99
Thank you for contributing to AI Coding Stack! This form will guide you through adding or updating metadata for AI coding tools.
1010
11-
Please check our [Schema Documentation](https://github.com/aicodingstack/aicodingstack.io/tree/main/manifests/schemas) to understand the required fields.
11+
Please check our [Schema Documentation](https://github.com/aicodingstack/aicodingstack.io/tree/main/manifests/%24schemas) to understand the required fields.
1212
1313
- type: dropdown
1414
id: contribution-type
@@ -95,9 +95,9 @@ body:
9595
For **Providers**: Include supported models, API documentation
9696
9797
See schema files for complete field requirements:
98-
- [Model Schema](https://github.com/aicodingstack/aicodingstack.io/blob/main/manifests/schemas/model.schema.json)
99-
- [IDE Schema](https://github.com/aicodingstack/aicodingstack.io/blob/main/manifests/schemas/ide.schema.json)
100-
- [CLI Schema](https://github.com/aicodingstack/aicodingstack.io/blob/main/manifests/schemas/cli.schema.json)
98+
- [Model Schema](https://github.com/aicodingstack/aicodingstack.io/blob/main/manifests/%24schemas/model.schema.json)
99+
- [IDE Schema](https://github.com/aicodingstack/aicodingstack.io/blob/main/manifests/%24schemas/ide.schema.json)
100+
- [CLI Schema](https://github.com/aicodingstack/aicodingstack.io/blob/main/manifests/%24schemas/cli.schema.json)
101101
placeholder: |
102102
Example for a model:
103103
- Size: 175B parameters

.github/pull_request_template.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,9 @@ Closes #(issue number)
5555
<!-- Describe how you tested your changes -->
5656

5757
- [ ] Local build passes (`npm run build`)
58-
- [ ] All validation checks pass (`npm run validate:manifests`)
58+
- [ ] All validation checks pass (`npm run test:validate`)
5959
- [ ] URL validation passes (`npm run validate:urls`)
60-
- [ ] Linting passes (`npm run lint`)
60+
- [ ] Static analysis passes (`npm run biome:check`)
6161
- [ ] Spell check passes (`npm run spell`)
6262

6363
## Screenshots (if applicable)

.github/workflows/ci.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,9 @@ jobs:
108108
env:
109109
BUILD_TIME: ${{ github.event.head_commit.timestamp }}
110110

111+
- name: Verify generated source is current
112+
run: git diff --exit-code -- src/lib/generated
113+
111114
- name: Upload build artifacts
112115
uses: actions/upload-artifact@v6
113116
with:
@@ -125,8 +128,8 @@ jobs:
125128
steps:
126129
- name: Check all jobs
127130
run: |
128-
if [[ "${{ contains(needs.*.result, 'failure') }}" == "true" ]]; then
129-
echo "One or more CI jobs failed"
131+
if [[ "${{ contains(needs.*.result, 'failure') }}" == "true" || "${{ contains(needs.*.result, 'cancelled') }}" == "true" || "${{ contains(needs.*.result, 'skipped') }}" == "true" ]]; then
132+
echo "One or more required CI jobs failed, were cancelled, or were skipped"
130133
exit 1
131134
fi
132135
echo "All CI jobs passed successfully"

.github/workflows/deploy-staging.yml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
name: Deploy Staging
22

33
on:
4-
push:
5-
branches: [develop]
4+
workflow_dispatch:
65

76
concurrency:
87
group: staging-deploy
@@ -38,7 +37,7 @@ jobs:
3837
- name: Build with OpenNext
3938
run: npm run build
4039
env:
41-
BUILD_TIME: ${{ github.event.head_commit.timestamp }}
40+
BUILD_TIME: ${{ github.event.repository.updated_at }}
4241

4342
- name: Deploy to Staging
4443
run: npx --no-install opennextjs-cloudflare deploy --env staging
Lines changed: 14 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,19 @@
1-
name: Scheduled Checks
1+
name: Scheduled URL Checks
22

33
on:
44
schedule:
55
# Run URL validation every Monday at 00:00 UTC
66
- cron: '0 0 * * 1'
7-
# Run GitHub stars update daily at 06:00 UTC
8-
- cron: '0 6 * * *'
97
workflow_dispatch: # Allow manual triggering
108

119
permissions:
12-
contents: write
13-
pull-requests: write
10+
contents: read
1411
issues: write
1512

1613
jobs:
1714
validate-urls:
1815
name: Validate URLs
1916
runs-on: ubuntu-latest
20-
if: github.event.schedule == '0 0 * * 1' || github.event_name == 'workflow_dispatch'
2117
steps:
2218
- name: Checkout code
2319
uses: actions/checkout@v6
@@ -37,7 +33,7 @@ jobs:
3733
continue-on-error: true
3834

3935
- name: Create issue if URLs are broken
40-
if: failure()
36+
if: steps.validate.outcome == 'failure'
4137
uses: actions/github-script@v8
4238
with:
4339
script: |
@@ -75,78 +71,27 @@ jobs:
7571
body: body,
7672
labels: ['automated', 'url-validation', 'maintenance']
7773
});
74+
} else {
75+
await github.rest.issues.update({
76+
owner: context.repo.owner,
77+
repo: context.repo.repo,
78+
issue_number: issues.data[0].number,
79+
body: body
80+
});
7881
}
7982
80-
update-github-stars:
81-
name: Update GitHub Stars
82-
runs-on: ubuntu-latest
83-
if: github.event.schedule == '0 6 * * *' || github.event_name == 'workflow_dispatch'
84-
steps:
85-
- name: Checkout code
86-
uses: actions/checkout@v6
87-
88-
- name: Setup Node.js
89-
uses: actions/setup-node@v6
90-
with:
91-
node-version: '22'
92-
cache: 'npm'
93-
94-
- name: Install dependencies
95-
run: npm ci
96-
97-
# TODO: Configure GITHUB_TOKEN with appropriate permissions
98-
# The fetch-github-stars script may need authentication
99-
- name: Fetch GitHub stars
100-
run: npm run fetch:github-stars
101-
env:
102-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
103-
continue-on-error: true
104-
105-
- name: Check for changes
106-
id: git-check
107-
run: |
108-
git diff --exit-code manifests/ || echo "changed=true" >> $GITHUB_OUTPUT
109-
110-
- name: Create pull request
111-
if: steps.git-check.outputs.changed == 'true'
112-
uses: peter-evans/create-pull-request@v8
113-
with:
114-
token: ${{ secrets.GITHUB_TOKEN }}
115-
commit-message: 'chore: update GitHub stars data'
116-
title: '🌟 Update GitHub Stars Data'
117-
body: |
118-
## Automated GitHub Stars Update
119-
120-
This PR updates the GitHub stars count for tools in our manifest files.
121-
122-
**Updated:** ${{ steps.git-check.outputs.changed }}
123-
124-
### Changes
125-
- Fetched latest star counts from GitHub API
126-
- Updated manifest files with current data
127-
128-
### Review Checklist
129-
- [ ] Verify star counts look reasonable
130-
- [ ] No unexpected changes to other fields
131-
132-
---
133-
*This PR was automatically created by the scheduled GitHub stars update workflow.*
134-
branch: automated/update-github-stars
135-
delete-branch: true
136-
labels: |
137-
automated
138-
metadata
139-
github-stars
83+
- name: Fail workflow after reporting broken URLs
84+
if: steps.validate.outcome == 'failure'
85+
run: exit 1
14086

14187
workflow-summary:
14288
name: Workflow Summary
14389
runs-on: ubuntu-latest
144-
needs: [validate-urls, update-github-stars]
90+
needs: [validate-urls]
14591
if: always()
14692
steps:
14793
- name: Summary
14894
run: |
14995
echo "## Scheduled Checks Summary" >> $GITHUB_STEP_SUMMARY
15096
echo "" >> $GITHUB_STEP_SUMMARY
15197
echo "- URL Validation: ${{ needs.validate-urls.result }}" >> $GITHUB_STEP_SUMMARY
152-
echo "- GitHub Stars Update: ${{ needs.update-github-stars.result }}" >> $GITHUB_STEP_SUMMARY

.github/workflows/update-github-stars.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ jobs:
4141
- name: Check for changes
4242
id: git-check
4343
run: |
44-
git diff --exit-code manifests/github-stars.json src/lib/generated/github-stars.ts || echo "changes=true" >> $GITHUB_OUTPUT
44+
git diff --exit-code data/github-stars.json src/lib/generated/github-stars.ts || echo "changes=true" >> $GITHUB_OUTPUT
4545
4646
- name: Create Pull Request
4747
if: steps.git-check.outputs.changes == 'true'
@@ -55,7 +55,7 @@ jobs:
5555
Automated weekly update of GitHub stars data.
5656
5757
### Changes
58-
- Updated `manifests/github-stars.json` with latest star counts
58+
- Updated `data/github-stars.json` with latest star counts
5959
- Regenerated `src/lib/generated/github-stars.ts`
6060
6161
### Source

CONTRIBUTING.md

Lines changed: 32 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ Want to contribute code? Great! Please:
7373

7474
### Prerequisites
7575

76-
- **Node.js**: 20.x or higher
76+
- **Node.js**: 22.x or higher
7777
- **npm**: Latest version
7878
- **Git**: For version control
7979

@@ -85,7 +85,7 @@ git clone https://github.com/aicodingstack/aicodingstack.io.git
8585
cd aicodingstack.io
8686

8787
# Install dependencies
88-
npm install
88+
npm ci
8989

9090
# Run validation tests
9191
npm run test:validate
@@ -106,9 +106,10 @@ Visit `http://localhost:3000` to see the site.
106106
- `npm run build` - Build for production
107107
- `npm run test:validate` - Run repository validation tests (schemas, translations, alignment, etc.)
108108
- `npm run test:urls` - Check URL accessibility (networked; CI-oriented)
109-
- `npm run lint` - Run ESLint
109+
- `npm run biome:check` - Run static analysis
110+
- `npm run type-check` - Run TypeScript checks
110111
- `npm run spell` - Run spell checker
111-
- `npm test` - Run tests (if available)
112+
- `npm test` - Run the Vitest suite in watch mode
112113

113114
## Manifest File Guidelines
114115

@@ -121,61 +122,34 @@ All manifest files must conform to their respective JSON schemas located in `man
121122
- [Model Schema](manifests/$schemas/model.schema.json)
122123
- [Provider Schema](manifests/$schemas/provider.schema.json)
123124

124-
### Example: Adding a New IDE
125-
126-
Create a file in `manifests/ides/your-ide.json`:
127-
128-
```json
129-
{
130-
"name": "Your IDE",
131-
"id": "your-ide",
132-
"vendor": "Your Company",
133-
"description": "A brief description of what makes this IDE unique",
134-
"websiteUrl": "https://example.com",
135-
"docsUrl": "https://docs.example.com",
136-
"latestVersion": "1.0.0",
137-
"platforms": ["Windows", "macOS", "Linux"],
138-
"pricing": {
139-
"model": "freemium",
140-
"free": true
141-
}
142-
}
143-
```
125+
### Examples
144126

145-
### Example: Adding a New Model
146-
147-
Create a file in `manifests/models/your-model.json`:
148-
149-
```json
150-
{
151-
"name": "Your Model",
152-
"id": "your-model",
153-
"vendor": "Your Company",
154-
"size": "175B",
155-
"contextWindow": 128000,
156-
"maxOutput": 4096,
157-
"pricing": {
158-
"input": 0.01,
159-
"output": 0.03,
160-
"currency": "USD",
161-
"unit": "1K tokens"
162-
},
163-
"urls": {
164-
"website": "https://example.com",
165-
"documentation": "https://docs.example.com"
166-
}
167-
}
168-
```
127+
The schemas are authoritative and require fields that differ by category. Start from a current, validated manifest rather than copying an abbreviated snippet:
128+
129+
- [IDE example](manifests/ides/cursor.json)
130+
- [Model example](manifests/models/gpt-5-2.json)
131+
132+
Copy the closest existing manifest, update its `$schema`, `id`, content, translations, and URLs, then run the validation commands below.
169133

170134
### Field Requirements
171135

172-
#### Common Fields (All Types)
173-
- **`name`**: Official product name (required)
174-
- **`id`**: Lowercase, hyphenated identifier (required, unique)
175-
- **`vendor`**: Company or organization name (required)
176-
- **`description`**: Clear, concise description (required)
177-
- **`websiteUrl`**: Official website (required)
178-
- **`docsUrl`**: Documentation URL (recommended)
136+
#### Common Fields (Most Types)
137+
138+
- **`$schema`**: Relative path to the category schema
139+
- **`name`**: Official product name
140+
- **`id`**: Lowercase, hyphenated identifier that matches the filename
141+
- **`vendor`**: Company or organization name
142+
- **`description`**: Clear, concise default-language description
143+
- **`translations`**: Localized fields required by the category schema
144+
- **`websiteUrl`**: Official website
145+
- **`docsUrl`**: Documentation URL
146+
- **`sources`**: Authoritative URLs supporting the record or named fields
147+
- **`lastVerifiedAt`**: Date the cited facts were last reviewed
148+
- **`verifiedBy`**: GitHub handle or automation identifier responsible for the review
149+
- **`confidence`**: `high`, `medium`, or `low`, based on source quality and recency
150+
151+
For new or updated records marked `verified: true`, include the provenance fields above. See
152+
[Data Trust and Verification](docs/DATA-TRUST.md) for the badge semantics and rollout policy.
179153

180154
#### Model-Specific Fields
181155
- **`size`**: Model size (e.g., "175B", "70B")
@@ -257,7 +231,8 @@ chore(deps): update Next.js to 15.1.0
257231
3.**Validate locally**:
258232
```bash
259233
npm run test:validate
260-
npm run test:urls
234+
npm run biome:check
235+
npm run type-check
261236
npm run spell
262237
npm run build
263238
```
@@ -275,7 +250,7 @@ chore(deps): update Next.js to 15.1.0
275250

276251
### Review Process
277252

278-
- **Automated checks**: CI must pass (lint, validate, build)
253+
- **Automated checks**: CI must pass (Biome, types, validation, spell check, and build)
279254
- **Maintainer review**: At least 1 approval required
280255
- **Response time**: We aim to review within 3-5 business days
281256
- **Merge**: Once approved, maintainers will merge your PR

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ All manifest files are automatically validated against JSON schemas. Make sure y
122122

123123
## Tech Stack
124124

125-
- **Framework**: Next.js 15 with App Router
125+
- **Framework**: Next.js 16 with App Router
126126
- **Styling**: Tailwind CSS 4
127127
- **Internationalization**: next-intl
128128
- **Content**: MDX for documentation

0 commit comments

Comments
 (0)