Skip to content

[campaign #254] STEP 3 — PORTS: physical migration of "portable now" subset, smallest-first #271

Description

@hyperpolymath

Part of #254. Blocked by step 2.

Goal

Execute the physical .js/.jsx → .affine ports for every file STEP 2 placed in the portable now bucket. Smallest-first to bank throughput and validate per-idiom-cluster patterns before tackling the long tail.

Expected idiom clusters (from #254 LAYER 3)

Many JS files likely fall in 1-2 idiom clusters; STEP 2's bucket comment should confirm:

  • Deno CLI scripts (small, .ts-equivalent surface)
  • VSCode extension JS (covered by Vscode.affine 55 fns)
  • MCP glue (likely stays as JS — async stdio loop, protocol) — should NOT appear in this bucket; if it does, re-triage
  • WebExtension scripts (blocked on host-API bindings, same as TS/RS) — should NOT appear in this bucket

If any of the "should NOT appear" categories show up in portable now, treat as a triage-tool bug and fix STEP 2 before porting them.

Top backlog candidates (informational, from #254 inventory)

The biggest backlog buckets are boj-server (144), panll (142), stapeln (105), proven-servers/idaptik (103). Smallest-first means starting elsewhere; the per-repo totals here are for scope tracking, not port order. STEP 2's output is the actual port order.

Acceptance

  • Every file in STEP 2's portable now bucket is either:
    • Ported (.affine builds, original .js/.jsx removed, downstream build wiring updated)
    • Re-classified (moved out of portable now, with STEP 2's triage tool updated to reflect the rule that placed it correctly)
  • Per-PR ownership gate on every PR (the gh repo view ... --json owner,isFork gate)
  • PRs grouped by repo, smallest-files-first within each repo
  • Carve-out classes from STEP 1 respected (no port attempts on vscode/**, **/deps/**, etc. — those belong to STEPs 4-5 or are permanent residue)
  • Updated bucket-count comment on [campaign] Unnecessarily-JavaScript → AffineScript estate migration (UMBRELLA) #254 once this step's PRs land (delta vs STEP 2's initial counts)

Sequencing

Blocks: nothing — but feeds the STEP 5 re-triage with empirical patterns.
Blocked by: STEP 2 (without the portable now bucket, this step has no scope).

Activity

  1. hyperpolymath commented on May 30, 2026

    @hyperpolymath
    OwnerAuthor

    📚 Documentation landed in PR #314 — docs/migrations/js-to-affinescript/README.adoc §STEP 3 captures:

    • Expected idiom clusters (Deno CLI / VSCode ext / and what should NOT appear in portable now)
    • Per-port checklist (build green, original removed, downstream wiring, ownership gate, smallest-first)

    Still owed: the actual physical ports. Stays open until STEP 2's portable now bucket is empty.

  2. hyperpolymath commented on May 30, 2026

    @hyperpolymath
    OwnerAuthor

    Closing per the 2026-05-30 documentation pass — the canonical campaign doc landed in PR #314. Implementation work (Hypatia rule, classifier tool, ports, bindings, re-triage cycles) can be tracked in fresh issues or referenced from the doc as it proceeds.

  3. added
    migrationPorting between languages or toolchains (e.g. -> AffineScript)
    and removed on Aug 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    meta:campaignCoordinated multi-repo push with a defined end statemigrationPorting between languages or toolchains (e.g. -> AffineScript)

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions