Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/actions/setup-pnpm/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ runs:
- name: Setup Node.js
uses: actions/setup-node@v7
with:
node-version: '22'
node-version: '24'
cache: pnpm
cache-dependency-path: pnpm-lock.yaml

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/dependabot-auto-merge.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v7
with:
node-version: '22'
node-version: '24'
cache: pnpm
cache-dependency-path: pnpm-lock.yaml

Expand Down
9 changes: 4 additions & 5 deletions .github/workflows/monitor-model-sources.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,20 +24,19 @@ jobs:
- name: Setup pnpm
uses: ./.github/actions/setup-pnpm

- name: Check monitored official sources
run: pnpm fetch:model-sources
- name: Update and validate monitored official sources
run: pnpm manifest-data:update -- --only=model-sources

- name: Validate monitoring metadata
- name: Check formatting
run: |
pnpm test:validate
pnpm format:check
pnpm biome:check
git diff --check

- name: Check for changes
id: git-check
run: |
git diff --exit-code manifests/models || echo "changes=true" >> "$GITHUB_OUTPUT"
git diff --exit-code manifests/models data/data-health.json docs/DATA-HEALTH.md src/lib/generated || echo "changes=true" >> "$GITHUB_OUTPUT"

- name: Create review pull request
if: steps.git-check.outputs.changes == 'true'
Expand Down
13 changes: 4 additions & 9 deletions .github/workflows/update-benchmarks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,24 +24,19 @@ jobs:
- name: Setup pnpm
uses: ./.github/actions/setup-pnpm

- name: Refresh exact benchmark mappings
run: pnpm fetch:benchmarks
- name: Update and validate exact benchmark mappings
run: pnpm manifest-data:update -- --only=benchmarks

- name: Regenerate manifest modules
run: pnpm generate:manifests

- name: Validate updated data
- name: Check formatting
run: |
pnpm test:validate
pnpm data-health:check
pnpm format:check
pnpm biome:check
git diff --check

- name: Check for changes
id: git-check
run: |
git diff --exit-code manifests src/lib/generated || echo "changes=true" >> "$GITHUB_OUTPUT"
git diff --exit-code manifests data/data-health.json docs/DATA-HEALTH.md src/lib/generated || echo "changes=true" >> "$GITHUB_OUTPUT"

- name: Create pull request
if: steps.git-check.outputs.changes == 'true'
Expand Down
11 changes: 4 additions & 7 deletions .github/workflows/update-github-stars.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,18 +24,15 @@ jobs:
- name: Setup pnpm
uses: ./.github/actions/setup-pnpm

- name: Fetch GitHub stars
run: pnpm fetch:github-stars
- name: Update and validate GitHub stars
run: pnpm manifest-data:update -- --only=github-stars
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Generate TypeScript files
run: pnpm generate:manifests

- name: Check for changes
id: git-check
run: |
git diff --exit-code data/github-stars.json src/lib/generated/github-stars.ts || echo "changes=true" >> $GITHUB_OUTPUT
git diff --exit-code data/github-stars.json data/data-health.json docs/DATA-HEALTH.md src/lib/generated || echo "changes=true" >> "$GITHUB_OUTPUT"

- name: Create Pull Request
if: steps.git-check.outputs.changes == 'true'
Expand All @@ -50,7 +47,7 @@ jobs:

### Changes
- Updated `data/github-stars.json` with latest star counts
- Regenerated `src/lib/generated/github-stars.ts`
- Regenerated derived data and the data-health snapshot

### Source
This PR was automatically generated by the `update-github-stars` workflow.
Expand Down
14 changes: 4 additions & 10 deletions .github/workflows/update-product-versions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,27 +24,21 @@ jobs:
- name: Setup pnpm
uses: ./.github/actions/setup-pnpm

- name: Refresh tracked product versions
run: pnpm fetch:product-versions
- name: Update and validate tracked product versions
run: pnpm manifest-data:update -- --only=product-versions
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Regenerate manifest modules
run: pnpm generate:manifests

