diff --git a/.github/QUICKREF.md b/.github/QUICKREF.md new file mode 100644 index 0000000..29a931a --- /dev/null +++ b/.github/QUICKREF.md @@ -0,0 +1,175 @@ +# Weekly Changelog Automation - Quick Reference + +## ๐Ÿš€ One-Time Setup (5 minutes) + +### Step 1: Add API Key Secret +1. Go to: **Settings** โ†’ **Secrets and variables** โ†’ **Actions** +2. Click **New repository secret** +3. Name: `ANTHROPIC_API_KEY` +4. Value: Your API key (from https://console.anthropic.com/settings/keys) +5. Click **Add secret** + +### Step 2: Enable Workflow Permissions +1. Go to: **Settings** โ†’ **Actions** โ†’ **General** +2. Under **Workflow permissions**: + - โœ… Select **Read and write permissions** + - โœ… Check **Allow GitHub Actions to create and approve pull requests** +3. Click **Save** + +### Step 3: Test +1. Go to: **Actions** tab +2. Click: **Weekly Changelog Generation** +3. Click: **Run workflow** โ†’ **Run workflow** +4. Wait ~5-10 minutes +5. Check for new PR + +**Done!** The workflow will now run automatically every Wednesday at 10:00 UTC. + +--- + +## ๐Ÿ“… Schedule + +**Automatic**: Every Wednesday at 10:00 UTC (18:00 Beijing Time) + +**Manual**: +- Go to **Actions** โ†’ **Weekly Changelog Generation** โ†’ **Run workflow** + +--- + +## ๐Ÿ”„ Weekly Workflow + +### What Happens Automatically +``` +Wednesday 10:00 UTC +โ†“ +1. Fetch PRs from past 7 days +โ†“ +2. AI analyzes PR content +โ†“ +3. Determines version bump (major/minor/patch) +โ†“ +4. Generates changelog +โ†“ +5. Creates Pull Request +โ†“ +6. Notifies via GitHub +``` + +### Your Action Items (Once PR is Created) +1. โœ… Review the PR (usually within 1 hour of Wednesday 10:00 UTC) +2. โœ… Verify version bump type is correct +3. โœ… Merge the PR +4. โœ… Copy content to mintlify-docs repository +5. โœ… Create PR to mintlify-docs + +**Time required**: 5-10 minutes per week + +--- + +## ๐Ÿ“Š Version Bump Types + +| Type | When | Example | Icon | +|------|------|---------|------| +| **Patch** | Bug fixes, improvements | 4.3.5 โ†’ 4.3.6 | ๐Ÿ”ง | +| **Minor** | New features, capabilities | 4.3.5 โ†’ 4.4.0 | ๐Ÿš€ | +| **Major** | Platform transformation | 4.3.5 โ†’ 5.0.0 | ๐ŸŽ‰ | + +AI automatically determines the appropriate type based on PR content. + +--- + +## ๐Ÿ” Monitoring + +### Check Workflow Status +**Actions** โ†’ **Weekly Changelog Generation** โ†’ View recent runs + +### Review PR +**Pull requests** โ†’ Look for `Weekly Changelog: v4.X.X` + +### Check Artifacts +Each run uploads the changelog file as an artifact (available for 30 days) + +--- + +## โ“ Troubleshooting + +### Workflow Failed? +1. Click on failed workflow run +2. View logs to see error +3. Common issues: + - Missing `ANTHROPIC_API_KEY` secret + - Insufficient workflow permissions + - API rate limits (rare) + +### No PR Created? +- This is normal if no PRs were merged in the past week +- Workflow exits gracefully with success status + +### Wrong Version Bump? +1. Review the PR description +2. If needed, manually edit the version in the file +3. Comment on PR explaining why manual override was needed + +### Need to Re-run? +1. Go to failed workflow run +2. Click **Re-run jobs** +3. Or trigger manually via **Run workflow** button + +--- + +## ๐Ÿ’ก Tips + +### Change Schedule +Edit `.github/workflows/weekly-changelog.yml`: +```yaml +schedule: + - cron: '0 10 * * 3' # Current: Wed 10:00 UTC + # Examples: + # - cron: '0 18 * * 3' # Wed 18:00 UTC (02:00 Beijing next day) + # - cron: '0 2 * * 4' # Thu 02:00 UTC (10:00 Beijing) +``` + +### Test Locally First +```bash +export ANTHROPIC_API_KEY='your_key' +export GITHUB_TOKEN='your_token' +export DAYS_LOOKBACK=7 + +python3 scripts/fetch_github_prs.py +python3 scripts/generate_weekly_changelog.py +``` + +### Skip a Week +If you need to skip a week (holidays, etc.): +1. Go to **Actions** โ†’ **Weekly Changelog Generation** +2. Click **โ‹ฏ** โ†’ **Disable workflow** +3. Re-enable after the week you want to skip + +### Force Specific Version Bump +Currently not supported via automation. If needed: +1. Run workflow normally +2. Manually edit generated file to change version +3. Document reason in PR comments + +--- + +## ๐Ÿ“ž Support + +- **Setup Issues**: See [.github/SETUP.md](SETUP.md) +- **Workflow Details**: See [docs/WEEKLY_MODE.md](../docs/WEEKLY_MODE.md) +- **Version Rules**: See [docs/VERSION_NUMBERING.md](../docs/VERSION_NUMBERING.md) +- **GitHub Actions Docs**: https://docs.github.com/actions + +--- + +## ๐Ÿ“ˆ Metrics + +**Expected Costs**: +- API: $1-3 per week +- GitHub Actions: Free (for public repos) + +**Time Savings**: +- Manual: ~30-60 minutes per week +- Automated: ~5-10 minutes per week (review only) + +**Annual Savings**: ~25-40 hours of manual work ๐ŸŽ‰ diff --git a/.github/SETUP.md b/.github/SETUP.md new file mode 100644 index 0000000..2c786ff --- /dev/null +++ b/.github/SETUP.md @@ -0,0 +1,245 @@ +# GitHub Actions Setup Guide + +## Required Secrets + +To enable automated weekly changelog generation, you need to configure the following secrets in your GitHub repository: + +### 1. ANTHROPIC_API_KEY + +Your Anthropic API key for Claude AI. + +**Steps to add:** +1. Go to your repository on GitHub +2. Click **Settings** โ†’ **Secrets and variables** โ†’ **Actions** +3. Click **New repository secret** +4. Name: `ANTHROPIC_API_KEY` +5. Value: Your Anthropic API key (starts with `sk-ant-...`) +6. Click **Add secret** + +**How to get API key:** +- Visit: https://console.anthropic.com/settings/keys +- Create a new API key +- Copy the key (you won't be able to see it again) + +### 2. GITHUB_TOKEN + +**No action needed** - This is automatically provided by GitHub Actions. + +The workflow uses `${{ secrets.GITHUB_TOKEN }}` which is automatically available in every workflow run. + +## Workflow Configuration + +### Schedule + +The workflow runs automatically every **Wednesday at 10:00 UTC** (18:00 Beijing Time). + +To change the schedule, edit `.github/workflows/weekly-changelog.yml`: + +```yaml +on: + schedule: + - cron: '0 10 * * 3' # Minute Hour Day Month DayOfWeek +``` + +**Cron format:** +- `0 10 * * 3` = Every Wednesday at 10:00 UTC +- `0 18 * * 3` = Every Wednesday at 18:00 UTC (02:00 Beijing Time next day) +- `0 2 * * 4` = Every Thursday at 02:00 UTC (10:00 Beijing Time) + +Use https://crontab.guru/ to help build cron expressions. + +### Manual Trigger + +You can also run the workflow manually: + +1. Go to **Actions** tab in your repository +2. Click on **Weekly Changelog Generation** workflow +3. Click **Run workflow** button +4. Select branch (usually `main`) +5. Click **Run workflow** + +## Repository Access Permissions + +**CRITICAL**: Ensure GitHub Actions has permission to create pull requests: + +1. Go to **Settings** โ†’ **Actions** โ†’ **General** +2. Scroll to **Workflow permissions** +3. Select **Read and write permissions** โœ… +4. Check **Allow GitHub Actions to create and approve pull requests** โœ… +5. Click **Save** + +Without these permissions, the workflow will fail to create PRs automatically. + +## Testing the Workflow + +### Test Manually + +Before relying on the automated schedule, test the workflow manually: + +```bash +# 1. Set up your local environment +export ANTHROPIC_API_KEY='your_key' +export GITHUB_TOKEN='your_token' + +# 2. Fetch recent PRs +export DAYS_LOOKBACK=7 +python3 scripts/fetch_github_prs.py + +# 3. Generate changelog +python3 scripts/generate_weekly_changelog.py + +# 4. Check output (all 3 languages) +ls -lh output/changelog_EN.mdx +ls -lh output/changelog_ZH.mdx +ls -lh output/changelog_KO.mdx +``` + +### Test via GitHub Actions + +1. Go to **Actions** tab +2. Click **Weekly Changelog Generation** +3. Click **Run workflow** +4. Wait for completion (~5-10 minutes) +5. Check for created pull request + +## Workflow Outputs + +When successful, the workflow will: + +1. **Create a Pull Request automatically** with: + - Title: `chore: weekly changelog v4.3.X (PATCH/MINOR/MAJOR)` + - Branch: `changelog-v4.3.X` + - Labels: `changelog`, `automated`, `multi-language` + - Body: Complete PR description with version info and next steps + - Files: 3 cumulative changelog files (EN/ZH/KO) + +2. **Upload Artifacts** with: + - Name: `weekly-changelog-v4.3.X-all-languages` + - Files: All 3 generated MDX files (EN, ZH, KO) + - Retention: 90 days + +### What the PR Contains + +Each auto-generated PR includes: +- โœ… Version number and bump type (MAJOR/MINOR/PATCH) +- โœ… Number of PRs processed +- โœ… All 3 language files (English, Chinese, Korean) +- โœ… Clear instructions for next steps +- โœ… Links to mintlify-docs destination paths + +## Troubleshooting + +### Workflow fails with "ANTHROPIC_API_KEY not set" + +- Verify the secret is created with exact name `ANTHROPIC_API_KEY` +- Secrets are case-sensitive +- Recreate the secret if unsure + +### Workflow fails with "No PRs found" + +- This is normal if no PRs were merged in the past week +- The workflow will exit gracefully with no PR created + +### Workflow fails with permission errors + +- Check **Workflow permissions** in repository settings +- Ensure **Read and write permissions** is selected โœ… +- Ensure **Allow GitHub Actions to create pull requests** is checked โœ… + +### Pull Request creation fails + +- Verify that `peter-evans/create-pull-request@v6` action has permissions +- Check workflow permissions (see above) +- Look for error messages in GitHub Actions logs + +### Version detection fails + +- Ensure there are existing changelog files in `output/` directory +- The workflow needs at least one changelog file to detect the latest version +- For first run, manually create an initial changelog or set a default version + +## Cost Estimation + +- **API Costs**: ~$1-3 per weekly run (depends on number of PRs) +- **GitHub Actions**: Free for public repositories, free tier available for private repos +- **Storage**: Minimal (changelog files are small, artifacts deleted after 30 days) + +**Monthly estimate**: $4-12 for API calls (assuming 4 weeks per month) + +## Customization + +### Change generated languages + +Currently generates all 3 languages (EN, ZH, KO) by default. To change this: + +Set the `LANGUAGES` environment variable in the workflow: + +```yaml +- name: Generate weekly changelog + env: + ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} + LANGUAGES: "en,zh,ko" # Customize this + run: | + python3 scripts/generate_weekly_changelog.py +``` + +Options: +- `"en"` - English only +- `"en,zh"` - English and Chinese +- `"en,zh,ko"` - All three (default) +languages = ['en'] + +# To add all languages +languages = ['en', 'zh', 'ko'] +``` + +Note: This will increase API costs proportionally. + +### Change PR fetch repositories + +Edit `scripts/fetch_github_prs.py` to modify the list of repositories to fetch from. + +### Adjust version bump logic + +Edit `scripts/generate_weekly_changelog.py` function `determine_version_bump()` to customize how AI analyzes PRs. + +Modify `docs/VERSION_NUMBERING.md` to update the rules AI follows. + +## Monitoring + +### Check workflow runs + +1. Go to **Actions** tab +2. View recent workflow runs +3. Click on a run to see detailed logs + +### Enable notifications + +1. Go to **Settings** โ†’ **Notifications** +2. Ensure **Actions** is enabled +3. You'll receive email notifications for failed workflows + +### Weekly checklist + +Every Wednesday after workflow runs: +1. Check for new PR in repository +2. Review generated changelog +3. Verify version bump type is correct +4. Merge PR if satisfied +5. Copy content to mintlify-docs repository +6. Create PR to mintlify-docs + +## Security Notes + +- Never commit API keys to the repository +- Always use GitHub Secrets for sensitive data +- API keys in logs are automatically masked by GitHub +- Rotate API keys periodically for security + +## Support + +For issues or questions: +1. Check workflow logs in Actions tab +2. Review error messages carefully +3. Test locally before debugging GitHub Actions +4. Consult GitHub Actions documentation: https://docs.github.com/actions diff --git a/.github/workflows/generate-changelog-multilang.yml b/.github/workflows/generate-changelog-multilang.yml new file mode 100644 index 0000000..35ac744 --- /dev/null +++ b/.github/workflows/generate-changelog-multilang.yml @@ -0,0 +1,120 @@ +name: Generate Multi-Language Changelog + +on: + # Run every Monday at 9:00 AM UTC + schedule: + - cron: '0 9 * * 1' + + # Allow manual triggering + workflow_dispatch: + inputs: + days_lookback: + description: 'Number of days to look back for PRs' + required: false + default: '7' + languages: + description: 'Languages to generate (comma-separated: en,zh,ko)' + required: false + default: 'en,zh,ko' + +permissions: + contents: write + pull-requests: write + +jobs: + generate-changelog: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.11' + cache: 'pip' + + - name: Install dependencies + run: | + pip install PyGithub anthropic + + - name: Fetch GitHub PRs + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + DAYS_LOOKBACK: ${{ github.event.inputs.days_lookback || '7' }} + run: | + python scripts/fetch_github_prs.py + + - name: Generate Multi-Language Changelogs + env: + ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} + LANGUAGES: ${{ github.event.inputs.languages || 'en,zh,ko' }} + run: | + python scripts/generate_multilang_changelog.py + + - name: Get current date + id: date + run: echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v6 + with: + token: ${{ secrets.GITHUB_TOKEN }} + commit-message: | + Update multi-language changelog for week of ${{ steps.date.outputs.date }} + + Generated changelogs in English, Chinese, and Korean. + + ๐Ÿค– Generated with AIOK Agentic Changelog + + Co-Authored-By: Claude Sonnet 4.5 + branch: changelog/week-${{ steps.date.outputs.date }} + delete-branch: true + title: 'Changelog (EN/ไธญๆ–‡/ํ•œ๊ตญ์–ด): Week of ${{ steps.date.outputs.date }}' + body: | + ## Automated Multi-Language Changelog Update + + This PR contains automatically generated changelogs for the week of **${{ steps.date.outputs.date }}** in three languages: + + ### ๐Ÿ“ Generated Files: + - `data/CHANGELOG_EN.md` - English + - `data/CHANGELOG_ZH.md` - ไธญๆ–‡ (Chinese) + - `data/CHANGELOG_KO.md` - ํ•œ๊ตญ์–ด (Korean) + + ### Review Checklist: + - [ ] English version is accurate and user-friendly + - [ ] Chinese translation is natural and correct + - [ ] Korean translation is natural and correct + - [ ] All PR links are working + - [ ] No sensitive information is exposed + + ### ๐ŸŒ Deployment: + After merging, you can copy these changelogs to: + - `mintlify-docs/en/changelog.md` + - `mintlify-docs/zh/changelog.md` + - `mintlify-docs/ko/changelog.md` + + --- + + ๐Ÿค– This PR was automatically created by the AIOK multi-language changelog workflow. + labels: | + changelog + automated + multi-language + draft: false + + - name: Summary + run: | + echo "### โœ… Multi-Language Changelog Generation Complete" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "- **Date**: ${{ steps.date.outputs.date }}" >> $GITHUB_STEP_SUMMARY + echo "- **Days lookback**: ${{ github.event.inputs.days_lookback || '7' }}" >> $GITHUB_STEP_SUMMARY + echo "- **Languages**: ${{ github.event.inputs.languages || 'en,zh,ko' }}" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "### Generated Files:" >> $GITHUB_STEP_SUMMARY + echo "- ๐Ÿ‡ฌ๐Ÿ‡ง English: data/CHANGELOG_EN.md" >> $GITHUB_STEP_SUMMARY + echo "- ๐Ÿ‡จ๐Ÿ‡ณ Chinese: data/CHANGELOG_ZH.md" >> $GITHUB_STEP_SUMMARY + echo "- ๐Ÿ‡ฐ๐Ÿ‡ท Korean: data/CHANGELOG_KO.md" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "A Pull Request has been created with all changelogs." >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/weekly-changelog.yml b/.github/workflows/weekly-changelog.yml new file mode 100644 index 0000000..7bb546b --- /dev/null +++ b/.github/workflows/weekly-changelog.yml @@ -0,0 +1,137 @@ +name: Weekly Changelog Generation + +on: + schedule: + # Every Wednesday at 10:00 UTC (18:00 Beijing Time) + - cron: '0 10 * * 3' + workflow_dispatch: # Allow manual trigger + +jobs: + generate-changelog: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 # Fetch all history for version detection + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.11' + + - name: Install dependencies + run: | + pip install anthropic requests + + - name: Fetch PRs from past week + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + export DAYS_LOOKBACK=7 + python3 scripts/fetch_github_prs.py + + - name: Generate weekly changelog + env: + ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} + run: | + python3 scripts/generate_weekly_changelog.py + + - name: Read version info + id: version_info + run: | + # Extract version and bump type from English changelog (all languages have same version) + OUTPUT_FILE="output/changelog_EN.mdx" + if [ -f "$OUTPUT_FILE" ]; then + # Extract version from the first ### line + VERSION=$(grep -oP '###\s+\K[0-9]+\.[0-9]+\.[0-9]+' "$OUTPUT_FILE" | head -1) + # Extract bump type from header comment + BUMP_TYPE=$(grep -oP 'Latest Version:.*\(\K[A-Z]+' "$OUTPUT_FILE" | head -1) + # Extract date from header comment + DATE=$(grep -oP 'Last Updated: \K[0-9]{4}-[0-9]{2}-[0-9]{2}' "$OUTPUT_FILE" | head -1) + # Count how many PRs were processed + PR_COUNT=$(grep -oP 'PRs: \K[0-9]+' "$OUTPUT_FILE" | head -1) + + echo "version=$VERSION" >> $GITHUB_OUTPUT + echo "bump_type=$BUMP_TYPE" >> $GITHUB_OUTPUT + echo "date=$DATE" >> $GITHUB_OUTPUT + echo "pr_count=$PR_COUNT" >> $GITHUB_OUTPUT + fi + + - name: Create Pull Request + if: success() + uses: peter-evans/create-pull-request@v6 + with: + token: ${{ secrets.GITHUB_TOKEN }} + commit-message: "chore: weekly changelog v${{ steps.version_info.outputs.version }} (3 languages) + +- Generated EN/ZH/KO changelogs +- Version: ${{ steps.version_info.outputs.version }} +- Bump type: ${{ steps.version_info.outputs.bump_type }} +- PRs processed: ${{ steps.version_info.outputs.pr_count }} + +Co-Authored-By: Claude Sonnet 4.5 " + title: "chore: weekly changelog v${{ steps.version_info.outputs.version }} (${{ steps.version_info.outputs.bump_type }})" + body: | + ## ๐Ÿ“‹ Weekly Changelog - v${{ steps.version_info.outputs.version }} + + ### ๐ŸŽฏ Release Information + + **Version**: ${{ steps.version_info.outputs.version }} + **Release Type**: ${{ steps.version_info.outputs.bump_type }} + - ๐ŸŽ‰ **MAJOR**: Fundamental platform transformation + - ๐Ÿš€ **MINOR**: Significant new features + - ๐Ÿ”ง **PATCH**: Improvements and bug fixes + + **Date**: ${{ steps.version_info.outputs.date }} + **PRs Processed**: ${{ steps.version_info.outputs.pr_count }} + + ### ๐ŸŒ Generated Files (3 Languages) + + - โœ… `output/changelog_EN.mdx` - English + - โœ… `output/changelog_ZH.mdx` - Chinese (ไธญๆ–‡) + - โœ… `output/changelog_KO.mdx` - Korean (ํ•œ๊ตญ์–ด) + + Each file is cumulative and includes: + - All 2025 historical changelogs (33 versions) + - All 2026+ weekly changelogs (newest at top) + + ### ๐Ÿ“ Next Steps + + 1. **Review** the generated changelog content in all 3 languages + 2. **Verify** the version bump type is appropriate + 3. **Copy** content to mintlify-docs repository: + - `mintlify-docs/en/changelog.mdx` โ† `output/changelog_EN.mdx` + - `mintlify-docs/zh/changelog.mdx` โ† `output/changelog_ZH.mdx` + - `mintlify-docs/ko/changelog.mdx` โ† `output/changelog_KO.mdx` + 4. **Merge** this PR + 5. **Create PR** to mintlify-docs repository with updated files + + ### ๐Ÿ“Š Changelog Architecture + + - **Cumulative files**: Each language maintains one growing file + - **Version auto-detection**: System detects latest version from existing files + - **Manual intervention support**: Respects human edits to versions + - **Duplicate prevention**: Prevents running twice (use `--force` to override) + + --- + ๐Ÿค– **Auto-generated by AIOK Weekly Changelog System** + ๐ŸŒ **22 repositories monitored** | ๐Ÿง  **AI-powered by Claude Sonnet 4.5** + branch: changelog-v${{ steps.version_info.outputs.version }} + delete-branch: true + labels: | + changelog + automated + multi-language + + - name: Upload changelog artifacts + if: success() + uses: actions/upload-artifact@v4 + with: + name: weekly-changelog-v${{ steps.version_info.outputs.version }}-all-languages + path: | + output/changelog_EN.mdx + output/changelog_ZH.mdx + output/changelog_KO.mdx + retention-days: 90 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..717e382 --- /dev/null +++ b/.gitignore @@ -0,0 +1,48 @@ +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +env/ +venv/ +ENV/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# Environment variables +.env +.env.local + +# Generated data files +data/prs.json +data/CHANGELOG.md + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ +.DS_Store + +# Logs +*.log + +# API Keys (safety) +*_api_key.txt +*_token.txt +secrets/ diff --git a/AUTOMATION_COMPLETE.md b/AUTOMATION_COMPLETE.md new file mode 100644 index 0000000..4936ebf --- /dev/null +++ b/AUTOMATION_COMPLETE.md @@ -0,0 +1,293 @@ +# โœ… Weekly Changelog Automation - Complete Setup + +## ๐ŸŽ‰ What's Configured + +Your repository is now fully configured for **automated weekly changelog generation** using GitHub Actions. + +--- + +## ๐Ÿ“ Files Created + +### GitHub Actions Workflow +- `.github/workflows/weekly-changelog.yml` - Main automation workflow +- `.github/SETUP.md` - Detailed setup instructions +- `.github/QUICKREF.md` - Quick reference guide + +### Scripts +- `scripts/generate_weekly_changelog.py` - Smart version bump system +- `scripts/fetch_github_prs.py` - PR data fetcher (already existed) +- `scripts/generate_mintlify_changelog_v2.py` - Changelog generator (already existed) + +### Documentation +- `docs/WEEKLY_MODE.md` - Weekly mode documentation +- `docs/VERSION_NUMBERING.md` - Semantic versioning rules +- `docs/MODES_COMPARISON.md` - Comparison of historical vs weekly modes + +--- + +## ๐Ÿš€ Quick Start (5 Minutes) + +### 1. Add API Key Secret (2 min) +``` +Repository Settings โ†’ Secrets and variables โ†’ Actions +โ†’ New repository secret +โ†’ Name: ANTHROPIC_API_KEY +โ†’ Value: +โ†’ Add secret +``` + +### 2. Enable Permissions (1 min) +``` +Repository Settings โ†’ Actions โ†’ General +โ†’ Workflow permissions +โ†’ โœ… Read and write permissions +โ†’ โœ… Allow GitHub Actions to create and approve pull requests +โ†’ Save +``` + +### 3. Test Run (2 min) +``` +Actions tab โ†’ Weekly Changelog Generation +โ†’ Run workflow โ†’ Run workflow +โ†’ Wait ~5-10 minutes +โ†’ Check for Pull Request +``` + +**Done!** ๐ŸŽ‰ + +--- + +## ๐Ÿ“… How It Works + +### Automatic Schedule +**Every Wednesday at 10:00 UTC (18:00 Beijing Time)** + +``` +Wednesday 10:00 UTC +โ†“ +Fetch PRs from past 7 days +โ†“ +AI analyzes PR content +โ†“ +Determines version bump (major/minor/patch) +โ†“ +Generates changelog with smart versioning +โ†“ +Creates Pull Request automatically +โ†“ +You review and merge (5 min) +``` + +### Version Bump Intelligence + +The AI automatically determines version bump based on your rules: + +| Type | Criteria | Example | +|------|----------|---------| +| ๐Ÿ”ง **Patch** | Bug fixes, improvements, refinements | 4.3.5 โ†’ 4.3.6 | +| ๐Ÿš€ **Minor** | New features, new capabilities | 4.3.5 โ†’ 4.4.0 | +| ๐ŸŽ‰ **Major** | Platform transformation, architecture overhaul | 4.3.5 โ†’ 5.0.0 | + +**AI reads from**: `docs/VERSION_NUMBERING.md` (your semantic versioning rules) + +--- + +## ๐Ÿ”„ Your Weekly Workflow + +1. **Wednesday Morning** (~18:00 Beijing Time) + - GitHub Actions runs automatically + - Creates PR within 5-10 minutes + +2. **Your Review** (5-10 minutes) + - Check PR for new changelog + - Verify version bump type is correct + - Review generated content + +3. **Merge PR** (1 minute) + - Merge the automated PR + - Changelog is now in your repository + +4. **Copy to Mintlify** (5 minutes) + - Copy content from generated file + - Paste into `mintlify-docs/en/changelog/YYYY.mdx` + - Create PR to mintlify-docs repository + +**Total time**: ~10-15 minutes per week (vs 30-60 minutes manual) + +--- + +## ๐Ÿ“Š Key Features + +### โœ… Intelligent Version Management +- Auto-detects latest version from existing changelogs +- AI-powered semantic versioning +- Works indefinitely (2026, 2027, 2028, ...) +- No manual version tracking needed + +### โœ… Smart PR Content Analysis +- Analyzes all PRs from the week +- Detects new features vs improvements +- Follows your semantic versioning rules +- Defaults to patch if uncertain + +### โœ… Zero-Maintenance Automation +- Runs automatically every Wednesday +- Creates PRs automatically +- Year-agnostic (no code changes needed) +- Self-documenting outputs + +### โœ… Cost Efficient +- ~$1-3 per week in API costs +- ~$4-12 per month +- Saves 25-40 hours annually +- ROI: Positive after first month + +--- + +## ๐Ÿ“– Documentation + +### Quick References +- **[Quick Reference](.github/QUICKREF.md)** - 1-page cheat sheet +- **[Setup Guide](.github/SETUP.md)** - Detailed setup instructions + +### Detailed Docs +- **[Weekly Mode](docs/WEEKLY_MODE.md)** - How the weekly system works +- **[Version Numbering](docs/VERSION_NUMBERING.md)** - Semantic versioning rules +- **[Mode Comparison](docs/MODES_COMPARISON.md)** - Historical vs Weekly modes + +### Technical Details +- **[README.md](README.md)** - Full project documentation +- **Workflow File**: `.github/workflows/weekly-changelog.yml` +- **Generator Script**: `scripts/generate_weekly_changelog.py` + +--- + +## ๐Ÿ” Monitoring + +### Check Status +1. Go to **Actions** tab +2. View **Weekly Changelog Generation** runs +3. Click on any run to see details + +### Review PRs +1. Go to **Pull requests** tab +2. Look for `Weekly Changelog: v4.X.X (PATCH/MINOR/MAJOR)` +3. Review and merge + +### View Artifacts +- Each run uploads changelog as artifact +- Available for 30 days +- Download from workflow run page + +--- + +## ๐Ÿ› ๏ธ Customization + +### Change Schedule +Edit `.github/workflows/weekly-changelog.yml`: +```yaml +schedule: + - cron: '0 10 * * 3' # Wed 10:00 UTC +``` + +Use https://crontab.guru/ for cron expression help. + +### Modify Version Rules +Edit `docs/VERSION_NUMBERING.md` to update AI's decision criteria. + +### Adjust AI Analysis +Edit `scripts/generate_weekly_changelog.py` function `determine_version_bump()`. + +### Add More Languages +Currently generates English only. To add Chinese/Korean: +- Edit `scripts/generate_weekly_changelog.py` +- Change `languages = ['en']` to `['en', 'zh', 'ko']` +- Note: Increases API costs proportionally + +--- + +## โ“ Troubleshooting + +### Workflow Not Running? +- Check if secrets are configured correctly +- Verify workflow permissions are enabled +- Look for errors in Actions tab + +### Wrong Version Bump? +- Review AI's analysis in PR description +- Manually edit if needed +- Consider updating `VERSION_NUMBERING.md` + +### No PR Created? +- Normal if no PRs were merged this week +- Workflow exits with success status +- Check workflow logs for details + +### Need Help? +1. Check workflow logs in Actions tab +2. Review [Setup Guide](.github/SETUP.md) +3. Test locally before debugging GitHub Actions +4. See [Troubleshooting section](.github/SETUP.md#troubleshooting) + +--- + +## ๐ŸŽฏ Next Steps + +### Immediate (First Week) +1. โœ… Add `ANTHROPIC_API_KEY` secret +2. โœ… Enable workflow permissions +3. โœ… Trigger first manual test run +4. โœ… Review generated PR +5. โœ… Merge and verify + +### Ongoing (Every Week) +1. โœ… Check for PR on Wednesday +2. โœ… Review version bump type +3. โœ… Merge PR +4. โœ… Copy to mintlify-docs +5. โœ… Monitor for issues + +### Optional Enhancements +- Set up Slack/Discord notifications +- Add more languages (ZH, KO) +- Customize version bump logic +- Add more validation checks + +--- + +## ๐Ÿ“ˆ Benefits + +### Time Savings +- **Before**: 30-60 min manual work per week +- **After**: 10-15 min review per week +- **Annual savings**: 25-40 hours + +### Consistency +- โœ… Never miss a weekly release +- โœ… Consistent version numbering +- โœ… Standardized changelog format +- โœ… Automated PR creation + +### Quality +- โœ… AI-powered content analysis +- โœ… Semantic versioning compliance +- โœ… Comprehensive PR coverage +- โœ… Automatic documentation + +### Scalability +- โœ… Works indefinitely (2026+) +- โœ… No code changes needed +- โœ… Handles any number of PRs +- โœ… Adapts to your workflow + +--- + +## โœจ You're All Set! + +Your weekly changelog automation is **ready to go**. + +Just complete the 3 setup steps above, and the system will run automatically every Wednesday. + +**Questions?** Check the [Setup Guide](.github/SETUP.md) or [Quick Reference](.github/QUICKREF.md). + +**Happy automating!** ๐Ÿš€ diff --git a/AUTOMATION_FLOW.md b/AUTOMATION_FLOW.md new file mode 100644 index 0000000..b6f450d --- /dev/null +++ b/AUTOMATION_FLOW.md @@ -0,0 +1,256 @@ +# Weekly Changelog Automation Flow + +## ๐Ÿ”„ Complete Automation Process + +### Overview + +Every Wednesday at 10:00 UTC (18:00 Beijing Time), the system automatically: +1. Fetches merged PRs from 22 repositories +2. Generates changelogs in 3 languages (EN/ZH/KO) +3. Creates a Pull Request with all files +4. Uploads artifacts for download + +--- + +## ๐Ÿ“Š Detailed Flow + +``` +โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +โ”‚ โฐ TRIGGER: Every Wednesday 10:00 UTC โ”‚ +โ”‚ (Manual trigger also available) โ”‚ +โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + โ”‚ + โ–ผ +โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +โ”‚ ๐Ÿ“ก Step 1: Fetch Merged PRs โ”‚ +โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚ +โ”‚ โ€ข Scan 22 Codatta repositories โ”‚ +โ”‚ โ€ข Get PRs merged in past 7 days โ”‚ +โ”‚ โ€ข Extract: title, body, labels, links โ”‚ +โ”‚ โ€ข Save to: data/github_prs/YYYY-MM-DD.json โ”‚ +โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + โ”‚ + โ–ผ +โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +โ”‚ ๐Ÿค– Step 2: AI Version Analysis โ”‚ +โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚ +โ”‚ โ€ข Detect latest version from existing files โ”‚ +โ”‚ โ€ข Analyze PR content with Claude Sonnet 4.5 โ”‚ +โ”‚ โ€ข Determine bump type: โ”‚ +โ”‚ - MAJOR: Platform transformation โ”‚ +โ”‚ - MINOR: New features โ”‚ +โ”‚ - PATCH: Bug fixes, improvements โ”‚ +โ”‚ โ€ข Calculate next version (e.g., 4.3.5 โ†’ 4.3.6) โ”‚ +โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + โ”‚ + โ–ผ +โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +โ”‚ ๐ŸŒ Step 3: Generate Changelogs (3 Languages) โ”‚ +โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚ +โ”‚ โ€ข Call Claude Sonnet 4.5 for each language: โ”‚ +โ”‚ โ”œโ”€ English (EN) โ”‚ +โ”‚ โ”œโ”€ Chinese (ZH) ไธญๆ–‡ โ”‚ +โ”‚ โ””โ”€ Korean (KO) ํ•œ๊ตญ์–ด โ”‚ +โ”‚ โ”‚ +โ”‚ โ€ข For each language: โ”‚ +โ”‚ 1. Generate natural language content โ”‚ +โ”‚ 2. Load existing cumulative file (if exists) โ”‚ +โ”‚ 3. Load 2025 historical data (if first run) โ”‚ +โ”‚ 4. Prepend new content to top โ”‚ +โ”‚ 5. Overwrite file completely โ”‚ +โ”‚ โ”‚ +โ”‚ โ€ข Output files: โ”‚ +โ”‚ โ”œโ”€ output/changelog_EN.mdx (cumulative) โ”‚ +โ”‚ โ”œโ”€ output/changelog_ZH.mdx (cumulative) โ”‚ +โ”‚ โ””โ”€ output/changelog_KO.mdx (cumulative) โ”‚ +โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + โ”‚ + โ–ผ +โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +โ”‚ ๐Ÿ” Step 4: Extract Metadata โ”‚ +โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚ +โ”‚ โ€ข Parse changelog_EN.mdx header comment โ”‚ +โ”‚ โ€ข Extract: โ”‚ +โ”‚ - Version number (e.g., 4.3.6) โ”‚ +โ”‚ - Bump type (MAJOR/MINOR/PATCH) โ”‚ +โ”‚ - Date (YYYY-MM-DD) โ”‚ +โ”‚ - PR count (number of PRs processed) โ”‚ +โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + โ”‚ + โ–ผ +โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +โ”‚ ๐Ÿš€ Step 5: Create Pull Request (Automatic) โ”‚ +โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚ +โ”‚ โ€ข Branch: changelog-v4.3.6 โ”‚ +โ”‚ โ€ข Title: "chore: weekly changelog v4.3.6 (PATCH)" โ”‚ +โ”‚ โ€ข Commits all 3 files: โ”‚ +โ”‚ - output/changelog_EN.mdx โ”‚ +โ”‚ - output/changelog_ZH.mdx โ”‚ +โ”‚ - output/changelog_KO.mdx โ”‚ +โ”‚ โ€ข Labels: changelog, automated, multi-language โ”‚ +โ”‚ โ”‚ +โ”‚ โ€ข PR Body includes: โ”‚ +โ”‚ โœ… Version and bump type โ”‚ +โ”‚ โœ… Number of PRs processed โ”‚ +โ”‚ โœ… List of generated files โ”‚ +โ”‚ โœ… Cumulative architecture explanation โ”‚ +โ”‚ โœ… Next steps for mintlify-docs โ”‚ +โ”‚ โœ… Links to destination paths โ”‚ +โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + โ”‚ + โ–ผ +โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +โ”‚ ๐Ÿ“ฆ Step 6: Upload Artifacts โ”‚ +โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚ +โ”‚ โ€ข Artifact name: weekly-changelog-v4.3.6-all-languages โ”‚ +โ”‚ โ€ข Files: โ”‚ +โ”‚ - changelog_EN.mdx โ”‚ +โ”‚ - changelog_ZH.mdx โ”‚ +โ”‚ - changelog_KO.mdx โ”‚ +โ”‚ โ€ข Retention: 90 days โ”‚ +โ”‚ โ€ข Downloadable from Actions tab โ”‚ +โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + โ”‚ + โ–ผ +โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +โ”‚ โœ… DONE: PR Ready for Review โ”‚ +โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚ +โ”‚ Human actions needed: โ”‚ +โ”‚ 1. Review PR content (all 3 languages) โ”‚ +โ”‚ 2. Verify version bump is appropriate โ”‚ +โ”‚ 3. Merge this PR to aiok repository โ”‚ +โ”‚ 4. Copy files to mintlify-docs: โ”‚ +โ”‚ โ€ข en/changelog.mdx โ† changelog_EN.mdx โ”‚ +โ”‚ โ€ข zh/changelog.mdx โ† changelog_ZH.mdx โ”‚ +โ”‚ โ€ข ko/changelog.mdx โ† changelog_KO.mdx โ”‚ +โ”‚ 5. Create PR in mintlify-docs repository โ”‚ +โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ +``` + +--- + +## ๐Ÿ”‘ Key Features + +### 1. Zero Manual Intervention Required (for PR creation) +- โœ… Completely automated from trigger to PR +- โœ… No need to run scripts locally +- โœ… No need to create branches manually +- โœ… No need to write commit messages or PR descriptions + +### 2. Cumulative Architecture +- โœ… Single file per language that grows forever +- โœ… Week 1: Creates file +- โœ… Week 2: Prepends to Week 1 file (overwrites) +- โœ… Week 3: Prepends to Week 1+2 file (overwrites) +- โœ… Includes 2025 historical data (33 versions) + +### 3. Version Intelligence +- โœ… Auto-detects latest version from existing files +- โœ… AI analyzes PRs to determine bump type +- โœ… Respects manual version edits +- โœ… Prevents duplicates with `--force` override + +### 4. Multi-Language Support +- โœ… Generates 3 languages in parallel +- โœ… Same version across all languages +- โœ… Natural language generation (not translation) +- โœ… Each language has cumulative file + +--- + +## โš™๏ธ Configuration Required (One-Time Setup) + +### 1. GitHub Secrets +``` +ANTHROPIC_API_KEY: Your Claude API key +GITHUB_TOKEN: Auto-provided (no action needed) +``` + +### 2. Workflow Permissions +``` +Settings โ†’ Actions โ†’ General โ†’ Workflow permissions: +โœ… Read and write permissions +โœ… Allow GitHub Actions to create and approve pull requests +``` + +### 3. Workflow Schedule +```yaml +# Current: Every Wednesday 10:00 UTC +cron: '0 10 * * 3' + +# Customize in: .github/workflows/weekly-changelog.yml +``` + +--- + +## ๐Ÿ“Š Performance Metrics + +| Metric | Value | +|--------|-------| +| **Repositories Monitored** | 22 | +| **Languages Generated** | 3 (EN, ZH, KO) | +| **Runtime** | 5-10 minutes | +| **API Cost** | $1-3 per run | +| **Monthly Cost** | $4-12 (4 runs) | +| **Artifact Retention** | 90 days | +| **Automation Level** | 100% (PR creation) | + +--- + +## ๐Ÿšจ Error Handling + +| Scenario | Behavior | +|----------|----------| +| **No PRs merged** | Exit gracefully, no PR created | +| **Duplicate version** | Exit with warning (use `--force` to override) | +| **API key missing** | Fail with clear error message | +| **Permission denied** | Fail with permission instructions | +| **Claude API error** | Retry with exponential backoff | + +--- + +## ๐ŸŽฏ Human Touch Points + +### Required (Before First Run) +1. โœ… Configure GitHub Secrets +2. โœ… Enable workflow permissions + +### Optional (Weekly Review) +1. Review generated PR +2. Verify version bump type +3. Merge PR +4. Copy to mintlify-docs + +### Optional (As Needed) +1. Manual workflow trigger +2. Force regeneration with `--force` +3. Manual version override + +--- + +## ๐Ÿ“ˆ Future Enhancements + +### Possible Additions +- [ ] Automatic PR creation to mintlify-docs repository +- [ ] Slack/Discord notification on PR creation +- [ ] Changelog preview in PR comment +- [ ] A/B testing for different prompt styles +- [ ] Analytics dashboard for version trends + +### Current Limitations +- Requires manual copy to mintlify-docs (not automated) +- No notification system (only GitHub PR) +- No rollback mechanism (manual revert needed) + +--- + +## ๐Ÿ“š Related Documentation + +- [.github/SETUP.md](.github/SETUP.md) - Detailed setup guide +- [scripts/README.md](scripts/README.md) - Script documentation +- [README.md](README.md) - Project overview + +--- + +**Last Updated**: 2026-01-16 +**Automation Version**: 2.0 (with auto PR creation) diff --git a/COST_ANALYSIS.md b/COST_ANALYSIS.md new file mode 100644 index 0000000..f0615e8 --- /dev/null +++ b/COST_ANALYSIS.md @@ -0,0 +1,331 @@ +# AIOK Changelog System - Cost Analysis + +## ๐Ÿ’ฐ Monthly Cost Summary + +| Component | Cost per Run | Monthly (4 runs) | Yearly (52 runs) | +|-----------|-------------|------------------|------------------| +| **Claude API** | $0.08 | **$0.32** | **$4.20** | +| GitHub Actions | $0.00 | $0.00 | $0.00 | +| Storage | $0.00 | $0.00 | $0.00 | +| **TOTAL** | **$0.08** | **$0.32** | **$4.20** | + +--- + +## ๐Ÿ” Detailed Breakdown + +### Claude Sonnet 4.5 API Pricing + +**Official Pricing** (as of 2025-01): +- Input: **$3.00** per million tokens +- Output: **$15.00** per million tokens + +Source: https://www.anthropic.com/pricing + +### Per Weekly Run Cost + +**Assumptions:** +- Average PRs per week: **15** +- PR data size: ~200 tokens each = **3,000 tokens total** +- Languages: **3** (English, Chinese, Korean) + +#### 1. Version Bump Analysis (1 call) + +``` +Input: 3,500 tokens (PR data + analysis prompt) +Output: 10 tokens ("major", "minor", or "patch") + +Cost = (3,500 / 1,000,000) ร— $3.00 + (10 / 1,000,000) ร— $15.00 + = $0.0105 + $0.0002 + = $0.0107 +``` + +#### 2. Changelog Generation (3 calls, one per language) + +**Per Language:** +``` +Input: 3,800 tokens (PR data + prompt + examples) +Output: 800 tokens (formatted changelog content) + +Cost = (3,800 / 1,000,000) ร— $3.00 + (800 / 1,000,000) ร— $15.00 + = $0.0114 + $0.0120 + = $0.0234 per language +``` + +**All 3 Languages:** +``` +Total = $0.0234 ร— 3 = $0.0702 +``` + +#### Total Per Run + +``` +Version Analysis: $0.0107 (13.2%) +Changelog Generation: $0.0702 (86.8%) +โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ +TOTAL: $0.0809 +``` + +--- + +## ๐Ÿ“Š Scenario Analysis + +| Scenario | PRs | Cost/Run | Monthly | Yearly | Notes | +|----------|-----|----------|---------|--------|-------| +| **Light week** | 5 | $0.04 | $0.16 | $2.10 | Few updates | +| **Average week** | 15 | $0.08 | $0.32 | $4.20 | Normal activity | +| **Heavy week** | 30 | $0.12 | $0.49 | $6.30 | High activity | +| **Major release** | 50 | $0.16 | $0.65 | $8.40 | Release week | + +### Real-World Range + +**Expected monthly cost:** **$0.16 - $0.65** +- Minimum: Light activity weeks (~5 PRs) +- Maximum: Major release weeks (~50 PRs) + +--- + +## ๐ŸŽฏ Cost per Component + +### By Function + +| Function | % of Total | Cost/Run | +|----------|-----------|----------| +| Version bump analysis | 13.2% | $0.011 | +| English changelog | 28.9% | $0.023 | +| Chinese changelog | 28.9% | $0.023 | +| Korean changelog | 28.9% | $0.023 | + +### By Language + +If you only need English: +``` +Version Analysis: $0.011 +English only: $0.023 +โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ +TOTAL: $0.034 per run ($0.14/month) +``` + +Savings: **58% reduction** compared to 3 languages + +--- + +## ๐Ÿ’ก Cost Optimization Strategies + +### 1. Reduce Languages (if applicable) + +**Current:** EN + ZH + KO = $0.08/run +- **English only:** $0.034/run โ†’ Save 58% +- **EN + ZH:** $0.057/run โ†’ Save 29% + +Set in workflow: +```yaml +env: + LANGUAGES: "en" # or "en,zh" +``` + +### 2. Adjust Schedule + +**Current:** Every Wednesday (4 runs/month) +- **Bi-weekly:** 2 runs/month โ†’ $0.16/month (save 50%) +- **Monthly:** 1 run/month โ†’ $0.08/month (save 75%) + +Edit `.github/workflows/weekly-changelog.yml`: +```yaml +# Bi-weekly (every other Wednesday) +cron: '0 10 */14 * 3' + +# Monthly (first Wednesday) +cron: '0 10 1-7 * 3' +``` + +### 3. Batch PRs + +Instead of weekly runs, accumulate PRs and run monthly: +- **Weekly (15 PRs):** $0.08/run ร— 4 = $0.32/month +- **Monthly (60 PRs):** $0.16/run ร— 1 = $0.16/month +- **Savings:** 50% (but less frequent updates) + +### 4. Duplicate Prevention + +Use `--force` flag only when needed: +- Accidental double-run costs an extra $0.08 +- Duplicate detection prevents this automatically + +--- + +## ๐Ÿ†š Cost Comparison + +### Alternative Solutions + +| Solution | Monthly Cost | Annual Cost | Notes | +|----------|-------------|-------------|-------| +| **AIOK (Claude API)** | **$0.32** | **$4.20** | โœ… AI-powered, 3 languages | +| Manual writing | $0 | $0 | โฐ 2-3 hours/week labor | +| GPT-4 API | $0.48 | $6.24 | Similar quality, 50% more | +| Contract writer | $200-500 | $2,400-6,000 | Human quality, 500x cost | +| Internal team | $50-100 | $600-1,200 | 1-2 hours/week | + +### ROI Analysis + +**Manual writing time saved:** +- 2 hours/week ร— 4 weeks = **8 hours/month** +- At $50/hour = **$400/month value** + +**AIOK cost:** $0.32/month + +**ROI:** 1,250x return on investment (99.92% cost savings) + +--- + +## ๐Ÿ—๏ธ Infrastructure Costs + +### GitHub Actions + +**Public repositories:** FREE โœ… +**Private repositories:** +- Free tier: 2,000 minutes/month +- This workflow: ~5-10 minutes/run +- Monthly usage: ~40 minutes (well within free tier) + +**Cost:** $0.00 + +### Storage + +**Artifacts:** +- 3 MDX files ร— ~50KB each = **150KB per run** +- 4 runs/month = **600KB/month** +- Retention: 90 days = **~1.8MB total** + +**GitHub free tier:** 500MB included + +**Cost:** $0.00 + +### Data Transfer + +**API calls:** +- Input: ~15KB per run (PRs + prompts) +- Output: ~3KB per run (changelogs) +- Total: ~18KB per run ร— 4 = **72KB/month** + +**Cost:** Negligible (included in API pricing) + +--- + +## ๐Ÿ“ˆ Projected Growth + +### As Repository Count Increases + +**Current:** 22 repositories + +| Repositories | Avg PRs/week | Cost/Run | Monthly | Notes | +|-------------|--------------|----------|---------|-------| +| 22 (current) | 15 | $0.08 | $0.32 | โœ… | +| 30 | 20 | $0.10 | $0.40 | +25% | +| 50 | 30 | $0.12 | $0.49 | +53% | +| 100 | 50 | $0.16 | $0.65 | +103% | + +**Conclusion:** System scales linearly, remains cost-effective even at 100 repos. + +### As PR Volume Increases + +**Typical growth:** +- Year 1: 15 PRs/week โ†’ $4.20/year +- Year 2: 25 PRs/week โ†’ $6.30/year +- Year 3: 40 PRs/week โ†’ $8.40/year + +**Still negligible** compared to manual effort. + +--- + +## ๐ŸŽฏ Budget Planning + +### Recommended Budget Allocation + +**Conservative (covers all scenarios):** +- Monthly: **$1.00** (3x average usage) +- Yearly: **$12.00** + +**Realistic (based on average):** +- Monthly: **$0.50** (1.5x average usage) +- Yearly: **$6.00** + +**Minimum (light usage):** +- Monthly: **$0.20** (light activity) +- Yearly: **$2.50** + +### Monitoring Recommendations + +Set up cost alerts: +1. **Anthropic Console:** + - Set monthly budget: $2.00 + - Alert threshold: 80% ($1.60) + +2. **GitHub Actions:** + - Monitor minutes used (should stay at ~40/month) + - Free tier: 2,000 minutes/month + +--- + +## ๐Ÿ“Š Historical Cost Tracking + +### Template for Monthly Tracking + +``` +Month: January 2026 +Runs: 4 +Total PRs: 62 (avg 15.5/week) +Actual cost: $0.34 +Notes: Normal activity +``` + +### Cost Deviation Analysis + +If cost exceeds $1.00/month: +1. Check PR count (>100 PRs/month?) +2. Verify no duplicate runs +3. Check for long PR descriptions (>1000 words?) +4. Review language settings (all 3 enabled?) + +--- + +## ๐Ÿ”ฎ Future Considerations + +### Potential Cost Changes + +**Price increases:** +- Claude API prices stable since launch +- If prices double: $0.64/month (still negligible) + +**Price decreases:** +- API costs historically decrease over time +- Potential 50% reduction: $0.16/month + +**Feature additions:** +- Image analysis: +$0.10/run +- Code analysis: +$0.05/run +- Sentiment analysis: +$0.03/run + +--- + +## โœ… Conclusion + +### Key Takeaways + +1. **Extremely cost-effective:** $0.32/month for 3-language automation +2. **Scales linearly:** Doubling PRs only doubles cost (still <$1) +3. **Zero infrastructure cost:** GitHub Actions free tier covers all needs +4. **1,250x ROI:** Saves ~8 hours/month of manual work +5. **Predictable:** Cost varies 2-3x based on PR volume (still negligible) + +### Recommendation + +โœ… **Proceed with deployment** +- Cost is negligible ($0.32/month) +- Value is enormous (8 hours/month saved) +- System is production-ready + +--- + +**Last Updated:** 2026-01-16 +**Analysis Version:** 1.0 +**Pricing Source:** https://www.anthropic.com/pricing diff --git a/PR_TEMPLATE.md b/PR_TEMPLATE.md new file mode 100644 index 0000000..93c4899 --- /dev/null +++ b/PR_TEMPLATE.md @@ -0,0 +1,128 @@ +# AI-powered changelog automation system with security + +## ๐ŸŽฏ Overview + +This PR introduces a complete **AI-powered multi-language changelog generation system** with automated weekly runs and comprehensive security validation for AIOK skills. + +## โœจ Key Features + +### 1. AI-Powered Changelog Generation +- ๐Ÿค– **Claude Sonnet 4.5 Integration** for natural language generation +- ๐ŸŒ **Multi-language Support**: English, Chinese (ไธญๆ–‡), Korean (ํ•œ๊ตญ์–ด) +- ๐Ÿ“… **Cumulative Architecture**: 3 growing files (changelog_EN/ZH/KO.mdx) +- ๐Ÿท๏ธ **Semantic Versioning**: AI-powered version bump analysis (Major/Minor/Patch) +- ๐Ÿ“ก **22 Repository Coverage**: Fetches merged PRs from Codatta ecosystem + +### 2. Automated Weekly Runs +- โฐ **GitHub Actions**: Runs every Wednesday at 10:00 UTC +- ๐Ÿ”„ **Auto-Detection**: Finds latest version from existing changelogs +- ๐Ÿ›ก๏ธ **Duplicate Prevention**: Prevents running twice with `--force` override +- ๐Ÿ‘ค **Manual Intervention**: Respects human edits to version numbers + +### 3. Security System (5 Layers) +- โœ… **Pre-execution Validation**: Scans skills before execution +- ๐Ÿ”’ **Tool Restriction**: SAFE/MODERATE/HIGH-RISK/BLOCKED categorization +- ๐Ÿšจ **Pattern Detection**: Blocks API key theft, command injection, data exfiltration +- ๐ŸŒ **Network Control**: Whitelist-based domain access +- ๐Ÿ“Š **Security Scripts**: `validate_skill.py` + `scan_skills_security.py` + +## ๐Ÿ“ File Structure + +### Core Scripts (5 Active) +- `scripts/fetch_github_prs.py` - Fetches merged PRs from 22 repositories +- `scripts/generate_weekly_changelog.py` - Main weekly automation (cumulative) +- `scripts/generate_mintlify_changelog_v2.py` - AI generation engine +- `scripts/validate_skill.py` - Single skill security validator +- `scripts/scan_skills_security.py` - Batch security scanner + +### Configuration +- `config/repos.json` - 22 monitored repositories +- `config/2025_version_mapping.json` - Historical version data (33 versions) +- `skills/security/config.json` - Security rules and patterns + +### Documentation +- `scripts/README.md` - Complete script usage guide +- `skills/SECURITY.md` - Comprehensive security system documentation +- `skills/SECURITY_QUICKSTART.md` - 5-minute security setup + +### GitHub Actions +- `.github/workflows/weekly-changelog.yml` - Weekly automation workflow +- `.github/SETUP.md` - GitHub Actions configuration guide + +## ๐Ÿš€ Usage + +### Quick Start +```bash +# Generate weekly changelog +export ANTHROPIC_API_KEY="your_key" +export GITHUB_TOKEN="your_token" +python3 scripts/generate_weekly_changelog.py + +# Validate skills +python3 scripts/scan_skills_security.py +``` + +### GitHub Actions Setup +1. Add secrets: `ANTHROPIC_API_KEY`, `GITHUB_TOKEN` +2. Enable workflow permissions: Settings โ†’ Actions โ†’ Read and write permissions +3. Workflow runs automatically every Wednesday + +## ๐Ÿ”’ Security Highlights + +**Detected Patterns:** +- API key access: `$ANTHROPIC_API_KEY`, `$TOKEN`, `os.environ` +- Command injection: `&&`, `||`, `;`, `$(...)`, backticks +- Code evaluation: `eval()`, `exec()`, `__import__()` +- Data exfiltration: Suspicious URLs, curl patterns +- Network access: Non-whitelisted domains + +**Tool Categories:** +- โœ… SAFE: Read, Grep, Glob, WebFetch +- โš ๏ธ MODERATE: Write, Edit, NotebookEdit +- ๐Ÿ”ฅ HIGH-RISK: Bash, Task, Skill +- โŒ BLOCKED: Exec, System, Shell, Eval + +## ๐Ÿ“Š Impact + +### Code Optimization +- **Reduced scripts**: 15 โ†’ 5 (67% reduction) +- **Archived deprecated files**: 10 scripts moved to `scripts/archived/` +- **Documentation cleanup**: 12 redundant docs deleted + +### Changelog Data +- **2025 Historical**: 33 versions (3.3.0 โ†’ 4.3.0) +- **2026+ Weekly**: Automated cumulative growth +- **Output Format**: Mintlify-compatible MDX with month filters +- **Multi-language**: 3 files generated (EN, ZH, KO) each run + +## ๐Ÿงช Testing + +**All scripts tested:** +- โœ… Weekly changelog generation with duplicate detection +- โœ… Version auto-detection from existing files +- โœ… Security validation on existing skills +- โœ… Git workflow (branch, commit, push, rebase) + +## ๐Ÿ“š Related Documentation + +- [scripts/README.md](./scripts/README.md) - All 5 scripts with examples +- [skills/SECURITY.md](./skills/SECURITY.md) - Security system guide +- [config/README.md](./config/README.md) - Repository configuration + +## โš™๏ธ Configuration Required + +After merging, configure these GitHub secrets: +1. `ANTHROPIC_API_KEY` - For Claude Sonnet 4.5 API access +2. `GITHUB_TOKEN` - For PR fetching and automation (auto-provided or custom) + +## ๐ŸŽฏ Next Steps + +1. โœ… Merge this PR +2. โš™๏ธ Configure GitHub Secrets +3. ๐Ÿ”ง Enable workflow permissions +4. โฐ First automated run: Next Wednesday at 10:00 UTC +5. ๐Ÿ“Š Monitor PR creation and changelog updates + +--- + +**Co-Authored-By: Claude Sonnet 4.5 ** diff --git a/README.md b/README.md index 9516971..98c1707 100644 --- a/README.md +++ b/README.md @@ -11,11 +11,85 @@ AIOK is designed to supercharge traditional tech startups into AI-native entitie - **Messengers as Interfaces**: Long-term, AIOK will be hooked up with cloud-deployed agents accessible via Telegram, Lark, or Slack. - **Selective Information Ingestion**: Users can upload files or send messages; the system intelligently decides how and where to integrate this information. +--- + +## โœจ Automated Changelog System + +AIOK includes an **AI-powered multi-language changelog generation system** for Codatta Platform. + +### ๐ŸŽฏ Key Features + +- ๐Ÿ“ก Fetches merged PRs from 22 Codatta repositories +- ๐Ÿค– Uses Claude Sonnet 4.5 for natural language generation +- ๐ŸŒ Supports 3 languages: English, Chinese (ไธญๆ–‡), Korean (ํ•œ๊ตญ์–ด) +- ๐Ÿ“… Month-based filtering with cumulative changelog architecture +- ๐Ÿท๏ธ Semantic versioning without V prefix (3.8.0, not V3.8.0) +- ๐Ÿ”„ Weekly automated runs via GitHub Actions +- ๐Ÿ›ก๏ธ 5-layer security system for skill validation + +### ๐Ÿš€ Quick Start + +#### Generate Changelog + +```bash +# 1. Set API key +export ANTHROPIC_API_KEY="your_key" +export GITHUB_TOKEN="your_token" + +# 2. Generate weekly changelog (auto-detects latest version) +python3 scripts/generate_weekly_changelog.py + +# 3. Preview output (all 3 languages generated) +cat output/changelog_EN.mdx # English +cat output/changelog_ZH.mdx # Chinese (ไธญๆ–‡) +cat output/changelog_KO.mdx # Korean (ํ•œ๊ตญ์–ด) +``` + +**Features**: +- โœ… Auto-detects latest version from existing changelogs +- โœ… AI-powered semantic versioning (analyzes PRs to determine major/minor/patch) +- โœ… Cumulative file architecture (3 growing files: EN/ZH/KO) +- โœ… Includes 2025 historical data (33 versions) +- โœ… Duplicate prevention with `--force` override +- โœ… Multi-language generation (English, Chinese, Korean) + +**Version Logic**: Intelligent versioning based on PR content +- ๐Ÿ”ง Patch (4.3.5 โ†’ 4.3.6): Bug fixes, improvements +- ๐Ÿš€ Minor (4.3.5 โ†’ 4.4.0): New features +- ๐ŸŽ‰ Major (4.3.5 โ†’ 5.0.0): Platform transformation + +### ๐Ÿ”’ Security System + +AIOK includes a 5-layer security system to protect against skill poisoning, malicious attacks, and key theft: + +```bash +# Validate a single skill +python3 scripts/validate_skill.py skills/skill-name/ + +# Scan all skills for security issues +python3 scripts/scan_skills_security.py +``` + +See [skills/SECURITY.md](./skills/SECURITY.md) for comprehensive security documentation. + +### ๐Ÿ“š Documentation + +- [scripts/README.md](./scripts/README.md) - All 5 active scripts with usage examples +- [skills/SECURITY.md](./skills/SECURITY.md) - Complete security system guide +- [skills/SECURITY_QUICKSTART.md](./skills/SECURITY_QUICKSTART.md) - 5-minute security setup +- [config/README.md](./config/README.md) - Repository monitoring configuration + +--- + ## Repository Navigation -- [`/brain/`](./brain/): Our knowledge base and raw ideas. -- [`/skills/`](./skills/): Our library of executable capabilities and [Skill Guidelines](./skills/SKILL_GUIDELINES.md). -- [`/projects/`](./projects/): Active workstreams and project management. -- [`/ops/`](./ops/): Protocols and norms for hybrid human-agent collaboration. + +- [`/brain/`](./brain/): Our knowledge base and raw ideas +- [`/skills/`](./skills/): Our library of executable capabilities and [Skill Guidelines](./skills/SKILL_GUIDELINES.md) +- [`/projects/`](./projects/): Active workstreams and project management +- [`/ops/`](./ops/): Protocols and norms for hybrid human-agent collaboration +- [`/scripts/`](./scripts/): Automation scripts (5 active scripts, see [scripts/README.md](./scripts/README.md)) +- [`/config/`](./config/): Configuration files (repos, version mappings) +- [`/data/`](./data/): PR data and generated changelogs ## Semantic Versioning This system follows semantic versioning. Current Version: `0.1.0`. diff --git a/config/2025_version_mapping.json b/config/2025_version_mapping.json new file mode 100644 index 0000000..4492372 --- /dev/null +++ b/config/2025_version_mapping.json @@ -0,0 +1,276 @@ +{ + "description": "Manual version mapping from our weekly data to actual mintlify-docs versions", + "baseline": { + "date": "2025-06-25", + "version": "3.8.0", + "week_number": 9 + }, + "mappings": [ + { + "week_number": 9, + "end_date": "2025-06-25", + "version": "3.8.0", + "mintlify_date": "June 25, 2025", + "pr_count": 9, + "note": "Baseline" + }, + { + "week_number": 10, + "end_date": "2025-07-02", + "version": "3.8.2", + "mintlify_date": "July 2, 2025", + "pr_count": 4, + "note": "Matches mintlify V3.8.2 July 2" + }, + { + "week_number": 11, + "end_date": "2025-07-09", + "version": "3.8.3", + "mintlify_date": "July 7, 2025", + "pr_count": 1, + "note": "Close to mintlify V3.8.3 July 7 and V3.8.4 July 9, using V3.8.3" + }, + { + "week_number": 12, + "end_date": "2025-07-16", + "version": "3.8.5", + "mintlify_date": "July 16, 2025", + "pr_count": 6, + "note": "Matches mintlify V3.8.5 July 16" + }, + { + "week_number": 13, + "end_date": "2025-07-23", + "version": null, + "mintlify_date": null, + "pr_count": 2, + "note": "Skip - only 2 PRs, mintlify has V3.8.7 July 24 (next day)" + }, + { + "week_number": 14, + "end_date": "2025-07-30", + "version": "3.8.7", + "mintlify_date": "July 24, 2025", + "pr_count": 4, + "note": "Use mintlify V3.8.7 July 24 (within same week)" + }, + { + "week_number": 15, + "end_date": "2025-08-06", + "version": "3.8.9", + "mintlify_date": "Aug 08, 2025", + "pr_count": 13, + "note": "Close to mintlify V3.8.9 Aug 08 (2 days later)" + }, + { + "week_number": 16, + "end_date": "2025-08-13", + "version": "3.9.1", + "mintlify_date": "Aug 15, 2025", + "pr_count": 5, + "note": "Close to mintlify V3.9.1 Aug 15 (2 days later)" + }, + { + "week_number": 17, + "end_date": "2025-08-20", + "version": "3.9.2", + "mintlify_date": "Aug 22, 2025", + "pr_count": 5, + "note": "Close to mintlify V3.9.2 Aug 22 (2 days later)" + }, + { + "week_number": 18, + "end_date": "2025-08-27", + "version": "3.9.3", + "mintlify_date": "Aug 28, 2025", + "pr_count": 4, + "note": "Close to mintlify V3.9.3 Aug 28 (1 day later)" + }, + { + "week_number": 19, + "end_date": "2025-09-03", + "version": "3.9.6", + "mintlify_date": "Sep 05, 2025", + "pr_count": 4, + "note": "Close to mintlify V3.9.6 Sep 05 (2 days later)" + }, + { + "week_number": 20, + "end_date": "2025-09-10", + "version": "3.9.8", + "mintlify_date": "Sep 12, 2025", + "pr_count": 14, + "note": "Close to mintlify V3.9.8 Sep 12 (2 days later)" + }, + { + "week_number": 21, + "end_date": "2025-09-17", + "version": "3.9.9", + "mintlify_date": "Sep 12, 2025", + "pr_count": 16, + "note": "Large week (16 PRs), increment from V3.9.8" + }, + { + "week_number": 22, + "end_date": "2025-09-24", + "version": "3.9.10", + "mintlify_date": null, + "pr_count": 9, + "note": "Increment from V3.9.9 (9 PRs)" + }, + { + "week_number": 23, + "end_date": "2025-10-01", + "version": "4.0.0", + "mintlify_date": "Oct 10, 2025", + "pr_count": 9, + "note": "Major version bump - mintlify V4.0.0 Oct 10" + }, + { + "week_number": 24, + "end_date": "2025-10-15", + "version": "4.1.0", + "mintlify_date": "Oct 13, 2025", + "pr_count": 18, + "note": "Large week, mintlify has V4.1.0 Oct 13 and V4.1.1 Oct 15" + }, + { + "week_number": 25, + "end_date": "2025-10-22", + "version": "4.1.3", + "mintlify_date": "Oct 23, 2025", + "pr_count": 3, + "note": "Close to mintlify V4.1.3 Oct 23 (1 day later)" + }, + { + "week_number": 26, + "end_date": "2025-11-05", + "version": "4.2.0", + "mintlify_date": "Nov 05, 2025", + "pr_count": 4, + "note": "Matches mintlify V4.2.0 Nov 05" + }, + { + "week_number": 27, + "end_date": "2025-11-12", + "version": "4.2.1", + "mintlify_date": null, + "pr_count": 7, + "note": "Increment from V4.2.0 (7 PRs)" + }, + { + "week_number": 28, + "end_date": "2025-11-19", + "version": "4.2.2", + "mintlify_date": null, + "pr_count": 11, + "note": "Increment from V4.2.1 (11 PRs)" + }, + { + "week_number": 29, + "end_date": "2025-11-26", + "version": "4.2.3", + "mintlify_date": null, + "pr_count": 21, + "note": "Increment from V4.2.2 (large week, 21 PRs)" + }, + { + "week_number": 30, + "end_date": "2025-12-03", + "version": "4.2.4", + "mintlify_date": null, + "pr_count": 15, + "note": "Increment from V4.2.3 (15 PRs)" + }, + { + "week_number": 31, + "end_date": "2025-12-10", + "version": "4.2.5", + "mintlify_date": null, + "pr_count": 10, + "note": "Increment from V4.2.4 (10 PRs)" + }, + { + "week_number": 32, + "end_date": "2025-12-17", + "version": "4.2.6", + "mintlify_date": null, + "pr_count": 14, + "note": "Increment from V4.2.5 (14 PRs)" + }, + { + "week_number": 33, + "end_date": "2025-12-24", + "version": "4.2.7", + "mintlify_date": null, + "pr_count": 4, + "note": "Increment from V4.2.6 (4 PRs)" + }, + { + "week_number": 34, + "end_date": "2025-12-31", + "version": "4.3.0", + "mintlify_date": "Dec 31, 2025", + "pr_count": 21, + "note": "Matches mintlify V4.3.0 Dec 31 (Staking - minor version bump, 21 PRs)" + } + ], + "before_baseline": [ + { + "week_number": 1, + "end_date": "2025-01-08", + "version": "3.3.0", + "pr_count": 3, + "note": "Generated backwards from baseline" + }, + { + "week_number": 2, + "end_date": "2025-01-22", + "version": "3.4.6", + "pr_count": 1, + "note": "Generated backwards from baseline" + }, + { + "week_number": 3, + "end_date": "2025-01-29", + "version": "3.4.7", + "pr_count": 1, + "note": "Generated backwards from baseline" + }, + { + "week_number": 4, + "end_date": "2025-02-12", + "version": "3.4.8", + "pr_count": 1, + "note": "Generated backwards from baseline" + }, + { + "week_number": 5, + "end_date": "2025-04-02", + "version": "3.4.9", + "pr_count": 1, + "note": "Generated backwards from baseline" + }, + { + "week_number": 6, + "end_date": "2025-05-07", + "version": "3.5.0", + "pr_count": 1, + "note": "Generated backwards from baseline" + }, + { + "week_number": 7, + "end_date": "2025-05-21", + "version": "3.6.0", + "pr_count": 1, + "note": "Generated backwards from baseline" + }, + { + "week_number": 8, + "end_date": "2025-05-28", + "version": "3.7.9", + "pr_count": 1, + "note": "Generated backwards from baseline" + } + ] +} diff --git a/config/README.md b/config/README.md new file mode 100644 index 0000000..49972ca --- /dev/null +++ b/config/README.md @@ -0,0 +1,272 @@ +# ๐Ÿ“‹ Repository Monitoring Configuration Guide + +## ๐Ÿ“ Configuration Files + +This directory contains different repository monitoring configuration files. You can choose based on your needs. + +### Configuration File List + +| File Name | Repositories | Use Case | Recommended | +|-----------|--------------|----------|-------------| +| `repos.json` | 12 repos | **Default config**, includes core business repositories | โญโญโญโญโญ | +| `repos-core-only.json` | 3 repos | Core business only (frontend + backend) | โญโญโญโญ | +| `repos-all.json` | 24 repos | All Codatta repositories (including forks) | โญโญโญ | + +--- + +## ๐ŸŽฏ Default Configuration: `repos.json` (Recommended) + +**Included repositories**: 12 core business repositories + +### Categories + +#### ๐ŸŽจ Frontend and Documentation +- `codattaFrontierWebsite` - Main frontend website +- `mintlify-docs` - Documentation system + +#### ๐Ÿ”ง Backend Services (may be private) +- `cfp-user` - User accounts and authentication +- `cfp-asset` - Asset ranking and management +- `codattaOnchainDataVerify` - On-chain data verification + +#### โ›“๏ธ Smart Contracts +- `codatta-erc8004` - ERC8004 and W3C DID implementation +- `submission-data-fingerprint` - Data fingerprint storage +- `CodattaBuildKeyEliteHunter` - Elite Hunter contract +- `vault-ton-contract` - TON staking vault + +#### ๐Ÿค– AI Tools +- `ai-content-studio` - Social media automation tool + +#### ๐Ÿ”Œ SDKs/Tools +- `codatta-connect` - Connect tool +- `Reputation-DID` - Reputation DID + +--- + +## ๐ŸŽฏ Minimal Configuration: `repos-core-only.json` + +**Included repositories**: 3 core business repositories + +Only monitors the most critical frontend and backend services: +- โœ… `codattaFrontierWebsite` - Frontend +- โœ… `cfp-user` - User service +- โœ… `cfp-asset` - Asset service + +**Use cases**: +- Focus only on core product user experience changes +- Reduce changelog noise +- Quick generation, focused on key points + +--- + +## ๐ŸŽฏ Complete Configuration: `repos-all.json` + +**Included repositories**: 24 all public repositories + +Includes all public repositories under the Codatta organization: +- All core repositories +- Forked repositories (e.g., `jekyll_blog`, `ai-tools-evidently`) +- Configuration repositories (e.g., `.github`, `eigenlayer-config`) +- Documentation and brand resources + +**Use cases**: +- Need to understand all technical activities of the organization +- Generate complete technical reports +- Include documentation, configuration changes, etc. + +โš ๏ธ **Note**: +- May include many irrelevant PRs (documentation, configuration, etc.) +- Changelog will be quite long +- Suitable for internal technical teams, not for user-facing + +--- + +## ๐Ÿ”„ How to Switch Configurations + +### Method 1: Rename File (Recommended) + +```bash +# Use core configuration +cp config/repos-core-only.json config/repos.json + +# Use complete configuration +cp config/repos-all.json config/repos.json +``` + +### Method 2: Modify Environment Variable + +Set in local testing or GitHub Actions: + +```bash +# Use complete configuration +export CONFIG_PATH="config/repos-all.json" +python scripts/fetch_github_prs.py +``` + +### Method 3: Edit `repos.json` Directly + +Manually add or remove repositories: + +```json +{ + "organization": "codatta", + "repositories": [ + { + "name": "new-repo-name", + "description": "Repository description" + } + ] +} +``` + +--- + +## ๐Ÿ“Š Configuration Comparison + +### Estimated Changelog Length + +| Configuration | Avg PRs/week | Changelog Lines | Suitable For | +|--------------|--------------|-----------------|--------------| +| core-only | 5-15 | 30-80 lines | User changelog | +| Default (12 repos) | 15-40 | 80-200 lines | Product changelog | +| Complete (24 repos) | 30-80 | 150-400 lines | Internal tech report | + +--- + +## ๐ŸŽฏ Recommended Usage + +### For User-Facing Changelog +๐Ÿ‘‰ Use **`repos.json` (default)** or **`repos-core-only.json`** + +**Reasons**: +- Focus on user experience related changes +- Filter out infrastructure, configuration details +- Concise and readable changelog + +### For Internal Technical Team +๐Ÿ‘‰ Use **`repos-all.json`** + +**Reasons**: +- Understand all technical activities +- Include smart contracts, tools, documentation changes +- Complete technical view + +--- + +## ๐Ÿ“ Configuration Field Explanation + +### Repository Configuration + +```json +{ + "name": "repository-name", // Required, GitHub repository name + "description": "Repository description" // Optional, helps AI understand purpose +} +``` + +**Purpose of `description`**: +- Helps AI better understand PR context +- Generate more accurate user-friendly descriptions +- Recommended to provide clear description for each repository + +### Global Configuration + +```json +{ + "organization": "codatta", // GitHub organization name + "days_lookback": 7, // Lookback days (default 7) + "changelog_config": { + "categories": { // Category configuration + "features": "โœจ New Features", + "performance": "โšก Performance" + }, + "exclude_labels": [ // Excluded labels + "cleanup", "refactor" + ] + } +} +``` + +--- + +## ๐Ÿ”ง Advanced Usage + +### Group by Team + +You can create multiple configuration files to generate different changelogs for different teams: + +```bash +config/ +โ”œโ”€โ”€ repos-frontend.json # Frontend team +โ”œโ”€โ”€ repos-backend.json # Backend team +โ”œโ”€โ”€ repos-contracts.json # Contract team +โ””โ”€โ”€ repos-all.json # All +``` + +### Custom Categories + +Modify `changelog_config.categories` to add custom categories: + +```json +{ + "changelog_config": { + "categories": { + "features": "โœจ New Features", + "performance": "โšก Performance", + "bugfixes": "๐Ÿž Bug Fixes", + "smart_contracts": "โ›“๏ธ Smart Contracts", // New + "documentation": "๐Ÿ“š Documentation", // New + "security": "๐Ÿ”’ Security" // New + } + } +} +``` + +--- + +## โ“ FAQ + +### Q: Will private repositories be fetched? + +**A**: Yes, as long as: +1. GitHub Token has access permission +2. Repository name is in the configuration file + +**Note**: `cfp-user` and `cfp-asset` are not visible in public list, meaning they may be private. + +### Q: How to monitor only specific repositories? + +**A**: Edit `repos.json`, keep only the repositories you want. + +### Q: Do forked repositories need monitoring? + +**A**: Usually not. Forked repositories (e.g., `jekyll_blog`, `ai-tools-llama-factory`) rarely have changes directly related to Codatta products. + +**Recommendation**: Use default configuration, which already excludes forked repositories. + +### Q: How to add a new repository? + +**A**: Add to the `repositories` array: + +```json +{ + "name": "new-repo-name", + "description": "Repository description" +} +``` + +After committing and pushing, it will be automatically included in the next run. + +--- + +## ๐Ÿ“š Related Documentation + +- [Quick Start Guide](../QUICK_START.md) +- [AI Service Comparison](../docs/AI_SERVICE_COMPARISON.md) + +--- + +**Current Recommended Configuration**: `repos.json` (12 core repositories) + +This configuration balances completeness and readability, suitable for generating user-facing product changelogs. diff --git a/config/repos.json b/config/repos.json new file mode 100644 index 0000000..05b0976 --- /dev/null +++ b/config/repos.json @@ -0,0 +1,110 @@ +{ + "organization": "codatta", + "repositories": [ + { + "name": "codattaFrontierWebsite", + "description": "Main Frontend - Codatta Frontier Website" + }, + { + "name": "mintlify-docs", + "description": "Documentation - Codatta documentation system" + }, + { + "name": "ai-content-studio", + "description": "AI Tools - Social media automation toolkit" + }, + { + "name": "codatta-erc8004", + "description": "Smart Contracts - ERC8004 and W3C DID implementation" + }, + { + "name": "submission-data-fingerprint", + "description": "Smart Contracts - Data fingerprint storage" + }, + { + "name": "codattaOnchainDataVerify", + "description": "Backend Service - Onchain data verification" + }, + { + "name": "codatta-connect", + "description": "SDK/Tools - Connection utilities" + }, + { + "name": "Reputation-DID", + "description": "DID - Reputation decentralized identity" + }, + { + "name": "CodattaBuildKeyEliteHunter", + "description": "Smart Contracts - Elite Hunter contracts" + }, + { + "name": "vault-ton-contract", + "description": "Smart Contracts - TON staking vault" + }, + { + "name": "jekyll_blog", + "description": "Blog - Jekyll blog skeleton (fork)" + }, + { + "name": "codatta_blog", + "description": "Blog - Codatta blog system (fork)" + }, + { + "name": "docs", + "description": "Documentation - General documentation repository" + }, + { + "name": "brand-kit", + "description": "Brand - Brand guidelines and design assets" + }, + { + "name": "dialectsVoiceWebsite", + "description": "Frontend - Dialects Voice website" + }, + { + "name": ".github", + "description": "Config - GitHub organization configuration" + }, + { + "name": "assets", + "description": "Assets - Static resources and assets" + }, + { + "name": "awesome-finetuning-and-evaluation", + "description": "Resources - AI model fine-tuning and evaluation resources" + }, + { + "name": "ai-tools-evidently", + "description": "AI Tools - ML/LLM observability framework (fork)" + }, + { + "name": "ai-tools-llama-factory", + "description": "AI Tools - LLM fine-tuning toolkit (fork)" + }, + { + "name": "codatta-frontier-standards", + "description": "Standards - Technical standards and design patterns" + }, + { + "name": "eigenlayer-config", + "description": "Config - EigenLayer configuration files" + } + ], + "days_lookback": 7, + "changelog_config": { + "title_prefix": "## [Unreleased]", + "categories": { + "features": "New Features", + "performance": "Performance", + "bugfixes": "Bug Fixes", + "other": "Other Changes" + }, + "exclude_labels": [ + "cleanup", + "refactor", + "ci/cd", + "tests", + "documentation" + ] + } +} diff --git a/data/2025_historical/index.json b/data/2025_historical/index.json new file mode 100644 index 0000000..b287bb4 --- /dev/null +++ b/data/2025_historical/index.json @@ -0,0 +1,256 @@ +{ + "fetched_at": "2026-01-15T07:44:31.179195+00:00", + "date_range": { + "start": "2025-01-01", + "end": "2025-06-25" + }, + "total_weeks": 35, + "total_prs": 252, + "weeks": [ + { + "week_number": 1, + "start_date": "2025-01-01", + "end_date": "2025-01-08", + "pr_count": 3, + "file": "week_01_2025-01-01_to_2025-01-08.json" + }, + { + "week_number": 2, + "start_date": "2025-01-15", + "end_date": "2025-01-22", + "pr_count": 1, + "file": "week_02_2025-01-15_to_2025-01-22.json" + }, + { + "week_number": 3, + "start_date": "2025-01-22", + "end_date": "2025-01-29", + "pr_count": 1, + "file": "week_03_2025-01-22_to_2025-01-29.json" + }, + { + "week_number": 4, + "start_date": "2025-02-05", + "end_date": "2025-02-12", + "pr_count": 1, + "file": "week_04_2025-02-05_to_2025-02-12.json" + }, + { + "week_number": 5, + "start_date": "2025-03-26", + "end_date": "2025-04-02", + "pr_count": 1, + "file": "week_05_2025-03-26_to_2025-04-02.json" + }, + { + "week_number": 6, + "start_date": "2025-04-30", + "end_date": "2025-05-07", + "pr_count": 1, + "file": "week_06_2025-04-30_to_2025-05-07.json" + }, + { + "week_number": 7, + "start_date": "2025-05-14", + "end_date": "2025-05-21", + "pr_count": 1, + "file": "week_07_2025-05-14_to_2025-05-21.json" + }, + { + "week_number": 8, + "start_date": "2025-05-21", + "end_date": "2025-05-28", + "pr_count": 1, + "file": "week_08_2025-05-21_to_2025-05-28.json" + }, + { + "week_number": 9, + "start_date": "2025-06-18", + "end_date": "2025-06-25", + "pr_count": 9, + "file": "week_09_2025-06-18_to_2025-06-25.json" + }, + { + "week_number": 10, + "start_date": "2025-06-25", + "end_date": "2025-07-02", + "pr_count": 4, + "file": "week_10_2025-06-25_to_2025-07-02.json" + }, + { + "week_number": 11, + "start_date": "2025-07-02", + "end_date": "2025-07-09", + "pr_count": 1, + "file": "week_11_2025-07-02_to_2025-07-09.json" + }, + { + "week_number": 12, + "start_date": "2025-07-09", + "end_date": "2025-07-16", + "pr_count": 6, + "file": "week_12_2025-07-09_to_2025-07-16.json" + }, + { + "week_number": 13, + "start_date": "2025-07-16", + "end_date": "2025-07-23", + "pr_count": 2, + "file": "week_13_2025-07-16_to_2025-07-23.json" + }, + { + "week_number": 14, + "start_date": "2025-07-23", + "end_date": "2025-07-30", + "pr_count": 4, + "file": "week_14_2025-07-23_to_2025-07-30.json" + }, + { + "week_number": 15, + "start_date": "2025-07-30", + "end_date": "2025-08-06", + "pr_count": 13, + "file": "week_15_2025-07-30_to_2025-08-06.json" + }, + { + "week_number": 16, + "start_date": "2025-08-06", + "end_date": "2025-08-13", + "pr_count": 5, + "file": "week_16_2025-08-06_to_2025-08-13.json" + }, + { + "week_number": 17, + "start_date": "2025-08-13", + "end_date": "2025-08-20", + "pr_count": 5, + "file": "week_17_2025-08-13_to_2025-08-20.json" + }, + { + "week_number": 18, + "start_date": "2025-08-20", + "end_date": "2025-08-27", + "pr_count": 4, + "file": "week_18_2025-08-20_to_2025-08-27.json" + }, + { + "week_number": 19, + "start_date": "2025-08-27", + "end_date": "2025-09-03", + "pr_count": 4, + "file": "week_19_2025-08-27_to_2025-09-03.json" + }, + { + "week_number": 20, + "start_date": "2025-09-03", + "end_date": "2025-09-10", + "pr_count": 14, + "file": "week_20_2025-09-03_to_2025-09-10.json" + }, + { + "week_number": 21, + "start_date": "2025-09-10", + "end_date": "2025-09-17", + "pr_count": 16, + "file": "week_21_2025-09-10_to_2025-09-17.json" + }, + { + "week_number": 22, + "start_date": "2025-09-17", + "end_date": "2025-09-24", + "pr_count": 9, + "file": "week_22_2025-09-17_to_2025-09-24.json" + }, + { + "week_number": 23, + "start_date": "2025-09-24", + "end_date": "2025-10-01", + "pr_count": 9, + "file": "week_23_2025-09-24_to_2025-10-01.json" + }, + { + "week_number": 24, + "start_date": "2025-10-08", + "end_date": "2025-10-15", + "pr_count": 18, + "file": "week_24_2025-10-08_to_2025-10-15.json" + }, + { + "week_number": 25, + "start_date": "2025-10-15", + "end_date": "2025-10-22", + "pr_count": 3, + "file": "week_25_2025-10-15_to_2025-10-22.json" + }, + { + "week_number": 26, + "start_date": "2025-10-29", + "end_date": "2025-11-05", + "pr_count": 4, + "file": "week_26_2025-10-29_to_2025-11-05.json" + }, + { + "week_number": 27, + "start_date": "2025-11-05", + "end_date": "2025-11-12", + "pr_count": 7, + "file": "week_27_2025-11-05_to_2025-11-12.json" + }, + { + "week_number": 28, + "start_date": "2025-11-12", + "end_date": "2025-11-19", + "pr_count": 11, + "file": "week_28_2025-11-12_to_2025-11-19.json" + }, + { + "week_number": 29, + "start_date": "2025-11-19", + "end_date": "2025-11-26", + "pr_count": 21, + "file": "week_29_2025-11-19_to_2025-11-26.json" + }, + { + "week_number": 30, + "start_date": "2025-11-26", + "end_date": "2025-12-03", + "pr_count": 15, + "file": "week_30_2025-11-26_to_2025-12-03.json" + }, + { + "week_number": 31, + "start_date": "2025-12-03", + "end_date": "2025-12-10", + "pr_count": 10, + "file": "week_31_2025-12-03_to_2025-12-10.json" + }, + { + "week_number": 32, + "start_date": "2025-12-10", + "end_date": "2025-12-17", + "pr_count": 14, + "file": "week_32_2025-12-10_to_2025-12-17.json" + }, + { + "week_number": 33, + "start_date": "2025-12-17", + "end_date": "2025-12-24", + "pr_count": 4, + "file": "week_33_2025-12-17_to_2025-12-24.json" + }, + { + "week_number": 34, + "start_date": "2025-12-24", + "end_date": "2025-12-31", + "pr_count": 21, + "file": "week_34_2025-12-24_to_2025-12-31.json" + }, + { + "week_number": 35, + "start_date": "2025-12-31", + "end_date": "2025-12-31", + "pr_count": 9, + "file": "week_35_2025-12-31_to_2025-12-31.json" + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_01_2025-01-01_to_2025-01-08.json b/data/2025_historical/week_01_2025-01-01_to_2025-01-08.json new file mode 100644 index 0000000..5c0d956 --- /dev/null +++ b/data/2025_historical/week_01_2025-01-01_to_2025-01-08.json @@ -0,0 +1,38 @@ +{ + "week_number": 1, + "start_date": "2025-01-01", + "end_date": "2025-01-08", + "pr_count": 3, + "prs": [ + { + "repo": "codattaFrontierWebsite", + "number": 11, + "title": "fix: reward success toast style", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/11", + "merged_at": "2025-01-03T08:51:29+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 13, + "title": "fix: fix banner", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/13", + "merged_at": "2025-01-03T09:14:18+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 16, + "title": "feat: extension singn add auth", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/16", + "merged_at": "2025-01-07T02:29:58+00:00", + "author": "ymwangel", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_02_2025-01-15_to_2025-01-22.json b/data/2025_historical/week_02_2025-01-15_to_2025-01-22.json new file mode 100644 index 0000000..6b5f453 --- /dev/null +++ b/data/2025_historical/week_02_2025-01-15_to_2025-01-22.json @@ -0,0 +1,18 @@ +{ + "week_number": 2, + "start_date": "2025-01-15", + "end_date": "2025-01-22", + "pr_count": 1, + "prs": [ + { + "repo": "codattaFrontierWebsite", + "number": 18, + "title": "Feat/modify referral table style", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/18", + "merged_at": "2025-01-15T07:28:20+00:00", + "author": "ymwangel", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_03_2025-01-22_to_2025-01-29.json b/data/2025_historical/week_03_2025-01-22_to_2025-01-29.json new file mode 100644 index 0000000..ee1cedf --- /dev/null +++ b/data/2025_historical/week_03_2025-01-22_to_2025-01-29.json @@ -0,0 +1,18 @@ +{ + "week_number": 3, + "start_date": "2025-01-22", + "end_date": "2025-01-29", + "pr_count": 1, + "prs": [ + { + "repo": "codattaFrontierWebsite", + "number": 19, + "title": "Feat/replace social interface", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/19", + "merged_at": "2025-01-23T07:20:35+00:00", + "author": "ymwangel", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_04_2025-02-05_to_2025-02-12.json b/data/2025_historical/week_04_2025-02-05_to_2025-02-12.json new file mode 100644 index 0000000..40f08b7 --- /dev/null +++ b/data/2025_historical/week_04_2025-02-05_to_2025-02-12.json @@ -0,0 +1,18 @@ +{ + "week_number": 4, + "start_date": "2025-02-05", + "end_date": "2025-02-12", + "pr_count": 1, + "prs": [ + { + "repo": "codattaFrontierWebsite", + "number": 23, + "title": "Feat/end to end", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/23", + "merged_at": "2025-02-11T13:17:14+00:00", + "author": "ymwangel", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_05_2025-03-26_to_2025-04-02.json b/data/2025_historical/week_05_2025-03-26_to_2025-04-02.json new file mode 100644 index 0000000..afc79e9 --- /dev/null +++ b/data/2025_historical/week_05_2025-03-26_to_2025-04-02.json @@ -0,0 +1,18 @@ +{ + "week_number": 5, + "start_date": "2025-03-26", + "end_date": "2025-04-02", + "pr_count": 1, + "prs": [ + { + "repo": "codattaFrontierWebsite", + "number": 27, + "title": "feat: chagne frontier banner style", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/27", + "merged_at": "2025-03-26T05:57:18+00:00", + "author": "ymwangel", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_06_2025-04-30_to_2025-05-07.json b/data/2025_historical/week_06_2025-04-30_to_2025-05-07.json new file mode 100644 index 0000000..deeac61 --- /dev/null +++ b/data/2025_historical/week_06_2025-04-30_to_2025-05-07.json @@ -0,0 +1,18 @@ +{ + "week_number": 6, + "start_date": "2025-04-30", + "end_date": "2025-05-07", + "pr_count": 1, + "prs": [ + { + "repo": "awesome-finetuning-and-evaluation", + "number": 1, + "title": "add tutorial in format of X thread on fine-tuning Qwen-3 100% locally", + "url": "https://github.com/codatta/awesome-finetuning-and-evaluation/pull/1", + "merged_at": "2025-05-04T10:46:08+00:00", + "author": "beingzy", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_07_2025-05-14_to_2025-05-21.json b/data/2025_historical/week_07_2025-05-14_to_2025-05-21.json new file mode 100644 index 0000000..bf3b9a0 --- /dev/null +++ b/data/2025_historical/week_07_2025-05-14_to_2025-05-21.json @@ -0,0 +1,18 @@ +{ + "week_number": 7, + "start_date": "2025-05-14", + "end_date": "2025-05-21", + "pr_count": 1, + "prs": [ + { + "repo": "awesome-finetuning-and-evaluation", + "number": 2, + "title": "add pydantic-eval", + "url": "https://github.com/codatta/awesome-finetuning-and-evaluation/pull/2", + "merged_at": "2025-05-17T07:17:44+00:00", + "author": "beingzy", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_08_2025-05-21_to_2025-05-28.json b/data/2025_historical/week_08_2025-05-21_to_2025-05-28.json new file mode 100644 index 0000000..1941a8d --- /dev/null +++ b/data/2025_historical/week_08_2025-05-21_to_2025-05-28.json @@ -0,0 +1,18 @@ +{ + "week_number": 8, + "start_date": "2025-05-21", + "end_date": "2025-05-28", + "pr_count": 1, + "prs": [ + { + "repo": "codattaFrontierWebsite", + "number": 36, + "title": "fix: fix build", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/36", + "merged_at": "2025-05-26T09:29:08+00:00", + "author": "markof", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_09_2025-06-18_to_2025-06-25.json b/data/2025_historical/week_09_2025-06-18_to_2025-06-25.json new file mode 100644 index 0000000..a009c17 --- /dev/null +++ b/data/2025_historical/week_09_2025-06-18_to_2025-06-25.json @@ -0,0 +1,98 @@ +{ + "week_number": 9, + "start_date": "2025-06-18", + "end_date": "2025-06-25", + "pr_count": 9, + "prs": [ + { + "repo": "brand-kit", + "number": 6, + "title": "update new codatta logo", + "url": "https://github.com/codatta/brand-kit/pull/6", + "merged_at": "2025-06-19T03:51:12+00:00", + "author": "paulhandle", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 40, + "title": "feat: update logos", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/40", + "merged_at": "2025-06-19T07:48:00+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "brand-kit", + "number": 7, + "title": "Upgrade logo", + "url": "https://github.com/codatta/brand-kit/pull/7", + "merged_at": "2025-06-19T08:38:23+00:00", + "author": "beingzy", + "body": "", + "labels": [] + }, + { + "repo": "dialectsVoiceWebsite", + "number": 2, + "title": "Update README.md", + "url": "https://github.com/codatta/dialectsVoiceWebsite/pull/2", + "merged_at": "2025-06-20T02:57:16+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 41, + "title": "Feat/booster2", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/41", + "merged_at": "2025-06-20T07:52:03+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 42, + "title": "feat: update title", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/42", + "merged_at": "2025-06-20T10:49:59+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 43, + "title": "Feat/bn booster", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/43", + "merged_at": "2025-06-20T12:07:09+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 44, + "title": "Feat/log", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/44", + "merged_at": "2025-06-24T04:25:11+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 45, + "title": "Feat/bn booster", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/45", + "merged_at": "2025-06-24T07:00:34+00:00", + "author": "markof", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_10_2025-06-25_to_2025-07-02.json b/data/2025_historical/week_10_2025-06-25_to_2025-07-02.json new file mode 100644 index 0000000..dca8ab5 --- /dev/null +++ b/data/2025_historical/week_10_2025-06-25_to_2025-07-02.json @@ -0,0 +1,48 @@ +{ + "week_number": 10, + "start_date": "2025-06-25", + "end_date": "2025-07-02", + "pr_count": 4, + "prs": [ + { + "repo": "codattaFrontierWebsite", + "number": 46, + "title": "Feat/log", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/46", + "merged_at": "2025-06-27T02:59:10+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 47, + "title": "Food TPL 000003", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/47", + "merged_at": "2025-06-30T07:10:19+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "brand-kit", + "number": 8, + "title": "add whitepaper WIP version", + "url": "https://github.com/codatta/brand-kit/pull/8", + "merged_at": "2025-07-01T02:40:44+00:00", + "author": "beingzy", + "body": "", + "labels": [] + }, + { + "repo": "brand-kit", + "number": 9, + "title": "add whitepaper.pdf for universal referencing", + "url": "https://github.com/codatta/brand-kit/pull/9", + "merged_at": "2025-07-01T02:47:06+00:00", + "author": "beingzy", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_11_2025-07-02_to_2025-07-09.json b/data/2025_historical/week_11_2025-07-02_to_2025-07-09.json new file mode 100644 index 0000000..a8d29b5 --- /dev/null +++ b/data/2025_historical/week_11_2025-07-02_to_2025-07-09.json @@ -0,0 +1,18 @@ +{ + "week_number": 11, + "start_date": "2025-07-02", + "end_date": "2025-07-09", + "pr_count": 1, + "prs": [ + { + "repo": "codattaFrontierWebsite", + "number": 48, + "title": "Feat/bn booster", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/48", + "merged_at": "2025-07-04T08:54:54+00:00", + "author": "markof", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_12_2025-07-09_to_2025-07-16.json b/data/2025_historical/week_12_2025-07-09_to_2025-07-16.json new file mode 100644 index 0000000..4ea682b --- /dev/null +++ b/data/2025_historical/week_12_2025-07-09_to_2025-07-16.json @@ -0,0 +1,68 @@ +{ + "week_number": 12, + "start_date": "2025-07-09", + "end_date": "2025-07-16", + "pr_count": 6, + "prs": [ + { + "repo": "codattaFrontierWebsite", + "number": 49, + "title": "Feat/booster m2w1", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/49", + "merged_at": "2025-07-14T10:31:24+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 50, + "title": "feat: udpate booster week 4", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/50", + "merged_at": "2025-07-14T12:32:34+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 51, + "title": "feat: update read text", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/51", + "merged_at": "2025-07-15T02:29:10+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 52, + "title": "Feat/fate frontier", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/52", + "merged_at": "2025-07-15T03:03:48+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 53, + "title": "feat: add trim to food cooking method", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/53", + "merged_at": "2025-07-15T03:23:29+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 54, + "title": "feat: update robotics react style", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/54", + "merged_at": "2025-07-15T07:12:43+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_13_2025-07-16_to_2025-07-23.json b/data/2025_historical/week_13_2025-07-16_to_2025-07-23.json new file mode 100644 index 0000000..01eae25 --- /dev/null +++ b/data/2025_historical/week_13_2025-07-16_to_2025-07-23.json @@ -0,0 +1,28 @@ +{ + "week_number": 13, + "start_date": "2025-07-16", + "end_date": "2025-07-23", + "pr_count": 2, + "prs": [ + { + "repo": "codattaFrontierWebsite", + "number": 55, + "title": "Feat/userinfo", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/55", + "merged_at": "2025-07-22T05:12:54+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 56, + "title": "feat: fix avatar display", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/56", + "merged_at": "2025-07-22T06:50:29+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_14_2025-07-23_to_2025-07-30.json b/data/2025_historical/week_14_2025-07-23_to_2025-07-30.json new file mode 100644 index 0000000..772c780 --- /dev/null +++ b/data/2025_historical/week_14_2025-07-23_to_2025-07-30.json @@ -0,0 +1,48 @@ +{ + "week_number": 14, + "start_date": "2025-07-23", + "end_date": "2025-07-30", + "pr_count": 4, + "prs": [ + { + "repo": "codattaFrontierWebsite", + "number": 57, + "title": "Feat/crypto frontier", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/57", + "merged_at": "2025-07-28T03:48:20+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 58, + "title": "fix: fix repeat submit robotics", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/58", + "merged_at": "2025-07-28T04:19:24+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 59, + "title": "fix: update crypto frontier config", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/59", + "merged_at": "2025-07-28T07:19:53+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 60, + "title": "fix: update crypto config", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/60", + "merged_at": "2025-07-28T07:49:58+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_15_2025-07-30_to_2025-08-06.json b/data/2025_historical/week_15_2025-07-30_to_2025-08-06.json new file mode 100644 index 0000000..bb04a0c --- /dev/null +++ b/data/2025_historical/week_15_2025-07-30_to_2025-08-06.json @@ -0,0 +1,138 @@ +{ + "week_number": 15, + "start_date": "2025-07-30", + "end_date": "2025-08-06", + "pr_count": 13, + "prs": [ + { + "repo": "codattaFrontierWebsite", + "number": 61, + "title": "Feat/GitHub action", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/61", + "merged_at": "2025-07-30T01:35:47+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 62, + "title": "feat: update action", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/62", + "merged_at": "2025-07-30T01:50:23+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 63, + "title": "feat: update action file", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/63", + "merged_at": "2025-07-30T02:00:57+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 64, + "title": "feat: update vite", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/64", + "merged_at": "2025-07-30T02:20:18+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 65, + "title": "Feat/GitHub action", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/65", + "merged_at": "2025-07-30T02:42:32+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 66, + "title": "Feat/onchain", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/66", + "merged_at": "2025-07-31T14:43:21+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 67, + "title": "Feat/onchain", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/67", + "merged_at": "2025-08-01T03:43:09+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 68, + "title": "feat: update activity detail", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/68", + "merged_at": "2025-08-01T06:14:35+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 69, + "title": "Feat/onchain", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/69", + "merged_at": "2025-08-01T08:11:42+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 70, + "title": "fix: fix svg icon", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/70", + "merged_at": "2025-08-01T08:29:48+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 71, + "title": "Feat/submission history", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/71", + "merged_at": "2025-08-01T12:53:31+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 72, + "title": "feat: change total submission to qualified", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/72", + "merged_at": "2025-08-01T12:56:47+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 73, + "title": "Feat/activity w7", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/73", + "merged_at": "2025-08-05T06:31:48+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_16_2025-08-06_to_2025-08-13.json b/data/2025_historical/week_16_2025-08-06_to_2025-08-13.json new file mode 100644 index 0000000..a4a6a10 --- /dev/null +++ b/data/2025_historical/week_16_2025-08-06_to_2025-08-13.json @@ -0,0 +1,58 @@ +{ + "week_number": 16, + "start_date": "2025-08-06", + "end_date": "2025-08-13", + "pr_count": 5, + "prs": [ + { + "repo": "codattaFrontierWebsite", + "number": 74, + "title": "fix: fix quiz style", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/74", + "merged_at": "2025-08-06T11:15:12+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 75, + "title": "Feat/user assets", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/75", + "merged_at": "2025-08-07T07:13:51+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 76, + "title": "feat: add quiz & read for w8", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/76", + "merged_at": "2025-08-11T02:47:33+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 77, + "title": "fix: xny display", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/77", + "merged_at": "2025-08-12T04:02:28+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 78, + "title": "Feat/collection w9", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/78", + "merged_at": "2025-08-12T07:45:04+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_17_2025-08-13_to_2025-08-20.json b/data/2025_historical/week_17_2025-08-13_to_2025-08-20.json new file mode 100644 index 0000000..e84006c --- /dev/null +++ b/data/2025_historical/week_17_2025-08-13_to_2025-08-20.json @@ -0,0 +1,58 @@ +{ + "week_number": 17, + "start_date": "2025-08-13", + "end_date": "2025-08-20", + "pr_count": 5, + "prs": [ + { + "repo": "codattaFrontierWebsite", + "number": 79, + "title": "Feat/homepage update", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/79", + "merged_at": "2025-08-13T07:45:50+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 80, + "title": "Feat/collection w9 and home", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/80", + "merged_at": "2025-08-14T03:04:31+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 81, + "title": "Feat/asset claim", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/81", + "merged_at": "2025-08-15T03:48:57+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 82, + "title": "Feat/collection w9 and home", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/82", + "merged_at": "2025-08-18T02:31:40+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 83, + "title": "Feat/kitchen app data", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/83", + "merged_at": "2025-08-19T01:47:17+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_18_2025-08-20_to_2025-08-27.json b/data/2025_historical/week_18_2025-08-20_to_2025-08-27.json new file mode 100644 index 0000000..b00c269 --- /dev/null +++ b/data/2025_historical/week_18_2025-08-20_to_2025-08-27.json @@ -0,0 +1,48 @@ +{ + "week_number": 18, + "start_date": "2025-08-20", + "end_date": "2025-08-27", + "pr_count": 4, + "prs": [ + { + "repo": "codattaFrontierWebsite", + "number": 84, + "title": "Feat/fate 2", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/84", + "merged_at": "2025-08-22T03:17:22+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 85, + "title": "Feat/crypto 2", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/85", + "merged_at": "2025-08-22T05:13:22+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 86, + "title": "fix: update fate form limit", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/86", + "merged_at": "2025-08-25T07:00:03+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 87, + "title": "Feat/survey privacy", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/87", + "merged_at": "2025-08-26T07:46:54+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_19_2025-08-27_to_2025-09-03.json b/data/2025_historical/week_19_2025-08-27_to_2025-09-03.json new file mode 100644 index 0000000..b087d6d --- /dev/null +++ b/data/2025_historical/week_19_2025-08-27_to_2025-09-03.json @@ -0,0 +1,48 @@ +{ + "week_number": 19, + "start_date": "2025-08-27", + "end_date": "2025-09-03", + "pr_count": 4, + "prs": [ + { + "repo": "codattaFrontierWebsite", + "number": 88, + "title": "Feat/user data profile", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/88", + "merged_at": "2025-08-28T07:35:11+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 89, + "title": "Feat/activity w10", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/89", + "merged_at": "2025-08-28T09:53:52+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 90, + "title": "feat: update kitchen tips", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/90", + "merged_at": "2025-08-28T11:37:37+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 91, + "title": "Feat/user data profile", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/91", + "merged_at": "2025-08-28T12:16:42+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_20_2025-09-03_to_2025-09-10.json b/data/2025_historical/week_20_2025-09-03_to_2025-09-10.json new file mode 100644 index 0000000..fa8b983 --- /dev/null +++ b/data/2025_historical/week_20_2025-09-03_to_2025-09-10.json @@ -0,0 +1,148 @@ +{ + "week_number": 20, + "start_date": "2025-09-03", + "end_date": "2025-09-10", + "pr_count": 14, + "prs": [ + { + "repo": "codattaFrontierWebsite", + "number": 92, + "title": "feat: task onchain verify", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/92", + "merged_at": "2025-09-05T06:17:45+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 93, + "title": "feat: week-11", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/93", + "merged_at": "2025-09-05T06:18:21+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 94, + "title": "fix: fix build error", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/94", + "merged_at": "2025-09-05T06:30:20+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 95, + "title": "fix: fix step2 guide", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/95", + "merged_at": "2025-09-05T06:57:28+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 96, + "title": "fix: gemso submit email", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/96", + "merged_at": "2025-09-05T08:52:07+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 97, + "title": "fix: update gensmo days", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/97", + "merged_at": "2025-09-05T09:23:23+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 98, + "title": "Feat/fashion app trial", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/98", + "merged_at": "2025-09-05T10:54:38+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 99, + "title": "Feat/high quality user", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/99", + "merged_at": "2025-09-08T10:42:33+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 100, + "title": "fix: high quality user result", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/100", + "merged_at": "2025-09-08T10:53:44+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 101, + "title": "feat: update high quality user experience", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/101", + "merged_at": "2025-09-08T12:12:21+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 102, + "title": "feat: high quality user add repeat image error", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/102", + "merged_at": "2025-09-09T04:27:34+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 103, + "title": "feat: high quality user", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/103", + "merged_at": "2025-09-09T05:08:07+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 104, + "title": "feat: update qrcode", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/104", + "merged_at": "2025-09-09T08:28:54+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 105, + "title": "feat: update", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/105", + "merged_at": "2025-09-09T08:39:01+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_21_2025-09-10_to_2025-09-17.json b/data/2025_historical/week_21_2025-09-10_to_2025-09-17.json new file mode 100644 index 0000000..48f115d --- /dev/null +++ b/data/2025_historical/week_21_2025-09-10_to_2025-09-17.json @@ -0,0 +1,168 @@ +{ + "week_number": 21, + "start_date": "2025-09-10", + "end_date": "2025-09-17", + "pr_count": 16, + "prs": [ + { + "repo": "codattaFrontierWebsite", + "number": 106, + "title": "feat: high quality user add invite link copy", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/106", + "merged_at": "2025-09-10T04:52:24+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 107, + "title": "feat: high quality user add storage", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/107", + "merged_at": "2025-09-10T06:43:18+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 108, + "title": "feat: hide try again button", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/108", + "merged_at": "2025-09-10T06:58:08+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 109, + "title": "Dev 0905", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/109", + "merged_at": "2025-09-10T07:00:39+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 110, + "title": "feat: update button text", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/110", + "merged_at": "2025-09-10T08:10:43+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 111, + "title": "Feat/high quality user v2", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/111", + "merged_at": "2025-09-11T07:40:57+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 112, + "title": "fix: fix build", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/112", + "merged_at": "2025-09-11T10:07:11+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 113, + "title": "feat: update high quality user flow", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/113", + "merged_at": "2025-09-12T09:51:59+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 114, + "title": "feat: w12 activity", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/114", + "merged_at": "2025-09-12T10:20:50+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 115, + "title": "Dev 0911", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/115", + "merged_at": "2025-09-12T11:44:39+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 116, + "title": "feat: add withdraw", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/116", + "merged_at": "2025-09-14T03:14:44+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 117, + "title": "feat: update high quality user task2", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/117", + "merged_at": "2025-09-15T03:42:42+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 118, + "title": "feat: update high quality user task1 logic", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/118", + "merged_at": "2025-09-15T11:26:27+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 119, + "title": "feat: update high quality user v2 read", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/119", + "merged_at": "2025-09-16T07:13:34+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 120, + "title": "feat: add hight quality user v2 join tg group", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/120", + "merged_at": "2025-09-16T07:37:41+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 121, + "title": "feat: update isjoinedtgroup api", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/121", + "merged_at": "2025-09-16T07:40:54+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_22_2025-09-17_to_2025-09-24.json b/data/2025_historical/week_22_2025-09-17_to_2025-09-24.json new file mode 100644 index 0000000..6f414fc --- /dev/null +++ b/data/2025_historical/week_22_2025-09-17_to_2025-09-24.json @@ -0,0 +1,98 @@ +{ + "week_number": 22, + "start_date": "2025-09-17", + "end_date": "2025-09-24", + "pr_count": 9, + "prs": [ + { + "repo": "codattaFrontierWebsite", + "number": 122, + "title": "Dev 0911", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/122", + "merged_at": "2025-09-18T02:26:52+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 123, + "title": "feat: high quality user join codatta", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/123", + "merged_at": "2025-09-18T10:08:12+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 124, + "title": "Feat/high quality user v2 emai", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/124", + "merged_at": "2025-09-19T07:44:30+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 125, + "title": "feat: update img aspect", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/125", + "merged_at": "2025-09-19T08:43:37+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 126, + "title": "feat: update email modal", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/126", + "merged_at": "2025-09-19T09:21:18+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 127, + "title": "Feat/high quality user v2 emai", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/127", + "merged_at": "2025-09-22T06:50:52+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 128, + "title": "Feat/high quality user v2 emai", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/128", + "merged_at": "2025-09-22T08:42:17+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 129, + "title": "fix: fix frontier show", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/129", + "merged_at": "2025-09-22T08:52:06+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 130, + "title": "fix: update connect-wallet", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/130", + "merged_at": "2025-09-22T10:03:09+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_23_2025-09-24_to_2025-10-01.json b/data/2025_historical/week_23_2025-09-24_to_2025-10-01.json new file mode 100644 index 0000000..5b6fd3e --- /dev/null +++ b/data/2025_historical/week_23_2025-09-24_to_2025-10-01.json @@ -0,0 +1,98 @@ +{ + "week_number": 23, + "start_date": "2025-09-24", + "end_date": "2025-10-01", + "pr_count": 9, + "prs": [ + { + "repo": "codattaFrontierWebsite", + "number": 131, + "title": "Feat/airdrop three tasks", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/131", + "merged_at": "2025-09-25T08:42:08+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 132, + "title": "Dev 0925", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/132", + "merged_at": "2025-09-25T08:42:48+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 133, + "title": "Feat/airdop activity", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/133", + "merged_at": "2025-09-25T08:43:45+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 135, + "title": "fix: update email interactive", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/135", + "merged_at": "2025-09-26T12:05:10+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 134, + "title": "merge", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/134", + "merged_at": "2025-09-29T02:35:02+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 136, + "title": "Feat/airdrop three tasks", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/136", + "merged_at": "2025-09-29T02:52:10+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 137, + "title": "fix: fix airdrop expert answer", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/137", + "merged_at": "2025-09-29T06:05:25+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 138, + "title": "fix: fix airdrop", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/138", + "merged_at": "2025-09-29T10:24:39+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 139, + "title": "feat: update airdrop guidelines", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/139", + "merged_at": "2025-09-30T09:16:50+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_24_2025-10-08_to_2025-10-15.json b/data/2025_historical/week_24_2025-10-08_to_2025-10-15.json new file mode 100644 index 0000000..461bf62 --- /dev/null +++ b/data/2025_historical/week_24_2025-10-08_to_2025-10-15.json @@ -0,0 +1,188 @@ +{ + "week_number": 24, + "start_date": "2025-10-08", + "end_date": "2025-10-15", + "pr_count": 18, + "prs": [ + { + "repo": "codattaFrontierWebsite", + "number": 140, + "title": "Feat/airdop activity", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/140", + "merged_at": "2025-10-09T06:30:33+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 141, + "title": "fix: bug fix", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/141", + "merged_at": "2025-10-09T08:28:23+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 142, + "title": "Feat/airdop activity", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/142", + "merged_at": "2025-10-09T09:21:24+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 143, + "title": "Feat/airdrop three tasks", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/143", + "merged_at": "2025-10-10T06:34:24+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 144, + "title": "feat: update airdrop food", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/144", + "merged_at": "2025-10-10T06:42:35+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 145, + "title": "fix: fix airdrop food style", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/145", + "merged_at": "2025-10-11T03:37:14+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 146, + "title": "fix: fix text", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/146", + "merged_at": "2025-10-11T04:06:55+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 147, + "title": "fix: update airdrop style", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/147", + "merged_at": "2025-10-11T05:26:42+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 148, + "title": "feat: update point show", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/148", + "merged_at": "2025-10-11T06:58:20+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 149, + "title": "feat: update airdrop hero display", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/149", + "merged_at": "2025-10-11T08:08:23+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 150, + "title": "feat: update link and add rules link", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/150", + "merged_at": "2025-10-11T09:48:01+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 151, + "title": "fix: fix rules display", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/151", + "merged_at": "2025-10-11T09:55:04+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 152, + "title": "feat: update airdrop expert text", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/152", + "merged_at": "2025-10-13T06:06:23+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 153, + "title": "Dev 0925", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/153", + "merged_at": "2025-10-13T06:07:05+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 154, + "title": "Feat/airdop activity", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/154", + "merged_at": "2025-10-13T10:52:56+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 155, + "title": "feat: add red dot and change leaderboard page size", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/155", + "merged_at": "2025-10-13T11:26:44+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 156, + "title": "feat: remove pagination size changer", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/156", + "merged_at": "2025-10-13T11:38:39+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 157, + "title": "fix: fix leaderboard rank display", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/157", + "merged_at": "2025-10-13T11:46:00+00:00", + "author": "markof", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_25_2025-10-15_to_2025-10-22.json b/data/2025_historical/week_25_2025-10-15_to_2025-10-22.json new file mode 100644 index 0000000..ff8249f --- /dev/null +++ b/data/2025_historical/week_25_2025-10-15_to_2025-10-22.json @@ -0,0 +1,38 @@ +{ + "week_number": 25, + "start_date": "2025-10-15", + "end_date": "2025-10-22", + "pr_count": 3, + "prs": [ + { + "repo": "codattaFrontierWebsite", + "number": 158, + "title": "feat: add black list and block submit submission", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/158", + "merged_at": "2025-10-15T07:19:39+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 159, + "title": "feat: update airdrop guideline", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/159", + "merged_at": "2025-10-16T08:10:28+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 160, + "title": "fix: fix build", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/160", + "merged_at": "2025-10-16T08:32:24+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_26_2025-10-29_to_2025-11-05.json b/data/2025_historical/week_26_2025-10-29_to_2025-11-05.json new file mode 100644 index 0000000..4391168 --- /dev/null +++ b/data/2025_historical/week_26_2025-10-29_to_2025-11-05.json @@ -0,0 +1,48 @@ +{ + "week_number": 26, + "start_date": "2025-10-29", + "end_date": "2025-11-05", + "pr_count": 4, + "prs": [ + { + "repo": "mintlify-docs", + "number": 1, + "title": "add business/", + "url": "https://github.com/codatta/mintlify-docs/pull/1", + "merged_at": "2025-10-29T04:30:36+00:00", + "author": "beingzy", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 161, + "title": "Feat/did", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/161", + "merged_at": "2025-10-29T09:22:55+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 162, + "title": "fix: fix build", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/162", + "merged_at": "2025-10-30T01:37:25+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 163, + "title": "feat: optimize did flow", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/163", + "merged_at": "2025-10-30T09:35:15+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_27_2025-11-05_to_2025-11-12.json b/data/2025_historical/week_27_2025-11-05_to_2025-11-12.json new file mode 100644 index 0000000..8b5f6fa --- /dev/null +++ b/data/2025_historical/week_27_2025-11-05_to_2025-11-12.json @@ -0,0 +1,78 @@ +{ + "week_number": 27, + "start_date": "2025-11-05", + "end_date": "2025-11-12", + "pr_count": 7, + "prs": [ + { + "repo": "codattaFrontierWebsite", + "number": 166, + "title": "Feat/did", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/166", + "merged_at": "2025-11-05T08:16:23+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 167, + "title": "feat: fix chinese", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/167", + "merged_at": "2025-11-06T07:40:08+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "mintlify-docs", + "number": 2, + "title": "sync", + "url": "https://github.com/codatta/mintlify-docs/pull/2", + "merged_at": "2025-11-07T14:01:21+00:00", + "author": "beingzy", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 165, + "title": "Feat/rebuild 1104", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/165", + "merged_at": "2025-11-10T02:56:25+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 168, + "title": "feat: update leaderboard", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/168", + "merged_at": "2025-11-10T10:10:15+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "mintlify-docs", + "number": 3, + "title": "Docs/update onboarding", + "url": "https://github.com/codatta/mintlify-docs/pull/3", + "merged_at": "2025-11-11T04:38:06+00:00", + "author": "JessieJiang2021", + "body": "", + "labels": [] + }, + { + "repo": "mintlify-docs", + "number": 4, + "title": "remove paul", + "url": "https://github.com/codatta/mintlify-docs/pull/4", + "merged_at": "2025-11-11T07:07:16+00:00", + "author": "beingzy", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_28_2025-11-12_to_2025-11-19.json b/data/2025_historical/week_28_2025-11-12_to_2025-11-19.json new file mode 100644 index 0000000..1a7e2b8 --- /dev/null +++ b/data/2025_historical/week_28_2025-11-12_to_2025-11-19.json @@ -0,0 +1,118 @@ +{ + "week_number": 28, + "start_date": "2025-11-12", + "end_date": "2025-11-19", + "pr_count": 11, + "prs": [ + { + "repo": "codattaFrontierWebsite", + "number": 169, + "title": "Feat/airdrop update", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/169", + "merged_at": "2025-11-12T08:48:08+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 170, + "title": "Feat/physical", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/170", + "merged_at": "2025-11-12T08:52:04+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 171, + "title": "Feat/physical", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/171", + "merged_at": "2025-11-12T08:59:13+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 172, + "title": "feat: frontier list task verified", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/172", + "merged_at": "2025-11-14T03:10:13+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 173, + "title": "feat: add vertification tips", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/173", + "merged_at": "2025-11-14T08:40:44+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 174, + "title": "feat: input length limit", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/174", + "merged_at": "2025-11-14T09:13:29+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 175, + "title": "feat: submit limit", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/175", + "merged_at": "2025-11-14T09:29:47+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 176, + "title": "fix: fix verification back", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/176", + "merged_at": "2025-11-17T03:41:54+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 177, + "title": "feat: update physical style", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/177", + "merged_at": "2025-11-17T08:43:45+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 178, + "title": "feat: update question", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/178", + "merged_at": "2025-11-17T09:09:11+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 179, + "title": "feat: fix builer", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/179", + "merged_at": "2025-11-17T09:21:52+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_29_2025-11-19_to_2025-11-26.json b/data/2025_historical/week_29_2025-11-19_to_2025-11-26.json new file mode 100644 index 0000000..6677dbc --- /dev/null +++ b/data/2025_historical/week_29_2025-11-19_to_2025-11-26.json @@ -0,0 +1,220 @@ +{ + "week_number": 29, + "start_date": "2025-11-19", + "end_date": "2025-11-26", + "pr_count": 21, + "prs": [ + { + "repo": "codattaFrontierWebsite", + "number": 180, + "title": "feat: add social link tasks", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/180", + "merged_at": "2025-11-19T02:50:32+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 181, + "title": "feat: update telegram submit", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/181", + "merged_at": "2025-11-19T03:12:00+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "mintlify-docs", + "number": 7, + "title": "fix docs issues (broken images links etc.)", + "url": "https://github.com/codatta/mintlify-docs/pull/7", + "merged_at": "2025-11-19T03:21:11+00:00", + "author": "beingzy", + "body": "1. fix en/ version's tokenomics images\r\n2. re-sort sub-docs within token section \r\n\r\n\"Screenshot\r\n\r\n![Uploading Screenshot 2025-11-19 at 11.19.47.pngโ€ฆ]()", + "labels": [ + "documentation" + ] + }, + { + "repo": "codattaFrontierWebsite", + "number": 182, + "title": "fix: fix discord link", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/182", + "merged_at": "2025-11-19T03:26:33+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 184, + "title": "feat: social task frontier", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/184", + "merged_at": "2025-11-19T07:43:08+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 185, + "title": "fix: fix build error", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/185", + "merged_at": "2025-11-19T08:09:31+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 186, + "title": "feat: add qualification operatiion in physical questions form page", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/186", + "merged_at": "2025-11-20T05:07:40+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 187, + "title": "Feat/airdrop update", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/187", + "merged_at": "2025-11-20T05:08:28+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 188, + "title": "fix: fix build error", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/188", + "merged_at": "2025-11-20T07:01:20+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 189, + "title": "feat: change verfiy logic", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/189", + "merged_at": "2025-11-20T07:59:10+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 190, + "title": "Feat/airdrop update", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/190", + "merged_at": "2025-11-20T08:24:58+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 191, + "title": "Feat/airdrop update", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/191", + "merged_at": "2025-11-20T13:33:51+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 192, + "title": "Feat/physical", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/192", + "merged_at": "2025-11-21T03:31:15+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 193, + "title": "Feat/physical", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/193", + "merged_at": "2025-11-21T06:34:43+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 194, + "title": "fix: fix build error", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/194", + "merged_at": "2025-11-21T06:43:41+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 195, + "title": "fix: fix api requset to adapt local proxy", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/195", + "merged_at": "2025-11-21T06:53:33+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 196, + "title": "Feat/dev 1112", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/196", + "merged_at": "2025-11-21T07:37:12+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "jekyll_blog", + "number": 2, + "title": "Feat/update style", + "url": "https://github.com/codatta/jekyll_blog/pull/2", + "merged_at": "2025-11-23T04:27:53+00:00", + "author": "CodeYannick", + "body": "\"image\"\r\n\"image\"\r\n\"image\"\r\n\"image\"\r\n\"image\"\r\n", + "labels": [] + }, + { + "repo": "jekyll_blog", + "number": 4, + "title": "Jason in404 patch 1", + "url": "https://github.com/codatta/jekyll_blog/pull/4", + "merged_at": "2025-11-25T07:09:31+00:00", + "author": "JasonIn404", + "body": "New blog", + "labels": [] + }, + { + "repo": "jekyll_blog", + "number": 5, + "title": "Jason in404 patch 1", + "url": "https://github.com/codatta/jekyll_blog/pull/5", + "merged_at": "2025-11-25T08:05:55+00:00", + "author": "JasonIn404", + "body": "Edit blog", + "labels": [] + }, + { + "repo": "jekyll_blog", + "number": 3, + "title": "add experiment blog on why Codatta", + "url": "https://github.com/codatta/jekyll_blog/pull/3", + "merged_at": "2025-11-25T11:48:28+00:00", + "author": "beingzy", + "body": "* add tempate_posts and update readme file accordingly\r\n* write a posts on why Codatta.", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_30_2025-11-26_to_2025-12-03.json b/data/2025_historical/week_30_2025-11-26_to_2025-12-03.json new file mode 100644 index 0000000..95eb896 --- /dev/null +++ b/data/2025_historical/week_30_2025-11-26_to_2025-12-03.json @@ -0,0 +1,160 @@ +{ + "week_number": 30, + "start_date": "2025-11-26", + "end_date": "2025-12-03", + "pr_count": 15, + "prs": [ + { + "repo": "jekyll_blog", + "number": 6, + "title": "refactor Jason's blog (MCP on Ethereum) and clean up the blogging system", + "url": "https://github.com/codatta/jekyll_blog/pull/6", + "merged_at": "2025-11-27T07:55:27+00:00", + "author": "beingzy", + "body": "* clean up blog system by removing dummy posts\r\n* refactor Jason's blog:\r\n 1. remove the cover image (which size does not fit into the general theme) to focus on the content\r\n 2. refactor the markdown syntax, some redundancies (e.g. `## **xyz**` -> `## xyz`, visually they are equal) \r\n 3. minor formatting.\r\n ", + "labels": [ + "enhancement" + ] + }, + { + "repo": "codattaFrontierWebsite", + "number": 197, + "title": "Feat/app", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/197", + "merged_at": "2025-11-27T08:27:47+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 198, + "title": "Feat/lock 3month", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/198", + "merged_at": "2025-11-27T08:28:55+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 199, + "title": "Feat/lock 3month", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/199", + "merged_at": "2025-11-27T08:33:16+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 200, + "title": "fix: fix call loop", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/200", + "merged_at": "2025-11-27T08:39:04+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "jekyll_blog", + "number": 7, + "title": "update README.md with git & github", + "url": "https://github.com/codatta/jekyll_blog/pull/7", + "merged_at": "2025-11-27T10:55:38+00:00", + "author": "beingzy", + "body": "* add git & github tutorial\r\n* add overall contribution workflow \r\n* polish the wording with emoji(s)", + "labels": [] + }, + { + "repo": "mintlify-docs", + "number": 8, + "title": "Add changelog entry for 2025-11-24", + "url": "https://github.com/codatta/mintlify-docs/pull/8", + "merged_at": "2025-11-28T03:14:55+00:00", + "author": "modernchina123", + "body": "## Summary\r\n- add the new โ€œChangelog / ๆ›ดๆ–ฐๆ—ฅๅฟ—โ€ tabs to Mintlify navigation\r\n- create November 24, 2025 changelog entries in both EN and CN locales with release notes\r\n- ensure nav slugs point to the new `.mdx` files under `en/changelog/2025/` and `cn/changelog/2025/`\r\n\r\n## Testing\r\nmint dev", + "labels": [] + }, + { + "repo": "mintlify-docs", + "number": 9, + "title": "docs: add ecosystem integration section and ERC-8004/x402 post", + "url": "https://github.com/codatta/mintlify-docs/pull/9", + "merged_at": "2025-11-28T03:27:09+00:00", + "author": "beingzy", + "body": "* add docs to newly group (which will dedicate discussion on eco integration)\r\n- future plans:\r\n 1) why builting on Base for data assetification\r\n 2) Chainlink CCIP\r\n 3) Embracing Ethereum standards and basic protocol (ERC-8004 and x402)\r\n* update docs.json to display the docs ", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 201, + "title": "feat: update codatta-connect version", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/201", + "merged_at": "2025-11-28T03:57:17+00:00", + "author": "markof", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 202, + "title": "Feat/lock 3month", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/202", + "merged_at": "2025-11-28T05:14:38+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 203, + "title": "feat: update lock select", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/203", + "merged_at": "2025-11-28T06:46:04+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "jekyll_blog", + "number": 8, + "title": "Jason in404 patch 1", + "url": "https://github.com/codatta/jekyll_blog/pull/8", + "merged_at": "2025-12-01T05:59:40+00:00", + "author": "JasonIn404", + "body": "New Blog: ERC-8004 & Codatta: Three Paths Toward the Knowledge Layer", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 204, + "title": "feat: update lockup tip", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/204", + "merged_at": "2025-12-02T05:14:01+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 205, + "title": "feat: lockup assets visbible", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/205", + "merged_at": "2025-12-02T05:28:56+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "codattaFrontierWebsite", + "number": 206, + "title": "feat: update select claim rewards api", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/206", + "merged_at": "2025-12-02T08:33:45+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + } + ] +} \ No newline at end of file diff --git a/data/2025_historical/week_31_2025-12-03_to_2025-12-10.json b/data/2025_historical/week_31_2025-12-03_to_2025-12-10.json new file mode 100644 index 0000000..cc54957 --- /dev/null +++ b/data/2025_historical/week_31_2025-12-03_to_2025-12-10.json @@ -0,0 +1,108 @@ +{ + "week_number": 31, + "start_date": "2025-12-03", + "end_date": "2025-12-10", + "pr_count": 10, + "prs": [ + { + "repo": "codattaFrontierWebsite", + "number": 207, + "title": "feat: fix style", + "url": "https://github.com/codatta/codattaFrontierWebsite/pull/207", + "merged_at": "2025-12-03T08:46:36+00:00", + "author": "CodeYannick", + "body": "", + "labels": [] + }, + { + "repo": "jekyll_blog", + "number": 9, + "title": "Format blog posts: standardize heading levels and remove extra blank lines", + "url": "https://github.com/codatta/jekyll_blog/pull/9", + "merged_at": "2025-12-03T14:55:57+00:00", + "author": "modernchina123", + "body": "## Summary\r\n\r\nThis PR standardizes the formatting of blog posts by unifying heading levels and removing extra blank lines for better consistency across the blog.\r\n\r\n## Changes\r\n\r\n- **Standardized heading levels**: Changed some H1 headings (`#`) to H2 (`##`) in the ERC-8004 article to maintain consistent heading hierarchy\r\n- **Removed extra blank lines**: Cleaned up excessive blank lines in blog posts for cleaner, more readable formatting\r\n\r\n## Files Modified\r\n\r\n- `_posts/2025-06-23-why-codatta.markdown`\r\n- `_posts/2025-11-28-ERC-8004 & Codatta: Three Paths Toward the Knowledge Layer.markdown`\r\n\r\n## Impact\r\n\r\nThis is a formatting-only change that improves readability and consistency. No content changes were made.", + "labels": [] + }, + { + "repo": "jekyll_blog", + "number": 10, + "title": "Refine excerpts for blog posts", + "url": "https://github.com/codatta/jekyll_blog/pull/10", + "merged_at": "2025-12-03T14:57:22+00:00", + "author": "modernchina123", + "body": "## Summary\r\n- Cleaned up `excerpt` fields for the ERC-8004-related posts.\r\n- Removed markdown-style bullets and bold formatting from front matter.\r\n- Rewrote excerpts into concise, single-sentence summaries for better display in listings and SEO.\r\n\r\n## Details\r\n- `2025-11-25-erc-8004-mcp-on-ethereum.markdown`: Simplified the excerpt and removed formatting symbols while preserving the original meaning.\r\n- `2025-11-28-ERC-8004 & Codatta: Three Paths Toward the Knowledge Layer.markdown`: Standardized the excerpt text, removed the leading dash and inline bold, and added a final period for consistency.\r\n\r\n## Checklist\r\n- [x] Excerpts render correctly on the homepage and post list\r\n- [x] No changes to article body content\r\n- [x] Front matter remains valid YAML", + "labels": [] + }, + { + "repo": "jekyll_blog", + "number": 11, + "title": "Fix markdown rendering and improve blog styling", + "url": "https://github.com/codatta/jekyll_blog/pull/11", + "merged_at": "2025-12-03T20:42:26+00:00", + "author": "modernchina123", + "body": "## Overview\r\n\r\nFixed the issue where Markdown syntax inside HTML blocks (like `