Skip to content

feat(tcfeed): stop asking repositories that have already said no to strangers - #140

Merged
ralyodio merged 1 commit into
masterfrom
worktree-tcfeed-interaction-limits
Aug 14, 2026
Merged

feat(tcfeed): stop asking repositories that have already said no to strangers#140
ralyodio merged 1 commit into
masterfrom
worktree-tcfeed-interaction-limits

Conversation

@ralyodio

Copy link
Copy Markdown
Contributor

mempool/mempool restricts interactions to prior contributors. The issue was refused — and the run then forked the repository, cloned it, wrote two files, pushed a branch and asked for a pull request, which was refused on the identical ground:

Interactions on this repository have been restricted to prior contributors only. (createIssue)
Interactions on this repository have been restricted to prior contributors only. (createPullRequest)

A repository with that setting has said no to everybody it hasn't met, in advance and in general. There's nothing to learn from asking twice in two ways, and the second attempt is a fork and a push into somebody's notification feed to reach the same answer.

Why it's detected from the refusal, not asked in advance

Because it can't be asked. GET /repos/{owner}/{repo}/interaction-limits requires admin rights on the repository and answers 403 for restricted and unrestricted repositories alike. Verified against both mempool/mempool and ashinn/chibi-scheme — identical 403 — so the endpoint cannot tell them apart from outside.

Matched on the sentence rather than a status code: the failure arrives as a GraphQL error with no distinguishing code, and both the plural "Interactions … have been" and singular "Interaction … has been" forms exist depending on which restriction is set. Unrelated failures still report as before.

Verification

End to end against the repository that caused it:

· mempool/mempool — skipped: restricted to prior contributors

One line — nothing forked, cloned, pushed or opened. Regex checked against both phrasings plus two unrelated errors to confirm it doesn't over-match.

🤖 Generated with Claude Code

…trangers

mempool/mempool restricts interactions to prior contributors. The issue
was refused, and the run then forked the repository, cloned it, wrote
two files, pushed a branch and asked for a pull request — which was
refused on the identical ground:

  Interactions on this repository have been restricted to prior
  contributors only. (createIssue)
  Interactions on this repository have been restricted to prior
  contributors only. (createPullRequest)

A repository with that setting has said no to everybody it has not met,
in advance and in general. There is nothing to learn from asking twice
in two ways, and the second attempt is a fork and a push into somebody's
notification feed to reach the same answer.

Detected from the refusal rather than asked in advance, because it
cannot be asked: GET /repos/{owner}/{repo}/interaction-limits requires
admin rights on the repository and answers 403 for restricted and
unrestricted repositories alike. Verified against mempool/mempool and
ashinn/chibi-scheme — identical 403 from both, so the endpoint cannot
tell them apart from outside.

Matched on the sentence rather than a status code: the failure arrives
as a GraphQL error with no distinguishing code, and both the plural
"Interactions ... have been" and the singular "Interaction ... has been"
forms exist depending on which restriction is set. Unrelated failures
still report as before.

Verified end to end against the repository that caused it:

  · mempool/mempool — skipped: restricted to prior contributors

one line, and nothing forked, cloned, pushed or opened.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

ThreatCrush Security Scan

69 finding(s)

HIGH/CRITICAL: 12 | MEDIUM: 56 | LOW: 1

Severity Rule Location
HIGH secret-aws-access-key prd/0003-detect-hardcoded-secrets-before-they-are-committed-or-served.md:126
HIGH sh-eval-expansion .githooks/pre-commit:26
HIGH js-electron-node-integration apps/desktop/src/main/index.ts:22
HIGH sh-remote-script-execution apps/web/public/install.sh:272
HIGH sh-remote-script-execution apps/web/public/install.sh:320
HIGH secret-generic-credential modules/spend-guard/config/example.conf.toml:13
HIGH secret-generic-credential modules/spend-guard/README.md:84
HIGH secret-generic-credential PRD.md:268
HIGH tls-verification-disabled prd/0004-find-dangerous-code-patterns-without-pretending-to-be-a-compiler.md:121
HIGH tls-verification-disabled prd/0004-find-dangerous-code-patterns-without-pretending-to-be-a-compiler.md:122
HIGH sh-remote-script-execution scripts/smoke-test.sh:46
HIGH sh-remote-script-execution scripts/smoke-test.sh:47
MEDIUM insecure-temp-file .githooks/commit-msg:16
MEDIUM insecure-temp-file .githooks/post-commit:20
MEDIUM js-shell-exec-interpolation apps/cli/src/commands/init.ts:70
MEDIUM js-shell-exec-interpolation apps/cli/src/commands/init.ts:79
MEDIUM js-shell-exec-interpolation apps/cli/src/commands/service.ts:88
MEDIUM js-shell-exec-interpolation apps/cli/src/commands/service.ts:111
MEDIUM sql-template-interpolation apps/cli/src/core/state.ts:121
MEDIUM sql-template-interpolation apps/cli/src/core/state.ts:125
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:31
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:33
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:34
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:35
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:36
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:43
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:49
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:56
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:63
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:82
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:84
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:85
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:93
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:98
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:105
MEDIUM js-shell-exec-interpolation apps/cli/src/daemon/firewall/adapters.ts:112
MEDIUM js-shell-exec-interpolation apps/cli/src/index.ts:425
MEDIUM js-unescaped-html-sink apps/web/src/app/about/page.tsx:180
MEDIUM js-unescaped-html-sink apps/web/src/app/about/page.tsx:184
MEDIUM js-open-redirect apps/web/src/app/auth/login/page.tsx:50
MEDIUM js-unescaped-html-sink apps/web/src/app/blog/[slug]/page.tsx:125
MEDIUM js-unescaped-html-sink apps/web/src/app/blog/[slug]/page.tsx:153
MEDIUM js-unescaped-html-sink apps/web/src/app/blog/[slug]/page.tsx:157
MEDIUM js-unescaped-html-sink apps/web/src/app/get-whitepaper/page.tsx:346
MEDIUM js-unescaped-html-sink apps/web/src/app/layout.tsx:211
MEDIUM js-unescaped-html-sink apps/web/src/app/layout.tsx:215
MEDIUM js-unescaped-html-sink apps/web/src/app/layout.tsx:219
MEDIUM js-unescaped-html-sink apps/web/src/app/page.tsx:120
MEDIUM js-unescaped-html-sink apps/web/src/app/store/[slug]/page.tsx:107
MEDIUM js-open-redirect apps/web/src/components/funding/FundingClient.tsx:97

…and 19 more. Full results in the Security tab.

Snippets are redacted; ThreatCrush never prints matched credential material.

@ralyodio
ralyodio merged commit c42a535 into master Aug 14, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant