Skip to content

Actually make it open source: AGPL-3.0 - #218

Merged
ralyodio merged 1 commit into
masterfrom
worktree-agpl-license
Aug 28, 2026
Merged

Actually make it open source: AGPL-3.0#218
ralyodio merged 1 commit into
masterfrom
worktree-agpl-license

Conversation

@ralyodio

Copy link
Copy Markdown
Contributor

The repository was already public, and the README said "Proprietary. © CrawlProof."

Public source with no licence is not open source — it is all rights reserved with the code visible, so nobody could legally use, copy or modify any of it. The gap was the licence file, not the visibility setting.

Why AGPL-3.0

CrawlProof is a hosted service, so §13 is the clause that matters:

If you run a modified version as a network service, you must offer its source to that service's users.

Self-host it, fork it, change it, run it inside your own company — none of that obliges anything. Offer it to other people over a network and your changes come back. A permissive licence would let a competitor host a closed fork; that is a decision to make deliberately rather than by leaving the field blank.

What's here

  • LICENSE — canonical AGPL-3.0 text
  • package.json"license": "AGPL-3.0-only" (SPDX), so GitHub and tooling detect it
  • TRADEMARK.md — the line the licence does not draw: AGPL covers the code, not the name or logo. Written as what you may and may not do, with the practical list of what to rebrand in a fork
  • README — licence + contributing sections replacing the "Proprietary" line

Secret check

The repo is public and its gitleaks workflow cannot run while Actions is billing-blocked, so I checked by hand: no .env has ever been committed (only .env.example), and nothing tracked matches a live key pattern.

1940 tests pass, typecheck clean.

🤖 Generated with Claude Code

https://claude.ai/code/session_013cbcXdpLFUgJZuVfCB4Gzv

The repository was already public, and the README said "Proprietary. ©
CrawlProof." Public source with no licence is not open source — it is all
rights reserved with the code visible, so nobody could legally use, copy or
modify any of it. The gap was the licence file, not the visibility setting.

AGPL-3.0-only, because CrawlProof is a hosted service and section 13 is the
clause that matters: running a modified version as a network service obliges
you to offer its source to that service's users. Self-host it, fork it, change
it, run it inside your own company — none of that obliges anything. Offer it to
other people over a network and your changes come back. A permissive licence
would have let a competitor host a closed fork, which is a decision to make
deliberately rather than by leaving the field blank.

TRADEMARK.md draws the line the licence does not: the AGPL covers the code, not
the name or the logo. Stated as what you may and may not do, with the practical
list of what to rebrand in a fork, because "all rights reserved" on a brand
reads as hostile when it is actually about not leaving users unable to tell a
fork from the original.

Also checked, since the repo is public and its gitleaks workflow cannot run
while Actions is billing-blocked: no .env has ever been committed (only
.env.example), and nothing tracked matches a live key pattern.

1940 tests pass, typecheck clean. The lockfile change is the one line npm adds
for the new licence field.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013cbcXdpLFUgJZuVfCB4Gzv
@ralyodio
ralyodio merged commit 6b7e075 into master Aug 28, 2026
6 checks passed
@github-actions

Copy link
Copy Markdown

ThreatCrush Security Scan

40 finding(s)

HIGH/CRITICAL: 3 | MEDIUM: 28 | LOW: 9

Severity Rule Location
HIGH tls-verification-disabled lib/onion.ts:47
HIGH secret-generic-credential lib/sp/platforms/facebook.ts:32
HIGH sh-remote-script-execution prober/deploy/provision.sh:30
MEDIUM js-unescaped-html-sink app/(app)/dashboard/admin/email-broadcast/EmailBroadcastForm.tsx:125
MEDIUM js-unescaped-html-sink app/(app)/dashboard/projects/[id]/autoblog/articles/[articleId]/page.tsx:214
MEDIUM js-unescaped-html-sink app/(marketing)/blog/[slug]/page.tsx:67
MEDIUM js-unescaped-html-sink app/(marketing)/blog/[slug]/page.tsx:97
MEDIUM js-unescaped-html-sink app/(marketing)/blog/[slug]/page.tsx:104
MEDIUM js-unescaped-html-sink app/(marketing)/blog/[slug]/page.tsx:110
MEDIUM js-unescaped-html-sink app/(marketing)/recent/page.tsx:186
MEDIUM js-unescaped-html-sink app/(marketing)/recent/page.tsx:190
MEDIUM js-unescaped-html-sink app/c/[project]/[slug]/page.tsx:77
MEDIUM js-unescaped-html-sink app/c/[project]/page.tsx:57
MEDIUM js-unescaped-html-sink app/careers.js/route.ts:228
MEDIUM js-unescaped-html-sink app/careers.js/route.ts:285
MEDIUM js-unescaped-html-sink app/layout.tsx:129
MEDIUM js-open-redirect app/login/form.tsx:39
MEDIUM js-unescaped-html-sink app/r/[token]/page.tsx:176
MEDIUM js-open-redirect app/signup/form.tsx:43
MEDIUM js-open-redirect components/billing/buy-credits-modal.tsx:98
MEDIUM js-unescaped-html-sink components/json-ld.tsx:8
MEDIUM js-unescaped-html-sink components/report/markdown-view.tsx:15
MEDIUM redos-nested-quantifier lib/careers/jobs.ts:139
MEDIUM js-unescaped-html-sink lib/careers/page-templates.ts:198
MEDIUM redos-nested-quantifier lib/emailMarkdown.ts:130
MEDIUM redos-nested-quantifier lib/lx/articleGen.ts:98
MEDIUM redos-nested-quantifier lib/sp/parseHandle.ts:92
MEDIUM redos-nested-quantifier lib/tracker/agent-gate.ts:61
MEDIUM sql-template-interpolation scripts/detect-slot-themes.ts:31
MEDIUM sql-template-interpolation scripts/purge-constructed-keywords.ts:163
MEDIUM sql-template-interpolation scripts/purge-offniche-keywords.ts:124
LOW secret-generic-credential app/(marketing)/docs/autoblog-webhook/page.tsx:145
LOW secret-generic-credential lib/sp/platforms/linkedin.ts:25
LOW js-dynamic-code-execution tests/careers-page-templates.test.ts:21
LOW js-dynamic-code-execution tests/careers-widget-script.test.ts:19
LOW js-dynamic-code-execution tests/careers-widget-script.test.ts:69
LOW js-dynamic-code-execution tests/contract/ad-visitor-id.test.ts:51
LOW js-dynamic-code-execution tests/contract/ad-visitor-id.test.ts:52
LOW secret-generic-credential tests/contract/posthog-integration.test.ts:13
LOW secret-generic-credential tests/lead-campaign.test.ts:16

Snippets are redacted; ThreatCrush never prints matched credential material.

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