Skip to content

docs: tighten legal posture language + Clippit upstream attribution#80

Merged
thewrz merged 2 commits into
mainfrom
chore/legal-language-tightening
May 18, 2026
Merged

docs: tighten legal posture language + Clippit upstream attribution#80
thewrz merged 2 commits into
mainfrom
chore/legal-language-tightening

Conversation

@thewrz
Copy link
Copy Markdown
Contributor

@thewrz thewrz commented May 18, 2026

Summary

Tightens legal/IP language in three places where the prior wording either overstated settled law, understated available defenses, or omitted attribution that moots a copyright question entirely. Preserves the repo's neutral "we moot the question by design" stance throughout.

  • TRADEMARKS.md — Reframes CSI's MasterFormat copyright assertion as contested (not uncontested fact) by citing the merger doctrine and Feist. Keeps the same length and tone.
  • docs/adr/013-csi-sections-seed-public-domain-derivation.md — Softens the "CSI asserts copyright" framing in the Context section; strengthens the "bounded coverage" argument in Consequences as defensive evidence; adds a Related precedent subsection citing Feist, 17 U.S.C. § 102(b), and Veeck.
  • NOTICES (new) — Preserves the upstream MIT copyright for Clippit (sergey-tihon/Clippit) and Open-Xml-PowerTools (EricWhiteDev/Open-Xml-PowerTools), both Copyright (c) Microsoft Corporation, verified directly from the upstream repos via gh api. The TypeScript port of ListItemRetriever lives in src/parser/docx/styles.ts, which now carries a short file header pointing to NOTICES.
  • README.md — One-line link to NOTICES under the existing ## Trademarks section.

Doctrines being respected

  • Veeck v. SBCCI, 293 F.3d 791 (5th Cir. 2002) (en banc) — alternative merger-doctrine holding
  • Feist Publications v. Rural Telephone, 499 U.S. 340 (1991) — facts not copyrightable
  • 17 U.S.C. § 102(b) — copyright excludes ideas/systems/procedures
  • Computer Associates v. Altai, 982 F.2d 693 (2d Cir. 1992) — AFC test for non-literal software copying (the unsettled question that the NOTICES file moots for the Clippit port)

The NOTICES file is characterized in code/commit as preserving upstream attribution, not as "fixing a license violation" — per the task spec, that legal question (cross-language port + AFC) is genuinely unsettled, and attribution is added as defensive hygiene.

Non-goals (intentionally not done)

  • LICENSE unchanged — SpecR remains MIT
  • No legal-disclaimer bloat; tone matches the existing docs
  • No new ADR — NOTICES is a conventional repo-root file, not a structural decision warranting ADR-014
  • ARCAT / CPI / MasterSpec language untouched (already clean)

Test plan

  • pnpm lint clean (ESLint + tsc --noEmit + prettier)
  • pnpm test — 462/462 passing (file-header comment doesn't affect anything at runtime)
  • grep "CSI asserts" TRADEMARKS.md docs/adr/013-*.md returns revised language only
  • Every Clippit / ListItemRetriever reference in src/ is reachable to attribution via NOTICES (linked from src/parser/docx/styles.ts header + README)
  • Reviewer spot-check of Feist, Veeck, § 102(b) citations and the Cornell LII / Justia links

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Added a NOTICES file with third-party attributions and MIT license text.
    • Updated README to reference third-party attribution details.
    • Clarified provenance, coverage boundaries, and related precedent in governance/docs.
    • Revised trademark/copyright wording to explain approach to public-domain seeding.
    • Preserved upstream license attribution in source headers.

Review Change Stack

…ibution

TRADEMARKS.md and ADR-013 reframe CSI's copyright assertion as contested
(merger doctrine / Feist) rather than settled, while preserving SpecR's
neutral "we moot the question by sourcing from public-domain UFGS" stance.
ADR-013 gains a "Related precedent" subsection citing Feist (499 U.S. 340),
17 U.S.C. § 102(b), and Veeck (293 F.3d 791) for future-reader context.

Adds NOTICES at repo root with the upstream MIT copyright for Clippit and
Open-Xml-PowerTools — defensive hygiene for the C# → TypeScript port of
ListItemRetriever in src/parser/docx/styles.ts. Whether Computer Associates
v. Altai (982 F.2d 693) would require this attribution for a cross-language
port is genuinely unsettled; preserving it costs nothing and moots the
question. styles.ts gains a brief file-header pointing to NOTICES.
README's Trademarks section links to NOTICES.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 18, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 70b345e9-320e-491e-b66c-6eb5dbba2d7f

📥 Commits

Reviewing files that changed from the base of the PR and between 45bafa3 and f08cfdd.

📒 Files selected for processing (2)
  • TRADEMARKS.md
  • docs/adr/013-csi-sections-seed-public-domain-derivation.md
✅ Files skipped from review due to trivial changes (1)
  • docs/adr/013-csi-sections-seed-public-domain-derivation.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • TRADEMARKS.md

📝 Walkthrough

Walkthrough

This PR adds third-party license attribution for upstream DOCX parser code and strengthens the legal documentation around public-domain sourcing of MasterFormat seed data. A new NOTICES file preserves MIT licensing for Clippit/Open-Xml-PowerTools derivatives, referenced in README and documented in styles.ts. TRADEMARKS.md and ADR-013 are expanded to clarify merger-doctrine copyright limits and reinforce that spec_sections derive exclusively from the public-domain UFGS corpus.

Changes

Licensing and copyright sourcing

Layer / File(s) Summary
Upstream license attribution and documentation
NOTICES, README.md, src/parser/docx/styles.ts
NOTICES file documents MIT attribution for Clippit/Open-Xml-PowerTools-derived DOCX parser logic. README adds reference to preserved third-party attributions. styles.ts header comments upstream source origins and behavior notes.
Copyright policy and UFGS sourcing rationale
TRADEMARKS.md, docs/adr/013-csi-sections-seed-public-domain-derivation.md
TRADEMARKS.md updates CSI copyright framing with idea/expression and Feist references and states spec_sections derive from public-domain UFGS. ADR-013 expands historical notes, coverage-boundary language, and adds related precedent citations.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Poem

A rabbit hops through legal pages,
Licensing credits for all the ages,
Third-party notes in notices bright,
UFGS sources, squeaky clean and right! 🐰📜

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main changes: tightening legal/IP language throughout the repo and adding upstream attribution for Clippit, which are the primary objectives of the PR.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/legal-language-tightening

Comment @coderabbitai help to get the list of available commands and usage tips.

After fetching the actual case texts, two overclaims in the prior commit
needed correction:

1. Removed "short functional designations" framing from TRADEMARKS.md and
   ADR-013. That phrase is not from Feist (which addresses facts and
   compilation copyright scope). It comes from a separate line of cases
   (Southco v. Kanebridge, etc.) that wasn't cited, so the conflation
   overstated what the cited authority actually says. Replaced with the
   accurate Feist framing: facts are not copyrightable; compilation
   copyright extends only to original selection and arrangement.

2. Rewrote the Veeck entry in ADR-013's Related precedent. The prior
   wording called Veeck an "alternative merger-doctrine holding relevant
   to industry numbering schemes." Reading the en banc opinion (via
   OpenJurist), the court's merger reasoning is tied to the codes-as-law
   context ("the law...can be expressed in only one way") and the opinion
   expressly distinguishes cases involving private standards merely
   referenced — not adopted — by legislation. MasterFormat is neither
   adopted nor referenced. Veeck is cited for context on the broader
   public-domain-via-adoption line, not as authority for SpecR's posture.