- name: Validate updated data
- name: Check formatting
run: |
pnpm test:validate
pnpm validate:i18n
pnpm data-health:check
pnpm format:check
pnpm biome:check
git diff --check

- name: Check for changes
id: git-check
run: |
git diff --exit-code manifests src/lib/generated || echo "changes=true" >> "$GITHUB_OUTPUT"
git diff --exit-code manifests data/data-health.json docs/DATA-HEALTH.md src/lib/generated || echo "changes=true" >> "$GITHUB_OUTPUT"

- name: Create pull request
if: steps.git-check.outputs.changes == 'true'
Expand Down
2 changes: 1 addition & 1 deletion .nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
22
24
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ Want to contribute code? Great! Please:

### Prerequisites

- **Node.js**: 22.x
- **Node.js**: 24.x
- **pnpm**: 11.17.0 (pinned by `packageManager`)
- **Git**: For version control

Expand Down
139 changes: 139 additions & 0 deletions data/$schemas/data-health.schema.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Manifest Data Health Report",
"description": "Generated manifest provenance, freshness, relationship, and translation health snapshot.",
"type": "object",
"properties": {
"asOf": { "type": "string", "format": "date" },
"thresholds": { "$ref": "#/$defs/categoryThresholds" },
"summary": { "$ref": "#/$defs/summary" },
"byCategory": { "$ref": "#/$defs/categoryHealthMap" },
"translationsByLocale": {
"type": "object",
"minProperties": 1,
"additionalProperties": { "$ref": "#/$defs/translationHealth" }
},
"issues": {
"type": "array",
"items": { "$ref": "#/$defs/issue" }
}
},
"required": ["asOf", "thresholds", "summary", "byCategory", "translationsByLocale", "issues"],
"additionalProperties": false,
"$defs": {
"categories": {
"type": "string",
"enum": ["ides", "clis", "desktops", "extensions", "models", "providers", "vendors"]
},
"nonNegativeInteger": {
"type": "integer",
"minimum": 0
},
"percentage": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"categoryThresholds": {
"type": "object",
"properties": {
"ides": { "$ref": "#/$defs/nonNegativeInteger" },
"clis": { "$ref": "#/$defs/nonNegativeInteger" },
"desktops": { "$ref": "#/$defs/nonNegativeInteger" },
"extensions": { "$ref": "#/$defs/nonNegativeInteger" },
"models": { "$ref": "#/$defs/nonNegativeInteger" },
"providers": { "$ref": "#/$defs/nonNegativeInteger" },
"vendors": { "$ref": "#/$defs/nonNegativeInteger" }
},
"required": ["ides", "clis", "desktops", "extensions", "models", "providers", "vendors"],
"additionalProperties": false
},
"summary": {
"type": "object",
"properties": {
"totalRecords": { "$ref": "#/$defs/nonNegativeInteger" },
"recordsWithSources": { "$ref": "#/$defs/nonNegativeInteger" },
"verifiedRecords": { "$ref": "#/$defs/nonNegativeInteger" },
"provenanceComplete": { "$ref": "#/$defs/nonNegativeInteger" },
"staleVerifiedRecords": { "$ref": "#/$defs/nonNegativeInteger" },
"translationPlaceholderValues": { "$ref": "#/$defs/nonNegativeInteger" },
"danglingRelationships": { "$ref": "#/$defs/nonNegativeInteger" },
"modelBenchmarkCoverage": { "$ref": "#/$defs/percentage" },
"productsWithPricing": { "$ref": "#/$defs/nonNegativeInteger" },
"productRecords": { "$ref": "#/$defs/nonNegativeInteger" },
"communityUrlsPopulated": { "$ref": "#/$defs/nonNegativeInteger" },
"communityUrlsWithProvenance": { "$ref": "#/$defs/nonNegativeInteger" },
"duplicatedVendorCommunityUrls": { "$ref": "#/$defs/nonNegativeInteger" },
"errors": { "$ref": "#/$defs/nonNegativeInteger" },
"warnings": { "$ref": "#/$defs/nonNegativeInteger" },
"info": { "$ref": "#/$defs/nonNegativeInteger" }
},
"required": [
"totalRecords",
"recordsWithSources",
"verifiedRecords",
"provenanceComplete",
"staleVerifiedRecords",
"translationPlaceholderValues",
"danglingRelationships",
"modelBenchmarkCoverage",
"productsWithPricing",
"productRecords",
"communityUrlsPopulated",
"communityUrlsWithProvenance",
"duplicatedVendorCommunityUrls",
"errors",
"warnings",
"info"
],
"additionalProperties": false
},
"categoryHealth": {
"type": "object",
"properties": {
"total": { "$ref": "#/$defs/nonNegativeInteger" },
"verified": { "$ref": "#/$defs/nonNegativeInteger" },
"provenanceComplete": { "$ref": "#/$defs/nonNegativeInteger" },
"stale": { "$ref": "#/$defs/nonNegativeInteger" }
},
"required": ["total", "verified", "provenanceComplete", "stale"],
"additionalProperties": false
},
"categoryHealthMap": {
"type": "object",
"properties": {
"ides": { "$ref": "#/$defs/categoryHealth" },
"clis": { "$ref": "#/$defs/categoryHealth" },
"desktops": { "$ref": "#/$defs/categoryHealth" },
"extensions": { "$ref": "#/$defs/categoryHealth" },
"models": { "$ref": "#/$defs/categoryHealth" },
"providers": { "$ref": "#/$defs/categoryHealth" },
"vendors": { "$ref": "#/$defs/categoryHealth" }
},
"required": ["ides", "clis", "desktops", "extensions", "models", "providers", "vendors"],
"additionalProperties": false
},
"translationHealth": {
"type": "object",
"properties": {
"totalStrings": { "$ref": "#/$defs/nonNegativeInteger" },
"matchingEnglish": { "$ref": "#/$defs/nonNegativeInteger" },
"matchingEnglishPercent": { "$ref": "#/$defs/percentage" }
},
"required": ["totalStrings", "matchingEnglish", "matchingEnglishPercent"],
"additionalProperties": false
},
"issue": {
"type": "object",
"properties": {
"severity": { "type": "string", "enum": ["error", "warning", "info"] },
"code": { "type": "string", "minLength": 1 },
"category": { "$ref": "#/$defs/categories" },
"id": { "type": "string", "minLength": 1 },
"message": { "type": "string", "minLength": 1 }
},
"required": ["severity", "code", "category", "id", "message"],
"additionalProperties": false
}
}
}
44 changes: 22 additions & 22 deletions data/github-stars.json
Original file line number Diff line number Diff line change
@@ -1,40 +1,40 @@
{
"observedAt": "2026-08-30",
"observedAt": "2026-08-31",
"repositories": {
"aaif-goose/goose": 53694,
"anomalyco/opencode": 202526,
"anthropics/claude-code": 143448,
"aaif-goose/goose": 53700,
"anomalyco/opencode": 202538,
"anthropics/claude-code": 143460,
"augmentcode/auggie": 276,
"aws/amazon-q-developer-cli": 1985,
"can1357/oh-my-pi": 28431,
"cline/cline": 67165,
"can1357/oh-my-pi": 28449,
"cline/cline": 67169,
"codota/TabNine": 10774,
"continuedev/continue": 35700,
"cursor/cursor": 33202,
"deepseek-ai/deepseek-harness": 204355,
"earendil-works/pi": 99313,
"esengine/DeepSeek-Reasonix": 35258,
"continuedev/continue": 35701,
"cursor/cursor": 33201,
"deepseek-ai/deepseek-harness": 204470,
"earendil-works/pi": 99340,
"esengine/DeepSeek-Reasonix": 35261,
"github/copilot-cli": 11124,
"google-antigravity/antigravity-cli": 2081,
"google-gemini/gemini-cli": 106749,
"JetBrains/intellij-community": 20498,
"google-gemini/gemini-cli": 106748,
"JetBrains/intellij-community": 20497,
"JetBrains/junie": 414,
"Kilo-Org/kilocode": 27080,
"Kilo-Org/kilocode": 27081,
"kirodotdev/Kiro": 4238,
"microsoft/vscode": 190055,
"microsoft/vscode": 190056,
"MiniMax-AI/minimax-code": 72,
"mistralai/mistral-vibe": 4895,
"MoonshotAI/kimi-code": 7154,
"openai/codex": 120012,
"QwenLM/qwen-code": 27507,
"mistralai/mistral-vibe": 4896,
"MoonshotAI/kimi-code": 7156,
"openai/codex": 120038,
"QwenLM/qwen-code": 27510,
"RooCodeInc/Roo-Code": 24320,
"shareAI-lab/Kode-CLI": 5210,
"SivanCola/reasonix-vscode": 11,
"stagewise-io/stagewise": 6798,
"Trae-AI/TRAE": 917,
"verdentAI/docs": 4,
"VSCodium/vscodium": 33035,
"xai-org/grok-build": 26250,
"zed-industries/zed": 89451
"VSCodium/vscodium": 33036,
"xai-org/grok-build": 26251,
"zed-industries/zed": 89459
}
}
6 changes: 5 additions & 1 deletion docs/DATA-TRUST.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@ Every new model catalog entry must have a published Artificial Analysis Intellig

