|
8 | 8 | {"id":"META-16n.5","title":"Archive old Netlify site","description":"","design":"In Netlify Dashboard:\n1. Find the michaeluloth.com site\n2. Go to Site settings → General → Danger zone\n3. Click 'Archive site'\n4. Confirm archival\n\nThis prevents:\n- Accidental deployments\n- Build minute consumption\n- Configuration drift\n\nNote: Can unarchive later if needed","notes":"Netlify site: michaeluloth.com (exact name unknown - search in Netlify dashboard)\n\nSteps:\n1. Go to Netlify dashboard\n2. Find michaeluloth.com site\n3. Site settings → Build \u0026 deploy → Stop auto publishing\n OR\n4. Site settings → General → Danger zone → Archive site\n\nArchiving is preferred:\n- Prevents accidental deployments\n- Saves build minutes\n- Site can be unarchived later if needed\n\nSite was previously deployed via GitHub Actions from ooloth/michaeluloth.com repo\n- Used Netlify CLI for deployment\n- Triggered on every push to main","status":"open","priority":0,"issue_type":"task","created_at":"2025-12-24T09:30:06.534124-05:00","updated_at":"2025-12-24T10:32:10.572112-05:00","dependencies":[{"issue_id":"META-16n.5","depends_on_id":"META-16n","type":"parent-child","created_at":"2025-12-24T09:30:06.536571-05:00","created_by":"daemon"}]} |
9 | 9 | {"id":"META-16n.6","title":"Validate all critical pages work","description":"","design":"Test the following URLs on live site:\n\nCore pages:\n- [ ] https://michaeluloth.com/ (home)\n- [ ] https://michaeluloth.com/blog/ (blog index)\n- [ ] https://michaeluloth.com/likes/ (likes page)\n\nInfrastructure:\n- [ ] https://michaeluloth.com/rss.xml (RSS feed)\n- [ ] https://michaeluloth.com/sitemap.xml (sitemap)\n- [ ] https://michaeluloth.com/robots.txt (robots)\n\nSample blog posts (test 2-3):\n- [ ] Recent post works\n- [ ] Old post works\n- [ ] Post with images works\n\nFavicon:\n- [ ] Favicon shows in browser tab\n\nAll should load with no errors and display correctly","status":"closed","priority":0,"issue_type":"task","created_at":"2025-12-24T09:30:07.755707-05:00","updated_at":"2025-12-24T18:36:59.046892-05:00","closed_at":"2025-12-24T18:36:59.046892-05:00","close_reason":"Validated all critical pages: homepage, /blog/, sample posts, /likes/, RSS feed (37 posts with full content), sitemap (40 URLs with correct structure)","dependencies":[{"issue_id":"META-16n.6","depends_on_id":"META-16n","type":"parent-child","created_at":"2025-12-24T09:30:07.757771-05:00","created_by":"daemon"}]} |
10 | 10 | {"id":"META-16n.7","title":"Add custom domain to Cloudflare Pages project","description":"","design":"After nameservers have propagated (task META-16n.2):\n\n1. Go to Cloudflare Dashboard → Pages → michaeluloth project\n2. Click 'Custom domains' tab\n3. Click 'Set up a custom domain'\n4. Add: michaeluloth.com\n - Cloudflare will automatically create DNS records\n5. Add: www.michaeluloth.com\n - Cloudflare will automatically create DNS records\n6. Wait for SSL certificate provisioning (~15 minutes)\n\nNote: This step only works after nameservers are updated","status":"closed","priority":0,"issue_type":"task","created_at":"2025-12-24T09:34:39.228558-05:00","updated_at":"2025-12-24T10:15:59.533075-05:00","closed_at":"2025-12-24T10:15:59.533075-05:00","close_reason":"Added michaeluloth.com and www.michaeluloth.com as custom domains to Cloudflare Pages. DNS records updated, SSL provisioned. Site is live!","dependencies":[{"issue_id":"META-16n.7","depends_on_id":"META-16n","type":"parent-child","created_at":"2025-12-24T09:34:39.236471-05:00","created_by":"daemon"}]} |
| 11 | +{"id":"META-16n.8","title":"Disable GitHub Actions in ooloth/content repo","description":"","design":"The old content repo (https://github.com/ooloth/content) has workflows that redeploy the old Netlify site when content changes.\n\nNeed to disable these workflows to prevent unnecessary deployments to the old site.\n\nSteps:\n1. Go to https://github.com/ooloth/content\n2. Move .github/workflows/ to .github/workflows-disabled/ \n3. Commit and push the change\n\nThis is separate from META-16n.4 which handles the old michaeluloth.com repo.","status":"open","priority":0,"issue_type":"task","created_at":"2025-12-24T18:45:33.649924-05:00","updated_at":"2025-12-24T18:45:33.649924-05:00","dependencies":[{"issue_id":"META-16n.8","depends_on_id":"META-16n","type":"parent-child","created_at":"2025-12-24T18:45:33.650523-05:00","created_by":"daemon"}]} |
11 | 12 | {"id":"META-1xk","title":"Enhance validate-metadata.ts error output with fix suggestions","description":"Add to error messages: (1) file path being validated, (2) exact fix with code example, (3) Next.js docs link, (4) grep hint for source code. Example: show which component file to edit and what metadata to add.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-22T10:36:31.57206-05:00","updated_at":"2025-12-22T10:36:31.57206-05:00","labels":["dx","validation"]} |
12 | 13 | {"id":"META-2iy","title":"Fix Pushover notifications to report actual build status","description":"","design":"**Bug**: Pushover always sends 'Job status: success' even when builds fail\n\n**Root cause**: \n- Line 196 uses `job.status` which reports notify job's status (always success with `if: always()`)\n- GitHub action doesn't support custom messages (pushover-message/pushover-url params are invalid)\n- Detailed failure messages (lines 169-192) are ignored\n\n**Approved approach**:\n- Replace GitHub action with direct curl to Pushover API\n- Use existing message logic (lines 169-192)\n- Add validation to ensure message is set correctly\n\n**Success criteria**:\n- Failures send specific error messages (e.g., '❌ Formatting check failed')\n- Success sends '✅ michaeluloth.com deployed successfully'\n- URL included for failures, pointing to failed workflow run\n- Validation ensures message is never empty","notes":"Implemented complete TypeScript solution with proper architecture, then reorganized all CI scripts.\n\n**Final Structure:**\n```\nci/\n config.ts - Shared CI constants\n lighthouse/\n generate-urls.ts + test - Dynamic URL generation\n parse-errors.ts + test - Detailed error reporting\n urls.json - Generated URLs (runtime data)\n metadata/\n validate.ts + test - OG/Twitter card validation\n notifications/\n determine-build-notification.ts + test - GitHub Actions logic\n notify-build-status.ts + test - CLI notification script\n```\n\n**Created:**\n- io/pushover/types.ts - TypeScript interfaces\n- io/pushover/client.ts - Pushover API client\n- io/pushover/send-notification.ts + test - API implementation (8 tests)\n- io/cloudflare/deploy-production-check.sh - Cloudflare deployment safety\n- ci/config.ts - Shared CI validation constants\n\n**Reorganized:**\n- validation/ → ci/lighthouse/ + ci/metadata/\n- io/github/ → ci/notifications/\n- Removed generic validation/ and scripts/ directories\n- All CI scripts now in domain-specific ci/ subdirectories\n\n**Updated:**\n- .github/workflows/ci.yml - Updated all script paths\n- io/env/env.ts - Added PUSHOVER_API_TOKEN + PUSHOVER_USER_KEY\n- io/env/env.test.ts - Added Pushover env vars (31 test cases)\n- .env.example - Added Pushover vars\n- package.json - Updated script paths\n- lighthouserc.cjs - Updated URL path\n\n**Test Results:**\n- All 632 tests pass ✅ (42 new notification tests)\n- Workflow YAML syntax validated ✅\n- Prettier formatting passed ✅\n- 100% test coverage of exported functions\n\n**Architecture improvements:**\n- Domain-driven organization (lighthouse, metadata, notifications)\n- CI-specific code separated from runtime code (io/, app/, ui/)\n- Clear ownership by domain\n- Type-safe TypeScript throughout\n- Pure functions with comprehensive tests\n- Reusable Pushover client for future use","status":"in_progress","priority":1,"issue_type":"task","created_at":"2025-12-24T11:18:57.953179-05:00","updated_at":"2025-12-24T14:44:49.157947-05:00"} |
13 | 14 | {"id":"META-3w0","title":"Polish Cloudflare deployment branch before merge","description":"","design":"Five improvements from optimization review:\n\n1. Remove commented dynamicParams code in app/(prose)/[slug]/page.tsx:132-133\n - Either delete or add explanatory comment\n\n2. Simplify CI notification logic in .github/workflows/ci.yml:180-191\n - Extract to separate step or use if/elif pattern\n - Current nested ternaries hard to verify\n\n3. Document retry behavior in README.md\n - Add details: 3 retries, 2s initial delay, exponential backoff, network/timeout errors only\n\n4. Improve error detection in utils/retry.ts:44-62\n - Consider checking error types/codes instead of string matching where possible\n\n5. Complete env documentation in README.md\n - Add missing CLOUDINARY_* and PUSHOVER_* vars to match .env.example","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T14:27:28.076504-05:00","updated_at":"2025-12-23T14:35:31.494908-05:00","closed_at":"2025-12-23T14:35:31.494908-05:00","close_reason":"Completed all polish improvements:\n1. ✅ Removed commented dynamicParams code (app/(prose)/[slug]/page.tsx)\n2. ⏭️ Skipped CI notification simplification (original was clearer)\n3. ✅ Enhanced README retry documentation with full config details\n4. ✅ Added explanatory comments to retry error detection logic\n5. ✅ Completed env var documentation in README (Cloudinary + Pushover)\n\nAll changes tested and committed."} |
|
0 commit comments