Skip to content

chore(packaging): INT-04 JSR packaging prep — runtime publish-ready, NOT published (Refs #181 #260)#261

Merged
hyperpolymath merged 1 commit into
mainfrom
int04-181-packaging
May 19, 2026
Merged

chore(packaging): INT-04 JSR packaging prep — runtime publish-ready, NOT published (Refs #181 #260)#261
hyperpolymath merged 1 commit into
mainfrom
int04-181-packaging

Conversation

@hyperpolymath
Copy link
Copy Markdown
Owner

INT-04 — JSR packaging prep (#181) — NOT published

Bounded packaging prep per owner direction: prepare only, stop before publish. Nothing is published; the workflow is manual-only and owner-gated.

Landed

  • deno publish --dry-run green for @hyperpolymath/affine-js and @hyperpolymath/affinescript-tea. Two real packaging defects fixed:
    • test files (loader_test.js/mod_test.js) were being published → publish.exclude in both deno.json.
    • affinescript-tea/mod.js imported affine-js via a cross-package relative path (broken for JSR consumers) → rewired to bare spec @hyperpolymath/affine-js/loader + import map. 9/9 tea tests still green.
  • .github/workflows/publish-jsr.yml — manual workflow_dispatch only (never push/merge), JSR OIDC (id-token: write, no token secret), dry_run defaults true, per-package. Publish order load-bearing: affine-js → affinescript-tea.
  • docs/PACKAGING.adoc — readiness, order, slow-types note, npm tail.
  • INT-04: compiler distribution strategy (native OCaml binary — not JSR/npm) #260 filed — the compiler is a native OCaml binary, not a JSR/npm package; its distribution is a one-way-door design fork (surfaced, not guessed; blocks INT-10).

Verification

dune test --force 278/278 (no compiler change; zero regression). Dry-runs simulate publish only.

Not published. Actual publish needs explicit owner go + JSR/npm auth (see docs/PACKAGING.adoc).

Refs #181 #260. Not Closes — owner closes per ISSUE-CLOSURE.

🤖 Generated with Claude Code

…NOT published (Refs #181 #260)

Bounded packaging prep (owner-directed: prepare only, stop before
publish). Nothing is published; the workflow is manual-only.

- `packages/affine-js` + `affinescript-tea`: `deno publish --dry-run`
  green. Two real packaging defects fixed:
  * test files were being published → `publish.exclude` in both
    deno.json (`loader_test.js` / `mod_test.js`).
  * `affinescript-tea/mod.js` imported affine-js via a cross-package
    relative path (`../packages/affine-js/loader.js`) — broken for any
    JSR consumer. Rewired to the bare spec
    `@hyperpolymath/affine-js/loader` + an import map in
    affinescript-tea/deno.json (resolves in-repo and to the JSR
    package once affine-js is published). 9/9 tea tests still green.
- `.github/workflows/publish-jsr.yml`: **manual `workflow_dispatch`
  only** (never on push/merge), JSR OIDC via `id-token: write` (no
  token secret), `dry_run` defaults true, per-package. Publish order
  is load-bearing: affine-js before affinescript-tea.
- `docs/PACKAGING.adoc`: publish-readiness, order, slow-types note,
  npm tail, and the open compiler-distribution question.
- Filed **#260**: the compiler is a native OCaml binary, NOT a
  JSR/npm package — its distribution is a one-way-door design fork
  (surfaced, not guessed; blocks INT-10 LSP distribution).

Gate: `dune test --force` 278/278 (no compiler change; zero
regression). NOT published — owner-gated (explicit go + JSR/npm auth).

Refs #181 #260. Not Closes — owner closes per ISSUE-CLOSURE.
@hyperpolymath hyperpolymath merged commit 367a7b0 into main May 19, 2026
12 of 13 checks passed
@hyperpolymath hyperpolymath deleted the int04-181-packaging branch May 19, 2026 17:23
@github-actions
Copy link
Copy Markdown

🔍 Hypatia Security Scan

Findings: 47 issues detected

Severity Count
🔴 Critical 12
🟠 High 21
🟡 Medium 14

⚠️ Action Required: Critical security issues found!

View findings
[
  {
    "reason": "Stray AI.a2ml in root -- use 0-AI-MANIFEST.a2ml only",
    "type": "banned",
    "file": "AI.a2ml",
    "action": "delete",
    "rule_module": "root_hygiene",
    "severity": "high"
  },
  {
    "reason": "Superseded by 0-AI-MANIFEST.a2ml",
    "type": "banned",
    "file": "AI.djot",
    "action": "delete",
    "rule_module": "root_hygiene",
    "severity": "high"
  },
  {
    "reason": "Issue in quality.yml",
    "type": "missing_workflow",
    "file": "quality.yml",
    "action": "create",
    "rule_module": "workflow_audit",
    "severity": "high"
  },
  {
    "reason": "Issue in security-policy.yml",
    "type": "missing_workflow",
    "file": "security-policy.yml",
    "action": "create",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Action hyperpolymath/standards/.github/workflows/governance-reusable.yml@main needs attention",
    "type": "unpinned_action",
    "file": "governance.yml",
    "action": "pin_sha",
    "rule_module": "workflow_audit",
    "severity": "high"
  },
  {
    "reason": "Action actions/checkout@v4 needs attention",
    "type": "unpinned_action",
    "file": "publish-jsr.yml",
    "action": "pin_sha",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Action denoland/setup-deno@v2 needs attention",
    "type": "unpinned_action",
    "file": "publish-jsr.yml",
    "action": "pin_sha",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "TypeScript file detected -- banned language",
    "type": "banned_language_file",
    "file": "/home/runner/work/affinescript/affinescript/affinescript-deno-test/example/smoke_driver.ts",
    "action": "flag",
    "rule_module": "cicd_rules",
    "severity": "critical"
  },
  {
    "reason": "TypeScript file detected -- banned language",
    "type": "banned_language_file",
    "file": "/home/runner/work/affinescript/affinescript/affinescript-deno-test/cli.ts",
    "action": "flag",
    "rule_module": "cicd_rules",
    "severity": "critical"
  },
  {
    "reason": "TypeScript file detected -- banned language",
    "type": "banned_language_file",
    "file": "/home/runner/work/affinescript/affinescript/affinescript-deno-test/mod.ts",
    "action": "flag",
    "rule_module": "cicd_rules",
    "severity": "critical"
  }
]

Powered by Hypatia Neurosymbolic CI/CD Intelligence

Comment on lines +46 to +50
run: |
case "${{ inputs.package }}" in
affine-js) echo "dir=packages/affine-js" >> "$GITHUB_OUTPUT" ;;
affinescript-tea) echo "dir=affinescript-tea" >> "$GITHUB_OUTPUT" ;;
esac
hyperpolymath added a commit that referenced this pull request May 19, 2026
…shim (#260 S1) (#283)

INT-04 (#181) "publish compiler + runtime": the runtime JS packages
ship to JSR (#261, publish authorised + dispatched 2026-05-19); the
compiler is a native OCaml binary, NOT a JSR/npm package. Its
distribution was an escalated one-way-door fork (#260,
AskUserQuestion). Owner chose option 4 = GitHub Releases binaries +
thin Deno/JSR shim.

Slice S1 — decision record only, no code (the discipline for a
one-way-door, mirroring ADR-015/016):
- ADR-019 in docs/specs/SETTLED-DECISIONS.adoc + the META.a2ml
  `[[adr]]` block (next free id; 016 was #234, 017/018 taken by
  concurrent merged ADRs). Releases-canonical dual-channel: release.yml
  emits per-platform binaries + SHA256SUMS (single source of truth;
  Guix/Nix/npm are additive fetch-derivations later, not separate
  producers); a thin `@hyperpolymath/affinescript` Deno/JSR shim
  downloads + checksum-verifies + caches + execs the pinned binary
  (HTTPS-only, no secrets, one version+checksum per shim release).
  Staged S1..S4.
- INT-10 (`affinescript-lsp` distribution) UNBLOCKED by this decision
  and filed as #282 (consumes the shim; gated on #260 S2/S3).
- TECH-DEBT INT-04 row + ECOSYSTEM INT-10 row truthed.

Gate: dune test --force green (docs/a2ml only; zero code, zero
regression).

Refs #260 #181 #282. Not Closes — staged campaign; owner closes per
ISSUE-CLOSURE.
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.

2 participants