Commit Graph
24 Commits
Author SHA1 Message Date
Vlad MocanuandClaude Opus 4.6 8754cc0181 docs(prd-6): mark M5 complete — assignee trigger validated
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 10:49:39 +02:00
Vlad MocanuandClaude Opus 4.6 efddd08f5c docs(prd-6): mark M4 complete — label trigger validated
3 bugs found and fixed:
- Workflow if: expression parser rejects # comments
- Forgejo doesn't populate github.event.action in if: context
- Forgejo sends 'label_updated' instead of 'labeled'

Key learning: normalize Forgejo event action names in context.ts.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 10:45:15 +02:00
Vlad MocanuandClaude Opus 4.6 1748a2c3df docs(prd-6): mark M3 complete — PR review trigger validated
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 10:45:09 +02:00
Vlad MocanuandClaude Opus 4.6 d9c22ffe50 docs(prd-6): mark M2 complete — PR review comment trigger validated
E2E test confirmed: Claude correctly responds to @claude mentions in
PR review comments on Forgejo (run #12075, PR #15). Three bugs were
found and fixed during validation:
1. Missing comment object in Forgejo webhook payload
2. Event name mismatch (pull_request_comment vs pull_request_review_comment)
3. MCP server routing updates to wrong API (critical — silently dropped responses)

Progress: 3/8 milestones complete (37.5%)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 10:45:09 +02:00
Vlad MocanuandClaude Opus 4.6 821cc86c6e docs(prd-6): mark M1.5 resolved — CI confirmed green
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 10:45:09 +02:00
Vlad MocanuandClaude Opus 4.6 ede18897b0 docs(prd-6): mark M1.5 resolved, document root cause and fix
Root cause was mock.module cross-file pollution in Bun's test runner,
not Linux-specific mock tracking bugs as previously theorized.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 10:45:09 +02:00
Vlad MocanuandClaude Opus 4.6 7011b0f71a test: add mock tracking diagnostics for Forgejo CI debugging
DI fix passes locally in grunt-runner Docker but still fails on
actual Forgejo runner. Adding diagnostic tests to isolate whether
mock() tracking itself is broken, or something else in the runner
environment causes it.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 10:45:09 +02:00
Vlad MocanuandClaude Opus 4.6 a6b3c94004 fix: use dependency injection for image-downloader fs mocks
mock.module("fs/promises") on Linux Bun poisons the entire mock
tracking system — not just fs mocks, but ALL mock/spy assertions
(octokit mocks, spyOn(global, "fetch"), etc.) stop recording calls.

Replace with dependency injection: downloadCommentImages() now accepts
an optional fsDeps parameter. Tests pass mock mkdir/writeFile directly.
Production callers omit it and get real fs. No mock.module anywhere.

Fixes 18 test failures blocking CI on Forgejo Linux runners.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 10:45:08 +02:00
Vlad Mocanu a129a15f61 feat(prd-6): verify workflow triggers and add assignee_trigger (#13) 2026-02-25 21:43:37 +00:00
Vlad MocanuandClaude Opus 4.6 2f7d0a7fb2 docs(prd-5): mark complete and archive to prds/done/ [skip ci]
- All milestones delivered, E2E validated on PR #8
- Deferred: commit authorship E2E, cross-repo test

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 21:11:20 +02:00
Vlad MocanuandClaude Opus 4.6 b03ccb518c feat(prd-5): add dedicated claude-bot user for Forgejo
- Add bot_email action input for custom git commit email on Forgejo
- Update claude.yml to use CLAUDE_BOT_TOKEN with bot_id/bot_name/bot_email
- Update git-config.ts to use provided email over noreply format
- Add "Dedicated Bot User" setup guide to docs/forgejo.md
- Update CLAUDE.md with bot identity documentation

Infrastructure (done outside code):
- claude-bot user created (ID 48, non-admin, with avatar)
- Claude team with write access in all 12 orgs
- CLAUDE_BOT_TOKEN org-level secret in all 12 orgs

Progress: ~85% complete - pending E2E validation after merge

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 20:56:55 +02:00
Vlad MocanuandClaude Opus 4.6 34c259f189 docs(prd): create PRDs #5, #6, #7 for Forgejo hardening [skip ci]
- PRD #5: Dedicated Forgejo user for Claude bot (dedicated identity, scoped token)
- PRD #6: E2E test all 5 untested Forgejo trigger scenarios
- PRD #7: Senior developer review of all Forgejo platform support code
- Defined 5, 7, and 6 milestones respectively
- All three can be parallelized (#7 is read-only, runs alongside #5)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 20:13:57 +02:00
Vlad MocanuandClaude Opus 4.6 bed5cd03c2 docs(prd-1): move completed PRD to prds/done/
PRD #1 (Forgejo Platform Support) is 100% complete.
All milestones M1-M9 implemented and validated.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 19:56:02 +02:00
Vlad MocanuandClaude Opus 4.6 44f598ff11 feat(prd-1): complete M9 - documentation & upstream merge validation
- Created docs/forgejo.md: comprehensive setup guide (prerequisites,
  quick start, platform detection, GitHub differences, CI workflows,
  upstream merge process, known limitations, troubleshooting)
- Updated README.md with Forgejo support mention and docs link
- Updated CLAUDE.md with Forgejo architecture section
- Added platform input to docs/usage.md inputs table
- Added 5 Forgejo FAQ entries to docs/faq.md
- Upstream merge validated: zero conflicts (based on latest upstream)
- PRD #1 100% complete: all milestones M1-M9 done, 794 tests passing

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 19:55:25 +02:00
Vlad Mocanu 5daed4f9bf feat(prd-1): complete M8 - E2E testing on Forgejo
- Mark M8 as complete: agent mode E2E passes on Forgejo runner
- Update actor.ts table entry: skipped on Forgejo (read:user scope)
- Mark setup-bun risk as RESOLVED (replaced with curl install)
- Document M8 fixes: permission check, actor skip, curl bun, CI env

Progress: 89% complete - M9 (docs + upstream merge validation) remaining
2026-02-25 19:49:46 +02:00
Vlad MocanuandClaude Opus 4.6 c61073da42 feat(prd-1): implement M3 - Forgejo CI workflows
- ci.yml: 3-job CI (test, prettier, typecheck) on grunt runner
- test-action.yml: agent-mode self-test (weekly + PR path triggers)
- upstream-sync.yml: weekly upstream check with labeled issue dedup
- Updated PRD checkboxes for M3 completion

Progress: 78% complete (7/9 milestones) - M8 (e2e testing) next

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 18:29:47 +02:00
Vlad MocanuandClaude Opus 4.6 88401255be feat(prd-1): implement M7 - entry point + mode handler integration
- Tag mode routes to fetchForgejoData vs fetchGitHubData based on platform
- createInitialComment auto-detects platform for Forgejo spinner/URL format
- update-comment-link uses updateForgejoCommentBody + Forgejo PR compare URL
- update-with-branch uses platform-aware branch/job-run link formatting
- Agent mode needed NO changes (token in run.ts, rest uses Octokit REST)
- 11 new integration tests in test/m7-integration.test.ts
- 785 tests pass, typecheck clean, format clean

Progress: 78% complete (7/9 milestones) - M3, M8, M9 remaining

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 18:22:27 +02:00
Vlad MocanuandClaude Opus 4.6 ce1459fe7f feat(prd-1): implement M6 - MCP server platform routing
- Add platform detection to prepareMcpConfig() via detectPlatform()
- Skip GitHub public MCP server (ghcr.io/github/github-mcp-server) on Forgejo
- Skip checkActionsReadPermission on Forgejo (workflow token has full access)
- Reuse existing github-actions-server.ts for both platforms (no duplication)
- Add 6 Forgejo-specific tests to install-mcp-server.test.ts
- Updated PRD checkboxes for M6

Progress: 67% complete (6/9 milestones) - M7 now unblocked

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 17:57:35 +02:00
Vlad MocanuandClaude Opus 4.6 0802ac18eb feat(prd-1): implement M5 - Forgejo comment URL formatting
- Create src/forgejo/comment-logic.ts with Forgejo-specific URL builders:
  - Unicode spinner (replaces GitHub CDN image)
  - PR compare URL with expand=1 (no quick_pull=1)
  - Dynamic extractOwnerRepoFromUrl() fixing hardcoded github.com regex
  - updateForgejoCommentBody() with cross-platform URL extraction
- 41 tests covering all URL patterns, spinner, and the critical regex fix
- No upstream files modified (lean adapter approach)

Progress: 56% complete (5/9) - next: M6 (MCP server platform routing)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 17:48:16 +02:00
Vlad MocanuandClaude Opus 4.6 4b0737c54c feat(prd-1): implement M4b - Forgejo REST comment/review fetching
- Add 3 REST calls to Promise.all for PRs (listComments, listReviews,
  listReviewComments) and 1 for issues (listComments)
- Add mapping helpers: mapRestComments, mapRestReviewComments,
  mapRestReviews (groups inline comments by pull_request_review_id)
- Import and apply TOCTOU filtering (filterCommentsToTriggerTime,
  filterReviewsToTriggerTime) and actor filtering from GitHub fetcher
- Add image processing pipeline via downloadCommentImages (no-op on
  Forgejo due to URL pattern mismatch, architecturally correct)
- Deep-clone reviews before filtering to preserve contextData immutability
- Update test suite: 51 tests covering mapping helpers, full fetch
  flow, TOCTOU filtering, actor filtering, and contextData immutability
- Updated PRD checkboxes for M4b completion

Progress: 44% complete (4/9 milestones) - next: M5 or M3

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 17:00:13 +02:00
Vlad MocanuandClaude Opus 4.6 6e104a33dc feat(prd-1): implement M4a - Forgejo REST data fetching (PR/issue basics)
- Add src/forgejo/data/fetcher.ts: REST-based data fetcher replacing
  GraphQL queries with parallel Octokit REST calls (PR details + files
  + commits via Promise.all, issue details, file status mapping, SHA
  computation, TOCTOU title/body protection, user display name)
- Add test/forgejo-data-fetcher.test.ts with 31 test cases covering
  field mapping, parallel fetch, null handling, and edge cases
- Output matches FetchDataResult type for downstream compatibility
- Comments/reviews left empty (M4b scope)

Progress: 33% complete (M1, M2, M4a done) - next: M4b or M5

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 16:19:09 +02:00
Vlad MocanuandClaude Opus 4.6 385acacc32 feat(prd-1): implement M2 - Forgejo token handling
- Add src/forgejo/token.ts: synchronous token handler that returns
  OVERRIDE_GITHUB_TOKEN or DEFAULT_WORKFLOW_TOKEN directly (no OIDC)
- Wire platform-aware token setup into run.ts with early branch
  before existing setupGitHubToken() call
- Add test/forgejo-token.test.ts with 8 test cases covering
  override precedence, default fallback, and error handling
- GitHub token path remains completely unchanged

Progress: 22% complete (M1, M2 done) - next: M3 (CI workflows) or M5 (comment URLs)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 16:10:00 +02:00
Vlad MocanuandClaude Opus 4.6 72f11f320c feat(prd-1): implement M1 - platform detection and action.yml modifications
- Add src/platform/detector.ts with 3-tier detection (explicit input,
  FORGEJO env var, GITHUB_SERVER_URL heuristic)
- Add 'platform' input to action.yml (auto/github/forgejo)
- Add 'Detect Platform' shell step as first composite action step
- Split bun installation: oven-sh/setup-bun for GitHub, curl fallback
  for Forgejo runners
- Condition 'Revoke app token' step to skip on Forgejo
- Pass resolved PLATFORM env var to run step
- Add 14 unit tests covering all detection paths

Progress: M1 complete (1/9 milestones) - M2 and M5 now unblocked

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 16:03:51 +02:00
Vlad MocanuandClaude Opus 4.6 411eb3d69d docs(prd-1): create PRD #1 - Forgejo platform support [skip ci]
- Lean adapter architecture: ~8 new files, reuse existing Octokit REST code
- REST-based data fetching to replace GitHub GraphQL queries
- Platform detection via explicit input + env-var auto-detection
- Custom Forgejo CI workflows with action self-test
- 10 milestones across 4 phases

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 15:54:10 +02:00