feat(npm): @pineforge/codegen-pyodide package + dry-run-safe publish (Phase 3a)#9
Merged
Conversation
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ed archive Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…rors mcp) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… env Tag push -> real npm publish (gate must pass first); workflow_dispatch stays dry-run by default. Coordinates with release.yml (its PAT-pushed tag fires this).
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
Phase 3a of the conformance flow (spec §7/§8). Produces the publishable
@pineforge/codegen-pyodide— the single artifact the app will consume — and moves the codegen table introspection into this repo.Package contents (built at publish time from the gate-validated archive —
release.json.sha256ties the archive ↔ unpacked source ↔ metadata):pineforge_codegen-<ver>.tar.gz— the exact archive the gate validatedpineforge_codegen/— unpacked source (for the app's Node oracle/grammar tooling, no submodule)tables.json— 52 introspected tables (the app renderstables.generated.tsfrom this)release.json—{codegen, pyodide, python, emscripten, sha256}index.mjs— resolves all of the abovePieces
scripts/dump-tables.py— introspection →tables.jsonscripts/build-npm-package.mjs— assemblesnpm/by extracting source from the validated archive (single source of truth)npm/package.json(@pineforge/codegen-pyodide, PolyForm license,pyodidepeer) +npm/index.mjs.github/workflows/publish-pyodide.yml— gate-first, npm OIDC (mirrors codegen-mcp), dry-run-safeDry-run-safe
Nothing ships until the one-time bootstrap (
npm/README.md): first manual publish + per-package trusted-publisher config for this NEW package. Real publish only viaworkflow_dispatchwithdry_run=false; tag pushes dry-run only.Deferred to Phase 3b (app side)
Consume this package, drop the
vendor/pineforge-codegensubmodule, repoint all ~12 consumers, and the byte-for-bytetables.json → tables.generated.tsregression.Test plan
publish-pyodide.ymldry-run runs green on a clean runner (gate 275 +npm publish --dry-run).npm pack --dry-runclean (37 files, no strays);index.mjsresolves.🤖 Generated with Claude Code