Repository navigation
[campaign #252] STEP 8 — MEGAPORT: idaptik (516, was 1235) + panll (726) batched conversion #279
Description
Activity
- addedmeta:campaignCoordinated multi-repo push with a defined end stateCoordinated multi-repo push with a defined end state
on May 30, 2026 STEP 8 — Megaport: progress sweep 2026-05-30.
Current state vs. issue body (filed 2026-05-28):
Repo Original Now Δ idaptik 1,235 516 −719 (−58%) panll 726 726 0 Total 1,961 1,242 −719 (−37%) idaptik progress drivers
- idaptik#107 MERGED 2026-05-28 — dlc-reversible subsystem port (the seed-port pilot; also satisfied STEP 3 [campaign #252] STEP 3 — SEED PORT: smallest pure-logic repo with no Belt/Js dep #267).
- Pre-step-1 carve-out work (e.g. lib/js output exclusions from hypatia#391) may account for some of the count delta — re-verify if exact attribution matters for tracking. Bulk of the reduction is real ported source.
panll standing state
panll remains at 726 files — no megaport work has started yet. Per memory's standing instruction,
panll/.claude/CLAUDE.mdis hands-off in sweeps (owner reverted panll#60 on 2026-05-30). The clade-portal subdirectory has 6 files; the bulk (720) lives undersrc/.Update
Issue body still shows the 1,961 / 1,235 / 726 numbers from 2026-05-28. The 58% idaptik reduction is real and tracks campaign progress. Keeping this STEP OPEN — most of panll + remaining idaptik tail still ahead — but adding this comment as the canonical progress snapshot. Will re-survey when panll work begins or further idaptik PRs land.
Cross-ref: STEP 3 #267 closed (seed proven via idaptik#107), STEP 4 #269 closed (stdlib substantially done), STEP 1 #260 closed (Layer-1 in via hypatia#391 + standards#285).
- changed the title
[-][campaign #252] STEP 8 — MEGAPORT: idaptik (1235) + panll (726) batched conversion[/-][+][campaign #252] STEP 8 — MEGAPORT: idaptik (516, was 1235) + panll (726) batched conversion[/+]on May 30, 2026 STEP 8 — Megaport progress sweep 2026-05-31 AM
Following on from the 2026-05-30 PM sweep (which moved idaptik 1,235 → 516).
This session: targeted first-compilable-Mode-A batch + the upstream
AffineScript stdlib unblock needed to make those compiles real.What landed (3 PRs)
Repo PR Status Effect affinescript #505 armed (auto-merge SQUASH) pub-marks 38 documented stdlib fns instring.affine+collections.affine. Unblocks consumers that needstring::starts_with,collections::any, etc. — was the resolution blocker.idaptik #110 armed Completes migration/shared/PortNames.affine(addsisCoprocessorPortusing newly-pub stdlib). First compilable Mode-A file inmigration/shared/. Adds paritySTATUS.mdfor all 10 Wave-3 pilot files.panll #72 armed Ports 11 panll module-config files (capability-sum + config record + helpers shape) into migration/modules/*.affine. All 11 type-check. 715 LoC of.resported. First compilable Mode-A batch in panll.Current parity counts
Repo .ressource.affineMode-A (passesaffinescript check).affineMode-B (design demo, doesn't compile)idaptik 509 1 (migration/shared/PortNames.affine) 9 (rest of migration/shared/) panll 726 11 (migration/modules/*.affine) 0 Total 1,235 12 9 Replacement of .res still pending
None of the 12 Mode-A
.affinefiles yet replace their.ressource in
the build — both repos still compilesrc/**/*.resto.res.mjsvia the
rootrescript.json. Replacement requires:- AffineScript → ESM codegen for non-stdlib modules. AS has Deno-target
codegen for stdlib + select consumers; module-tree codegen for arbitrary
user files is the gap. Tracked AS-side. - Consumer migration — every place that currently
imports the
compiled .res.mjs needs to switch to the .affine-compiled equivalent.
Mechanical when (1) lands.
The 12 Mode-A files discharge the design risk for these subsystems —
when (1) lands, promotion is a one-PR cutover per subsystem, not an
11-file rewrite.What's left structurally
The 715 remaining
.resfiles in panll (and 509 in idaptik) break
down into these blocker categories:Category Estimate Blocker AS issue TEA framework consumers ~350 (panll components/update/view; src/App.res; src/View.res) Needs AS TEA bindings (Tea_App, Tea_Cmd, Tea_Html, Tea_Sub, Tea_Vdom) (none filed yet — propose follow-up) Gossamer IPC consumers ~10 (panll subscriptions, clade-portal, RuntimeBridge) Needs AS Gossamer IPC FFI (none filed yet — propose follow-up) ReScript JSX components ~126 (panll src/components) AS has different view story (parking pending TEA decision) Js.*interop~50 scattered Needs use deno::{...}or carve-outspartial — Deno.affine landed Idaptik src/bindings (Pixi/Motion/PixiSound/PixiUI) 4 UNBLOCKED 2026-05-30 — stdlib/Pixi.affine + Motion + PixiSound + PixiUI all exist next session candidate Idaptik src/app (game proper) 215 Depends on the above bindings + cross-file useblocked Idaptik idaptik-ums (sub-project) 11 Pixi + Gossamer IPC blocked Idaptik vm/lib/ocaml (VM source) 47 Coupled with vm/tests + .res.mjs consumers needs build wiring Idaptik vm/wasm 2 UNBLOCKED 2026-05-30 — wasm_export_call shipped (affinescript#467) next session candidate Follow-up issues to consider filing
- AffineScript TEA bindings —
stdlib/Tea.affineparallel to existingstdlib/Pixi.affine/Motion.affine/PixiSound.affine/PixiUI.affine. Unblocks the entire panll components / update / view tree (~350 files). - AffineScript Gossamer IPC FFI —
stdlib/Gossamer.affineextern declarations + Deno-target codegen. Unblocks panll clade-portal (6) + RuntimeBridge / subscriptions (~10), idaptik-ums (11). - Estate-wide pub sweep — affinescript io.affine (0/15 pub), math.affine (0/36 pub), option.affine (1/36 pub), result.affine (0/24 pub), testing.affine (0/26 pub) have the same pub gap that governance-reusable: two jobs cannot fail (Code quality + docs; Guix/Nix policy) + redundant trufflehog #505 closed for string + collections. Each is a tiny PR; the batch unblocks ~140 more potential stdlib consumers.
- AffineScript → ESM codegen for user modules — currently Deno-target codegen covers stdlib + select harness; arbitrary-module codegen is the replacement-of-.res blocker for everything ported in this session.
Will file these AS-side this session or queue for follow-up.
Updated count delta
Metric 2026-05-28 (filing) 2026-05-30 PM 2026-05-31 AM (this) idaptik .res 1,235 516 509 (-7 since 05-30 from local survey re-count) panll .res 726 726 726 Mode-A .affine 0 0 12 Total .res remaining 1,961 1,242 1,235 Keeping STEP 8 OPEN — most of the bulk still ahead and gated on the
framework-binding + codegen blockers above. This session set the
Mode-A path-of-least-resistance baseline (1+11 files, ~715 LoC
ported, design risk discharged for two subsystem-shapes) and the
stdlib visibility unblock that makes future ports tractable.Cross-refs: affinescript#505, idaptik#110, panll#72.
- AffineScript → ESM codegen for non-stdlib modules. AS has Deno-target
Status update — AS stdlib codegen landed; campaign waypoint shift (2026-06-01) 📌
For the campaign umbrella tracking here:
What landed (sourced):
- affinescript#522 (2026-06-01) — Sqlite.affine codegen foundation; first stdlib extern with full Deno-ESM lowering + tests end-to-end.
- affinescript#504 (2026-06-01) — 6 Deno-ESM stdlib externs (stat helpers, byte ops, importMetaUrl) + wildcard-let codegen fix; closes 6 of 10 STEP-3 gaps in standards#242.
- affinescript#463 (2026-05-30) — non-ASCII Unicode escape emit in Deno-ESM.
- affinescript#421 — stdlib/json v0.3 via hpm-json-rsr Zig FFI.
What this means for the campaign:
- Stdlib extern → Deno-ESM lowering pattern is repeatable and tested (
lib/codegen_deno.ml+tests/codegen-deno/*). - STEP 3 / STEP 4 / megaport STEP 8 prerequisites partially closed (stdlib-extern side).
- Not yet sufficient for user-module codegen / hand-port → runtime replacement on its own; user-module emit + remaining stdlib primitives (affinescript#160 Http.fetch / proof-progress(typed-wasm): spec tracker stale — TW1 partial work landed, TW4 effectively discharged, TW3 ReScript doc-drift #162 Dict/Map / etc.) remain the keystone gaps.
Action: No new mass-port being kicked off from this post — surfacing the status so campaign waypoints stay accurate. Dependent sub-tickets can re-evaluate parking once they verify their specific blockers are in the "now-closed" set above.
🤖 Cross-estate AS-status sweep on 2026-06-01.
- addedmigrationPorting between languages or toolchains (e.g. -> AffineScript)Porting between languages or toolchains (e.g. -> AffineScript)and removed
on Aug 26, 2026 Re-measured 2026-08-27 — both numbers are zero, and that is bad news, not progress
target claimed measured panll726 .res0 idaptik516 .res0 (repo is now metadatastician/IDApTIK, and has no.resor.affine)The
panllzero was reached by deletionpanllhas 747.affine— and 726 of them are under 400 bytes, standing 1:1 against the 726 deleted.res. Median size 200 bytes. A complete file, verbatim:// SPDX-License-Identifier: MPL-2.0 // Ported via Harvard Engine bulk-processor module App; // TODO: Complete semantic implementationThat is the whole file. There are 726 of them.
It is not confined to
panll3,138 of 7,180
.affinefiles (43%) across 158 repos are stub-shaped with their sources deleted —rescript1,236,panll726,developer-ecosystem208,affinescript155,ssg-collection143 of 143,proof-burrower143.Recovery is git-history-only, and nothing is lost — but this campaign's completion metric cannot distinguish a port from a deletion.
Filed as #664, which asks for a metric that deletion cannot satisfy. Recommend this issue is not closed on its zero counts.
- addedpriority:p3Low - nice to haveLow - nice to havescope:estateAffects many or all repos across the estateAffects many or all repos across the estatestatus:blockedCannot proceed until a dependency clearsCannot proceed until a dependency clears
on Sep 30, 2026
Part of #252. Blocked by step 7.
Goal
Port the two single-largest repos in the estate: idaptik (1,235 files) + panll (726 files) — together = 1,961 files = ~50% of the entire 3,996-file backlog.
Scale context (from umbrella)
Per umbrella scale summary, the whole campaign is "multi-month". Realistic share for STEP 8: many sessions, many PRs. Likely 50-150 PRs alone for these two repos combined.
Strategy
idaptik dlc-reversibleAS pilot (PR Wave 2: Nix-mirror retirement (LowLevel.jl…a2ml-rs) #107 merged) — that proved the upstream framework-binding development path. Lean on it.panll panel-clades pivot(ADR-0001 SoT=panel-clades) — coordinate so RS→AS port doesn't conflict with concurrent clades workowner=hyperpolymath,isFork=false)Cross-references
Acceptance
Sequencing
Blocks: campaign completion. STEP 9 still parallel-runnable.