feat: platform release manifest v1 + open-core licensing boundary (Sections 13 + 22) - #1057
Merged
Merged
Conversation
Roadmap Sections 13 and 22. Section 13 (platform release manifest, pragmatic v1): - platform-manifest.json: one authoritative machine-readable manifest of launcher/flow/capture/desktop versions, PyPI artifact URLs + sha256, supported OSes, substrate drivers, compatibility ranges, qualification evidence IDs, and release channel. - scripts/generate_platform_manifest.py: generates the manifest from the real published sources (PyPI JSON API, openadapt.ai/status.json, pyproject.toml); fails loudly instead of inventing numbers. - scripts/validate_platform_manifest.py: CI drift detector; fails when the manifest disagrees with published artifacts or pyproject pins. - signature block is honestly null with status 'unsigned (signing infrastructure pending)'; the Authenticode / Developer ID / sigstore plan is documented, and the validator rejects any claimed signature until verification exists. - docs/platform-manifest.md: schema, generation, validation, signing plan. - .github/workflows/platform-manifest.yml: PR + weekly scheduled runs. Section 22 (licensing and contribution boundary): - TRADEMARKS.md: name/logo not covered by MIT; nominative use OK; no confusingly similar names; contact for permission. - scripts/check_source_boundary.py: denylist path/content check keeping application-specific recipes, customer fixtures, and proprietary system identifiers out of public core repos; wired into CI. - CONTRIBUTING.md: open-core boundary for contributors + DCO note (CLA under consideration, not adopted). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NyCHrzA1psrKMFfroYbzaM
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.
Summary
Implements roadmap Section 13 (one signed platform release manifest, pragmatic v1) and Section 22 (licensing/contribution boundary) in the launcher meta-repo, which is where the platform pins already live.
Section 13: platform release manifest
platform-manifest.json(repo root): one authoritative, versioned-schema (v1.0.0), machine-readable manifest listing launcher/flow/capture/desktop versions, PyPI artifact URLs + sha256 digests, supported OSes, substrate drivers, compatibility ranges, qualification-evidence IDs (pointing athttps://openadapt.ai/status.jsonand the flow evidence-pack manifests), and release channel.scripts/generate_platform_manifest.py: generates the manifest from the REAL published sources (PyPI JSON API, live status.json, this repo'spyproject.toml). Fails loudly on drift or unreachable sources rather than inventing numbers.scripts/validate_platform_manifest.py: CI drift detector. Today it validates structure, signature honesty, agreement withpyproject.toml, and exact version/URL/sha256 agreement with PyPI for all four components; status.json skew is a warning by default (--strict-statusescalates). Later: sigstore signature verification and OS installer artifacts (documented indocs/platform-manifest.md).signatureis present in the schema but honestly null with statusunsigned (signing infrastructure pending). The validator REJECTS any non-null signature value until verification infrastructure exists. The Authenticode / Apple Developer ID / sigstore rollout plan is documented..github/workflows/platform-manifest.ymlruns the validator on PRs, pushes to main, and a weekly schedule (so an unregenerated manifest fails loudly after any component release).Section 22: licensing and contribution boundary
TRADEMARKS.md: name/logo not covered by MIT, nominative use OK, no confusingly similar names, contact for permission.scripts/check_source_boundary.py: denylist path-token + content-signature check that keeps application-specific recipes, customer fixtures, and proprietary system identifiers out of public core repos (motivating case named in the docstring: the PowerChart incident). Complements flow's packaging-timecheck_release_consistency.pyby scanning the repository tree at PR time. Wired into the same CI workflow; accepts--rootso other public repos can reuse it.CONTRIBUTING.md: documents the open-core boundary for contributors and states that the DCO applies now, with a CLA under consideration but not adopted.Verification
DO NOT MERGE without maintainer review.
🤖 Generated with Claude Code
https://claude.ai/code/session_01NyCHrzA1psrKMFfroYbzaM