Skip to content

License split: Apache-2.0 for contract/ and ts/workflow-core/#6

Merged
konegen merged 13 commits into
mainfrom
chore/license-split-only
Jun 1, 2026
Merged

License split: Apache-2.0 for contract/ and ts/workflow-core/#6
konegen merged 13 commits into
mainfrom
chore/license-split-only

Conversation

@r1marcus

@r1marcus r1marcus commented Jun 1, 2026

Copy link
Copy Markdown
Collaborator

Summary

Two-tier license model for edge-agents. Standalone PR against main — supersedes #4, which was stacked on #3 and conflated license work with the fh-agent CLI.

Tier Components License
Wire format / headless model contract/, ts/workflow-core/ Apache-2.0
Engine + visual builder go/, ts/workflow-builder/, ts/app/ AGPL-3.0-only + commercial

Why split: Make wire format and headless workflow model maximally reusable (third-party Python/Rust/Java clients become possible) while keeping the engine and visual builder protected under copyleft.

What's in this PR (12 commits, license-only)

Apache-2.0 additions

  • contract/LICENSE + contract/NOTICE
  • ts/workflow-core/LICENSE + NOTICE + README.md (new package README)
  • ts/workflow-core/package.json"license": "Apache-2.0"

AGPL preservation (workflow-builder hygiene)

  • ts/workflow-builder/LICENSE (full AGPL text — was missing!)
  • ts/workflow-builder/NOTICE (explains dependency on Apache workflow-core)
  • ts/workflow-builder/package.json"license": "AGPL-3.0-only" + NOTICE in files

Documentation

  • README.md License section → 5-row component-by-license table
  • Top-level NOTICE → documents two-tier model + references subdir LICENSEs
  • THIRD_PARTY_NOTICES intro → updated for two-tier
  • .github/CONTRIBUTING.md → new "Which license your contribution falls under" section
  • .github/PULL_REQUEST_TEMPLATE.md CLA checkbox → mentions both tiers

Legal model

  • contract/ Apache LICENSE = verbatim apache.org SHA256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30
  • ts/workflow-core/ Apache LICENSE = same verbatim hash
  • ts/workflow-builder/ AGPL = exact copy of top-level LICENSE
  • CLA in CONTRIBUTING.md (untouched) covers both tiers — relicense rights extend to either path
  • Contributors checked via git log: only Daniel Maier and Daniel Konegen on contract/ + ts/workflow-core/ — CLA-coverage trivial

What's NOT in this PR (was incorrectly bundled in #4)

Test plan

  • Diff vs main shows only license-related files (14 files, all in LICENSE/NOTICE/README/package.json/.github/CONTRIBUTING.md/.github/PULL_REQUEST_TEMPLATE.md)
  • cd ts/workflow-core && npm pack --dry-run shows LICENSE + NOTICE + README in tarball
  • cd ts/workflow-builder && npm pack --dry-run shows LICENSE + NOTICE in tarball
  • License hash verification: sha256sum contract/LICENSE ts/workflow-core/LICENSE matches apache.org verbatim
  • Final dev/legal sign-off on Apache split for wire format

Closes #4 once merged.

🤖 Generated with Claude Code

MarcusBot and others added 13 commits June 1, 2026 10:01
The contract/ directory defines the language-neutral wire format
(OpenAPI 3.0.3 schemas) for the edge-agents platform. Splitting its
license to Apache-2.0 allows third-party clients, SDKs, and tooling to
implement the wire format without inheriting the AGPL terms that apply
to the engine and builder.

Verbatim text from https://www.apache.org/licenses/LICENSE-2.0.txt
(sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Clarifies that contract/ is licensed under Apache-2.0 while the
surrounding repository (engine, llmproxy, ts/workflow-builder, app)
remains AGPL-3.0 / commercial. The NOTICE matches the wording style
of the top-level NOTICE for consistency.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…kage

The workflow-core package is the headless wire-format binding consumers
embed in their own tooling, so it carries Apache-2.0 separately from the
repository-level AGPL-3.0 license that covers the engine and the React
workflow builder. LICENSE is the verbatim Apache-2.0 text; NOTICE points
readers back to the repository LICENSE for the AGPL terms covering the
rest of the tree.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sets the npm "license" field to Apache-2.0 and adds NOTICE to the
publishable "files" allowlist so the Apache-2.0 NOTICE ships in the
tarball alongside LICENSE. The package itself stays self-describing
on the npm registry without the repository-level AGPL terms leaking
into downstream consumers' license scans.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds a short README so the package has a landing page on npm covering
what it is (headless workflow model + validator, no React, no DOM),
how to install and validate a workflow, the three-layer architecture,
and the Apache-2.0 / repo AGPL-3.0 license split. Linked from the
"files" allowlist already shipping in the tarball.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replaces the AGPL-only dual-license paragraph with a component-by-
component table that maps contract/ and ts/workflow-core to Apache-2.0
and keeps engine, workflow-builder, and app under AGPL-3.0/commercial.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Top-level NOTICE now explicitly states the two-tier license split and
points to contract/LICENSE/NOTICE and ts/workflow-core/LICENSE/NOTICE
for the Apache-licensed parts, while keeping the AGPL/commercial wording
scoped to the remaining components.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Updates the License and Contributor Agreement intro to name the two
tiers explicitly, and adds a closing "Which license your contribution
falls under" subsection so contributors know whether a PR ships under
Apache-2.0 or AGPL-3.0-only based on the path it touches.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ckage

The workflow-builder package.json files-whitelist already references LICENSE
but the file was missing, which would publish the package to npm with no
license file in the tarball. Add the full AGPL-3.0 text (copied verbatim from
the top-level LICENSE) and a workflow-builder-specific NOTICE that mirrors
the wording used by workflow-core/NOTICE and clarifies that this package is
AGPL while its workflow-core dependency is Apache-2.0.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…e.json

Without an explicit license field, npmjs.com displays "no license" on the
package page even though LICENSE ships in the tarball. Set the SPDX
identifier explicitly and add NOTICE to the files whitelist so attribution
ships alongside the license text (matching workflow-core's pattern).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The intro claimed edge-agents was AGPL-only, which is stale after the
license split. Restate the model (Apache-2.0 for contract/ and
workflow-core/, AGPL-3.0-only or commercial for the rest) and clarify
that the listed third-party licenses are compatible with both tiers.
The component list itself is untouched.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The CLA checkbox only mentioned AGPL-3.0 relicensing, which made the
template misleading for PRs that touch only contract/ or workflow-core/
(both Apache-2.0). Restate both tiers so contributors agree to the
license applicable to the paths they actually touched.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…fig)

contract/engine.yaml on main already renamed ProviderConfig to
LLMProviderConfig, but the generated go/api bindings were never
regenerated and committed — a latent contract↔bindings drift on main
that the new codegen-drift CI check surfaced on every open PR. Running
`go generate ./...` brings the bindings back in sync.
@konegen konegen merged commit 6249375 into main Jun 1, 2026
6 checks passed
@r1marcus r1marcus deleted the chore/license-split-only branch June 3, 2026 06:42
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.

2 participants