fix(prd-7): M3 security review — self-trigger guard, actor permissions, trigger bypass, platform validation
- Add self-mention/bot loop prevention in actor.ts (blocks actor matching bot_name) - Switch Forgejo permission check to actor-level via getCollaboratorPermissionLevel with fallback to token-level repos.get() when collaborator API returns 403 - Close empty-body PR review comment trigger bypass (now returns false instead of true) - Add platform detection cross-validation (reject PLATFORM=forgejo on github.com) - Document URL builder defense-in-depth rationale in comment-logic.ts - Update/add tests across 6 test files (actor, permissions, trigger, platform, mcp, m7) Progress: 50% complete (3/6 milestones) — next: M4 test coverage review Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
cefc229199
commit
6b0302d226
12 files changed
+270
-68
No files matched your search
@@ -51,6 +51,12 @@ export const FORGEJO_SPINNER_HTML = "⏳";
|
||||
// URL Builders
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// Note: owner, repo, runId, and branchName are NOT URI-encoded in path
|
||||
// segments because: (1) owner/repo are validated by Forgejo (alphanumeric +
|
||||
// .-_), (2) branchName is validated by validateBranchName() which restricts
|
||||
// to [a-zA-Z0-9._/-], and (3) encoding "/" in branch names breaks Forgejo
|
||||
// URLs (e.g., "claude/fix-bug" → "claude%2Ffix-bug" is invalid).
|
||||
|
||||
export function createForgejoJobRunLink(
|
||||
owner: string,
|
||||
repo: string,
|
||||
|
||||
Reference in new issue
Block a user