Skip to content

Attribute the Enhanced Inspector payload to the holders its upstreams name - #558

Open
jgfoster wants to merge 3 commits into
mainfrom
james/issue453-third-party-enhanced-inspector
Open

Attribute the Enhanced Inspector payload to the holders its upstreams name#558
jgfoster wants to merge 3 commits into
mainfrom
james/issue453-third-party-enhanced-inspector

Conversation

@jgfoster

@jgfoster jgfoster commented Sep 4, 2026

Copy link
Copy Markdown
Member

Fixes #453.

resources/enhancedInspector/*.gs — seven files, all third-party — ship verbatim in the VSIX, but THIRD-PARTY.md and NOTICE covered only AST-Core, and each file's header pointed readers at "LICENSE in the origin repository" instead of carrying a notice.

The issue asked for a careful pass over each origin repo's LICENSE rather than a uniform table, and that pass turned up more than a missing section.

What the upstream LICENSE files actually say

Payload file Copied from Upstream project LICENSE copyright line
gt4gemstone.gs, patch-gemstone.gs feenkcom/gt4gemstone same Copyright (c) 2021 feenk
gtoolkit-remote.gs feenkcom/gtoolkit-remote same Copyright (c) 2019 Juraj Kubelka
gtoolkit-wireencoding.gs feenkcom/gtoolkit-wireencoding same Copyright (c) 2024 feenk
RemoteServiceReplication.gs GemTalk/RemoteServiceReplication same Copyright (c) 2017-2024 GemTalk Systems
Announcements.gs feenkcom/gt4gemstone GemTalk/Announcements Copyright (c) 2020-2021 GemTalk Systems
STON.gs feenkcom/gt4gemstone svenvc/ston, GemStone port in GemTalk/Rowan Copyright (C) 2012 Sven Van Caekenberghe / Copyright (c) 2018 Dale Henrichs

Every header we ship named a holder that appears in no upstream LICENSE: feenk gmbh (upstream says feenk), GemTalk Systems, Inc (upstream says GemTalk Systems), and feenk gmbh for gtoolkit-remote, which is licensed by an individual.

Two files are not feenk's work at all. gt4gemstone's scripts/convertRsrToGsFormat.topaz exports GemTalk/Announcements and GemTalk/RemoteServiceReplication into gt4gemstone's own src-gs/ — so src-gs/Announcements.gs is GemTalk's code, and its packages (Announcements-Core-GemStone, Announcements-Core-GemStone-Test, Announcements-Extensions-GemStone) match that repo's src/ exactly. src-gs/STON.gs carries STON-Core and STON-GemStone-Kernel; the STON class comment is byte-identical to svenvc/ston's, and those two package names are the ones in GemTalk/Rowan at platforms/gemstone/projects/STON/src/.

Changes

  • THIRD-PARTY.md — a new section modelled on the AST-Core one (What / Where / Obtained via / Modifications / License), plus the per-file provenance table and the full MIT notice under all seven copyright lines. I verified the permission-and-warranty text is word-for-word identical in all seven LICENSE files (they differ only in the copyright line, the presence of an MIT License title, and line wrapping), so it is reproduced once with that stated, rather than seven near-identical times.
  • NOTICE — a matching bullet listing all seven holders.
  • apply_jasper_transforms.sh — corrected attribution table; headers now carry an Upstream: line where the copied-from repo is not the copyright holder's, the holder as its LICENSE writes it, and a pointer to THIRD-PARTY.md/NOTICE (both of which ship in the VSIX).
  • resources/enhancedInspector/*.gs — regenerated headers. Bodies are untouched (verified by diffing header-stripped files).
  • Two READMEs — link to the new section and say to fix the table rather than a header.

The old code only prepended a header when the sentinel was absent, so correcting the table would never have reached the committed payload. It now regenerates the header block, and refuses to rewrite a file whose sentinel is present but whose closing rule is missing rather than stripping it to nothing.

Verification

npm run lint && npm run format:check && npm run compile && npm test all pass (7294 + 322 + 92 tests). Re-running apply_jasper_transforms.sh reproduces the committed payload byte for byte, twice; the malformed-header guard was exercised on a copy and left the file untouched.

apply_jasper_transforms.sh is broken on macOS (#429, unrelated and left alone), so I ran it through a sed -i shim to produce these bytes; on Linux the script itself produces them.

For review

Two calls a human should sign off on, since this is a license file:

  1. STON's lineage is inferred, not documented anywhere upstream — from the identical class comment and the matching Rowan package names. Both candidate holders are listed, and both are MIT, so the notice is complete either way, but the wording "GemStone port: GemTalk/Rowan" is my inference.
  2. The MIT text is reproduced once rather than per holder. The bodies are provably identical, but if you would rather see seven verbatim blocks, say so and I will expand it.

Also worth noting: unlike AST-Core (which pins RowanV3 3.7.5, build cf61017e), this payload records no upstream revision — the .gs files came from whatever was in the maintainer's $ROWAN_PROJECTS_HOME at the time. Provenance here is repo-level only. THIRD-PARTY.md says so and suggests recording per-file commits on the next re-vendor; that is out of scope here.

🤖 Generated with Claude Code

… name

The seven .gs files under resources/enhancedInspector/ ship verbatim in the
VSIX, but THIRD-PARTY.md and NOTICE covered only the AST-Core component, and
each file's header just pointed readers at "LICENSE in the origin repository".

Checking each origin repo's LICENSE individually, as issue #453 asked, turned
up more than a missing section: the holder strings in those headers matched no
upstream. gtoolkit-remote's LICENSE names Juraj Kubelka, not feenk; the feenk
repos say "feenk", not "feenk gmbh"; RemoteServiceReplication says "GemTalk
Systems", not "GemTalk Systems, Inc". Two files are not feenk's work at all --
gt4gemstone's scripts/convertRsrToGsFormat.topaz exports GemTalk/Announcements
into its own src-gs/, and src-gs/STON.gs carries STON-Core/STON-GemStone-Kernel,
whose lineage is svenvc/ston with the GemStone port in GemTalk/Rowan.

So: a THIRD-PARTY.md section with per-file provenance and the full MIT notice
under all seven copyright lines (the permission and warranty text is word-for-
word identical across every upstream LICENSE, so it is reproduced once), a
matching NOTICE entry, and a corrected attribution table in
apply_jasper_transforms.sh.

That table only ever ran when a file had no header yet, so correcting it would
not have reached the committed payload. It now regenerates the header block
instead, refusing to rewrite a file whose sentinel is present but whose closing
rule is missing rather than stripping it to nothing. Re-running reproduces the
committed payload byte for byte, and the file bodies are untouched.

Fixes #453

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.

Add a THIRD-PARTY.md section for the Enhanced Inspector vendored payload

1 participant