Repository navigation
Show each scene's credits in the viewer's About dialog - #185
Merged
Merged
Conversation
The build writes a scene's third-party LICENSE / NOTICE files beside it, but a static host lists no directory, so the SPA had no way to find them. The manifest now names them: a project's `work` and a scene's `credits`, each file identified at build time (`spdx`, `restriction`, the `copyright` line) and each VRM skin's `meta` summarised. Both keys are optional and an older engine ignores them, so `format` stays 7. The About dialog gains a Credits tab for the scene in view: each component with its license, its NOTICE in full and the license text on demand, every skin of the scene with the one on screen first, and the work's own license. The About tab links the engine's LICENSE and THIRD_PARTY_LICENSES.md. `I` opens the dialog, also with the panel hidden, and the panel's logo shows a hover background. `mjswan/manifest` exposes the lists as `SceneEntry.credits` and `ProjectCatalog.work` for hosts with their own UI. Closes #181 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012oiM38cKjSAd9Bmn4Mwgiv
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012oiM38cKjSAd9Bmn4Mwgiv
The About tab keeps GitHub, Documentation and Platform. The engine's LICENSE (shown on demand like the others) and THIRD_PARTY_LICENSES.md move to a closing "mjswan" group of the Credits tab, which is now always there, so a scene without credits still reaches them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012oiM38cKjSAd9Bmn4Mwgiv
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012oiM38cKjSAd9Bmn4Mwgiv
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012oiM38cKjSAd9Bmn4Mwgiv
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #181.
The build writes a scene's third-party
LICENSE.<component>/NOTICE.<component>files beside it (ADR 0007), but the SPA showed none of them, and a static host lists no directory for it to look in.Manifest
work(its ownLICENSE/NOTICE, relative to<project-id>/) and a scene getscredits(one entry per component, relative to the scene directory). Each license file is identified at build time:spdx,restriction, and itscopyrightline..glbskin'sskin-<id>component carriesskin: <id>; a VRM skin gets avrmsummary of its ownmeta(name, authors, license, other license URL). The file itself is bundled unmodified.formatstays 7. A build without license files writes the same manifest as before.mjswan.license.copyright_linereads a license text's holder line, skipping template placeholders (Apache-2.0's appendix) and empty holders.Viewer
LICENSEon demand, a link toTHIRD_PARTY_LICENSES.md), so the tab is there for every scene. Texts are fetched when the tab opens or the License button is pressed.Iopens and closes the About dialog, also with the panel hidden (?panel=0). The panel's logo gets a hover background; its tooltip is unchanged.mjswan/manifestexposesSceneEntry.creditsandProjectCatalog.work, so a host with its own UI can show them.Follow-ups
license_filesrow as the source of truth.Testing
On the branch with #184 and #186 merged in:
uv run pytest -m "not slow": 1178 passed. New tests covercopyright_line, the manifest listing exactly the files written,work, no keys without license files, and the skin entries (VRM 1.0, VRM 0.x,.glb).npx vitest run: 887 passed, including the catalog'scredits/workand lazy text loading.ruff,tsc --noEmit,eslint src/: clean.tyandpyrightreport only existing diagnostics in files this change does not touch.Iopens About with and without?panel=0, the Credits tab lists components, skins (on screen first), the work and the engine, License expands the full text (the engine's included), and the logo hover shows.🤖 Generated with Claude Code
https://claude.ai/code/session_012oiM38cKjSAd9Bmn4Mwgiv