Also tightened "merger doctrine (17 U.S.C. § 102(b))" to "idea/expression
dichotomy (17 U.S.C. § 102(b))" — § 102(b) codifies the idea/expression
rule; the merger doctrine is a related judge-made application of it. The
prior shorthand was defensible but imprecise.

Citations verified: Feist via Cornell LII; § 102(b) verbatim via Cornell
LII; Veeck via OpenJurist (Justia returned 403). Computer Associates v.
Altai citation in NOTICES is unchanged — it is cited as the doctrinal
backdrop for the unsettled cross-language-port question, which matches
what Altai actually addresses (AFC test for non-literal copying).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@thewrz
Copy link
Copy Markdown
Contributor Author

thewrz commented May 18, 2026

Source-verified citations (follow-up commit f08cfdd)

After verifying each cited authority against its actual text, two overclaims from the initial commit needed correction:

What I verified

Authority Source fetched Verdict
Feist, 499 U.S. 340 (1991) Cornell LII ✅ Holding matches: facts not copyrightable; compilation copyright limited to original selection/arrangement
17 U.S.C. § 102(b) Cornell LII ✅ Quoted verbatim
Veeck, 293 F.3d 791 (5th Cir. 2002) en banc OpenJurist (Justia 403'd) ⚠️ Holding narrower than my draft implied — see below
CA v. Altai, 982 F.2d 693 (2d Cir. 1992) Wikipedia summary ✅ AFC test verified; cross-language ports = case does not address (which makes NOTICES' "unsettled" framing accurate, not problematic)

What I corrected

1. TRADEMARKS.md + ADR-013 Context — dropped "and short functional designations". That phrase isn't from Feist; it traces to a different line (Southco v. Kanebridge etc.) which I hadn't cited, so the conflation overstated what the cited authority actually says. Replaced with strict Feist framing.

2. ADR-013 Related precedent — rewrote the Veeck entry. The opinion's merger reasoning is tied to the codes-as-law context ("the law…can be expressed in only one way"); the court expressly distinguished cases involving private standards merely referenced — not adopted — by legislation. MasterFormat is neither adopted nor referenced. So calling Veeck an "alternative merger-doctrine holding relevant to industry numbering schemes" overstated its reach. Now framed honestly: cited for context on the broader public-domain-via-adoption line, not as authority for SpecR's posture.

3. Tightened "merger doctrine (§ 102(b))" → "idea/expression dichotomy (§ 102(b))". § 102(b) codifies idea/expression; merger doctrine is a judge-made application of it. The prior shorthand was defensible but imprecise.

What I did not change

  • Feist + § 102(b) citations stand as-is — verified.
  • Altai in NOTICES stands — characterized as "unsettled" which the case itself supports (it doesn't address cross-language ports).
  • The "SpecR moots the question by design" stance is preserved throughout.

@thewrz thewrz merged commit 55b7829 into main May 18, 2026
5 checks passed
@thewrz thewrz deleted the chore/legal-language-tightening branch May 18, 2026 20:34
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