## Freshness policy

Run `pnpm data-health:report` after manifest or translation changes and commit both generated snapshots. CI runs `pnpm data-health:check` to reject invalid or stale snapshots.
`pnpm manifest-data:validate` is the offline validation entry point for schema coverage, semantic relationships, i18n structure, and the committed data-health snapshot. `pnpm manifest-data:check` adds read-only checks against every configured authoritative source. `pnpm manifest-data:update` updates only the explicitly configured safe fields, regenerates derived data and health reports, and reruns the offline validation suite. Source checks can be limited with `--only=<source,...>`.

The update harness covers GitHub star snapshots, declared product release versions, exact benchmark mappings, and monitored model-source digests. A pricing or lifecycle source change updates only its digest and observation date; changing the corresponding factual fields still requires review against the cited official source. Any missing, malformed, renamed, or ambiguous upstream result fails the relevant task.

Run `pnpm data-health:report` after manifest or translation changes made outside the unified update harness and commit both generated snapshots. CI runs `pnpm data-health:check` to reject invalid or stale snapshots.

The current review thresholds are 30 days for models and providers, 60 days for IDEs, CLIs, and extensions, and 90 days for vendors. Threshold findings remain warnings so that legacy debt stays visible without blocking unrelated work. Dangling product relationships are errors because they always point to nonexistent records and can break navigation. Network reachability is checked by the separate scheduled URL workflow; source authority and field coverage remain pull-request review responsibilities.
2 changes: 1 addition & 1 deletion docs/GITHUB_SETUP_MANUAL_STEPS.md
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ This is the simplest method - Cloudflare handles everything automatically.
- None required for basic setup

5. **Advanced Settings**:
- Node.js version: `20`
- Node.js version: `24`
- Compatibility date: `2025-03-01` (or latest)

6. **Click "Save and Deploy"**
Expand Down
2 changes: 1 addition & 1 deletion manifests/$schemas/github-stars.schema.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://aicodingstack.io/schemas/github-stars.schema.json",
"title": "GitHub Repository Stars Data",
"description": "Repository-keyed GitHub star snapshots. Product associations and source-code status are derived from product manifests.",
Expand Down
Loading
Loading