Skip to content

Commit 0a319f6

Browse files
hyperpolymathclaude
andcommitted
chore(rescript-ecosystem): Item #12 integrity fixes + rescript-tea lossless consolidation
Estate handover Item #12 (structural ReScript relocation). Mechanism ruled in-tree (not submodules); no source repo retired (reversible). Integrity: - .gitmodules: drop 5 orphan rescript-ecosystem/* submodule stanzas (dirs were already in-tree, mode 100644, empty submodule status) - README.adoc: correct overstated "26 packages consolidated" claim to accurate in-progress status; reframe groups as target layout - add MIGRATION.adoc (authoritative per-package state + reconciliation worklist), TRANSFER.adoc, connectors/ scaffold (preserved FFI seam) rescript-tea (origin github.com/hyperpolymath/rescript-tea): - left to this monorepo as canonical legacy base - bring forward ONLY lossless source-only assets (additive, no overwrite): src/tea/Tea_Layout.{res,resi}, test/Tea_{Cmd,Json}_test.res, examples/{02_http,03_swot_dashboard} - two-way src/* divergence NOT merged (no toolchain); standalone repo NOT retired — tracked in MIGRATION.adoc exit criteria - SUCCESSOR.adoc: affinescript-tea is go-forward; do not hand-port (blocked on affinescript#61-64, same as gitbot-fleet#148) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent fd6a53a commit 0a319f6

14 files changed

Lines changed: 2282 additions & 19 deletions

File tree

.gitmodules

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -52,18 +52,3 @@
5252
[submodule "v-ecosystem/v-rest"]
5353
path = v-ecosystem/v-rest
5454
url = git@github.com:hyperpolymath/v-rest.git
55-
[submodule "rescript-ecosystem/rescript"]
56-
path = rescript-ecosystem/rescript
57-
url = git@github.com:hyperpolymath/rescript.git
58-
[submodule "rescript-ecosystem/rescript-evangeliser"]
59-
path = rescript-ecosystem/rescript-evangeliser
60-
url = git@github.com:hyperpolymath/rescript-evangeliser.git
61-
[submodule "rescript-ecosystem/rescript-tea"]
62-
path = rescript-ecosystem/rescript-tea
63-
url = git@github.com:hyperpolymath/rescript-tea.git
64-
[submodule "rescript-ecosystem/rescript-string-power"]
65-
path = rescript-ecosystem/rescript-string-power
66-
url = git@github.com:hyperpolymath/rescript-string-power.git
67-
[submodule "rescript-ecosystem/idaptik-rescript13-staging"]
68-
path = rescript-ecosystem/idaptik-rescript13-staging
69-
url = git@github.com:hyperpolymath/idaptik-rescript13-staging.git

rescript-ecosystem/MIGRATION.adoc

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
// SPDX-License-Identifier: PMPL-1.0-or-later
2+
// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>
3+
= rescript-ecosystem — Consolidation Migration Record
4+
:toc:
5+
6+
== Status
7+
8+
Estate language policy: RS/TS/JS → AffineScript → typed-wasm. This
9+
monorepo is the **structural consolidation target** for scattered
10+
hyperpolymath ReScript (estate handover Item #12). It is *distinct* from:
11+
12+
* The CI-text guidance sweep (handover Item 9 — complete 2026-05-17).
13+
* The ReScript→AffineScript port (Epic #7 / Item #8) — blocked on
14+
`affinescript#61–64`. **Do not hand-port ReScript ahead of the
15+
compiler.**
16+
17+
== Mechanism (authoritative, ruled 2026-05-17)
18+
19+
**In-tree, history-preserving relocation. NOT git submodules.**
20+
21+
A prior session left a half-finished submodule approach: five
22+
`rescript-ecosystem/*` stanzas in the parent `developer-ecosystem`
23+
`.gitmodules` that did *not* correspond to gitlinks (the directories were
24+
already tracked in-tree, git mode `100644`, with empty
25+
`git submodule status`). Those orphan stanzas have been removed; the
26+
directories remain in-tree content. This is the canonical mechanism going
27+
forward, mirroring the `v-ecosystem` precedent.
28+
29+
Per policy `reference-rescript-ecosystem-policy`:
30+
31+
* Per-repo move; **delete from source only after the add here is
32+
merged/verified** (reversible until merge).
33+
* Preserve FFI / proven adapters *outside* the aggregate as
34+
`connectors/` (see link:connectors/README.adoc[]).
35+
* Footgun: never bare-delete a source tree without moving it.
36+
37+
== Physical state (2026-05-17)
38+
39+
Consolidation is **partial**. ~6,361 real `.res` files present.
40+
41+
[cols="2,1,3"]
42+
|===
43+
| Location | `.res` | Note
44+
45+
| `rescript/` (top-level) | 2985 | Largest; not yet grouped
46+
| `idaptik-rescript13-staging/` | 176 | Top-level staging
47+
| `cadre-router/` | 54 | Top-level
48+
| `rescript-tea/` (top-level) | 27 | **Duplicated** vs `packages/web/tea` (14) — reconcile
49+
| `rescript-evangeliser/` + `packages/tooling/evangeliser/` | 14+14 | **Duplicated** — reconcile
50+
| `packages/core/poly-core` | 7 | Populated
51+
| `packages/web/full-stack`, `packages/bindings/postgres`, `ppx-proven-record/`, `rescript-deno-starter/`, `rescript-vite-config/` | 0 | Empty scaffolds awaiting source
52+
|===
53+
54+
Open structural debt: dedupe top-level packages into `packages/<group>/`;
55+
populate or remove the empty scaffolds; resolve the README target-vs-actual
56+
gap (README now flagged as target layout, not completed state).
57+
58+
== Package: rescript-tea (origin → target)
59+
60+
*Origin:* https://github.com/hyperpolymath/rescript-tea (standalone repo,
61+
clean, on `main`, fully pushed).
62+
*Target:* `rescript-ecosystem/rescript-tea/` (in-tree, committed).
63+
64+
This package is **left to this monorepo** as the canonical ReScript TEA
65+
home. Ongoing ReScript TEA work happens here, not in the standalone repo.
66+
67+
=== Two-way divergence — RECONCILIATION REQUIRED (not done)
68+
69+
The source repo and this copy diverged in **both** directions; neither is
70+
a superset. The standalone source repo has therefore **NOT** been retired
71+
(would be irreversible loss). No ReScript toolchain was available in the
72+
consolidating session to validate a semantic merge.
73+
74+
Per-module divergence (lines, source ↔ here):
75+
76+
[cols="2,1,1,3"]
77+
|===
78+
| Module | source | here | Disposition
79+
80+
| `src/Tea_Sub.{res,resi}` | 405/99 | 201/51 | source far ahead — needs merge review
81+
| `src/Tea_Http.{res,resi}` | 388 | 268 (`src/tea/`) | diverged — merge review
82+
| `src/Tea_Json.{res,resi}` | 354 | 362 | **here ahead** — keep here, port source deltas
83+
| `src/Tea_Html`, `Tea_App`, `Tea_Cmd`, `Tea`, `Tea_Test` | larger | smaller | diverged — per-module merge review
84+
| `src/Tea_Layout.{res,resi}` | present | ABSENT | **brought forward** (lossless, additive)
85+
| `test/Tea_Cmd_test.res`, `test/Tea_Json_test.res` | present | ABSENT | **brought forward** (validate vs canonical modules)
86+
| `examples/02_http/`, `examples/03_swot_dashboard/` | present | ABSENT | **brought forward**
87+
|===
88+
89+
This copy additionally carries ~18 Tea modules under `src/tea/`
90+
(Animationframe, Debug, Keyboard, Mouse, Render, Ssr, Svg, Time, Vdom,
91+
Window, …) that do not exist in the standalone source — i.e. this copy is
92+
the richer base for those.
93+
94+
Source-only governance/metadata forms (`.machines_readable/6scm/*.scm`,
95+
old `.adoc` duplicates) are **intentionally not** carried forward — the
96+
canonical RSR/a2ml scaffold here supersedes them (SCM→a2ml policy).
97+
98+
=== Exit criteria for retiring the standalone rescript-tea repo
99+
100+
. Per-module semantic merge of the diverged `src/*` (toolchain-validated).
101+
. Brought-forward tests/examples compile against the canonical modules.
102+
. Resolve the `rescript-tea` ↔ `packages/web/tea` duplication.
103+
. Then, and only then: per-repo retirement of
104+
https://github.com/hyperpolymath/rescript-tea (reversible until that PR
105+
merges).
106+
107+
== Go-forward: affinescript-tea
108+
109+
Per estate policy, the **successor to rescript-tea is `affinescript-tea`**
110+
(an AffineScript TEA implementation), not continued ReScript TEA feature
111+
work. `affinescript-tea` does not yet exist and **must not be hand-ported
112+
now** — it is blocked on the same primitives as `gitbot-fleet#148`:
113+
`affinescript#61` (`Http.fetch`), `#62` (`Promise`), `#63` (`Json`),
114+
`#64` (`Dict`). `rescript-tea` here is the consolidated *legacy* base and
115+
the reference for the eventual mechanical port. See
116+
link:rescript-tea/SUCCESSOR.adoc[rescript-tea/SUCCESSOR.adoc].
117+
118+
== Next steps
119+
120+
. Per-module reconcile + retire standalone `rescript-tea` (above).
121+
. Dedupe top-level packages into `packages/<group>/`; populate/remove
122+
empty scaffolds.
123+
. Continue per-repo consolidation of remaining scattered ReScript
124+
(estate: `repos` ~1838, `hyperpolymath-archive` 208, `reposystem` 78
125+
`.res` — `gitbot-fleet` is **blocked by gitbot-fleet#148**, do not move).
126+
. Note: parent `developer-ecosystem/.gitmodules` still carries
127+
`v-ecosystem/*` stanzas with the same orphan pattern — out of scope
128+
here, flagged for the v-ecosystem owner.

rescript-ecosystem/README.adoc

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,39 @@ Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
44
:toc: macro
55
:toclevels: 3
66

7-
Consolidated monorepo for all hyperpolymath ReScript packages. 26 packages organized into 5 groups: core libraries, web frameworks, service bindings, FFI bridges, and developer tooling.
7+
Consolidation monorepo for hyperpolymath ReScript packages. The target
8+
layout is 5 groups (core, web, bindings, FFI, tooling) plus standalone
9+
top-level packages; consolidation is **in progress, not complete**.
810

911
toc::[]
1012

1113
== Overview
1214

13-
This monorepo consolidates 26 previously-separate ReScript repositories into a single, cohesive workspace. Each package retains its own `rescript.json` and can be built independently, but they share a common root for easier cross-package development.
14-
15-
== Package Groups
15+
This monorepo is the destination for previously-separate hyperpolymath
16+
ReScript repositories. Consolidation is a live, partial migration — *not*
17+
a finished state:
18+
19+
* Some `packages/*` entries are populated (e.g. `core/poly-core`,
20+
`web/tea`, `tooling/evangeliser`); others are empty scaffolds
21+
(e.g. `web/full-stack`, `bindings/postgres`) awaiting their source.
22+
* Several large packages currently live as top-level directories
23+
(`rescript/`, `idaptik-rescript13-staging/`, `cadre-router/`,
24+
`rescript-tea/`, …) and are *not yet* deduplicated into `packages/`.
25+
Note `rescript-tea` currently exists **both** top-level and as
26+
`packages/web/tea` — a known duplication pending reconciliation.
27+
* The mechanism is **in-tree, history-preserving relocation** (not git
28+
submodules). Source repos are retired only *after* their content is
29+
merged and verified here (reversible until then).
30+
31+
For authoritative per-package origin, status, and outstanding
32+
reconciliation work, see link:MIGRATION.adoc[MIGRATION.adoc]. For the
33+
community/transfer position see link:TRANSFER.adoc[TRANSFER.adoc].
34+
35+
== Package Groups (target layout)
36+
37+
NOTE: The tables below describe the *target* organization. Presence here
38+
does not imply the package is fully populated — consult
39+
link:MIGRATION.adoc[MIGRATION.adoc] for actual state.
1640

1741
=== Core (`packages/core/`)
1842

rescript-ecosystem/TRANSFER.adoc

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
// SPDX-License-Identifier: PMPL-1.0-or-later
2+
= ReScript Ecosystem — Community Transfer Bundle
3+
Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
4+
:toc:
5+
:toc-placement: preamble
6+
7+
This document describes the hyperpolymath ReScript work consolidated in
8+
`developer-ecosystem/rescript-ecosystem/` and its transfer position,
9+
following the estate language-consolidation decision (RS/TS/JS →
10+
AffineScript → typed-wasm).
11+
12+
== Background
13+
14+
ReScript was used across the hyperpolymath estate for web (TEA), routing,
15+
bindings, and tooling. The estate is standardising on AffineScript; the
16+
ReScript corpus is being (a) structurally consolidated here and (b)
17+
mechanically migrated to AffineScript once the compiler primitives land
18+
(`affinescript#61–64`). Retiring ReScript is an ecosystem-fit decision —
19+
too many parallel front-end stacks — not a judgement on ReScript.
20+
21+
This consolidation is **in progress, not complete**. See
22+
link:MIGRATION.adoc[MIGRATION.adoc] for authoritative per-package state.
23+
24+
== Packages offered
25+
26+
The most transferable, self-contained pieces (each retains its own
27+
`rescript.json` and builds independently):
28+
29+
=== rescript-tea
30+
31+
The Elm Architecture for ReScript. Consolidated base lives at
32+
`rescript-ecosystem/rescript-tea/` with a broad module surface
33+
(`src/tea/`: App, Cmd, Sub, Html, Json, Http, Vdom, Ssr, Svg, Time,
34+
Keyboard, Mouse, Window, Animationframe, Debug, Render, Test). A
35+
standalone upstream repo (https://github.com/hyperpolymath/rescript-tea)
36+
still exists and has diverged; reconciliation is tracked in MIGRATION.adoc
37+
and the standalone repo is **not yet retired**.
38+
39+
=== Other consolidated packages
40+
41+
`cadre-router`, `cadre-tea-router`, `rescript-evangeliser`,
42+
`rescript-string-power`, `rescript-vite`, `rescript-dom-mounter`,
43+
`idaptik-rescript13-staging`, and the `packages/{core,web,bindings,ffi,
44+
tooling}/*` groups. Population is uneven (some empty scaffolds) — consult
45+
MIGRATION.adoc before depending on any single package.
46+
47+
== FFI / proven adapters
48+
49+
ReScript↔native adapters and proven FFI seams are preserved **outside**
50+
the aggregate as connectors — see link:connectors/README.adoc[]. They are
51+
deliberately not folded into the package tree so consumers can depend on
52+
the seam without the whole monorepo.
53+
54+
== Successor
55+
56+
Forward TEA development moves to `affinescript-tea` (AffineScript), once
57+
`affinescript#61–64` land. The ReScript corpus here is the legacy base
58+
and the reference for the mechanical port.
59+
60+
== Transfer Terms
61+
62+
All work here is offered under **PMPL-1.0-or-later**. PMPL-1.0-or-later is
63+
the primary stated licence; until it achieves formal legal recognition,
64+
MPL-2.0 is the automatic operative fallback — no separate request needed.
65+
If an explicit OSI-approved identifier is required for a package registry,
66+
MPL-2.0 is available on request. Code is functional and documented where
67+
noted; population and reconciliation status is per MIGRATION.adoc.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// SPDX-License-Identifier: PMPL-1.0-or-later
2+
= rescript-ecosystem connectors
3+
:toc:
4+
5+
== Purpose
6+
7+
Per `reference-rescript-ecosystem-policy` and the `v-ecosystem`
8+
precedent, ReScript↔native **FFI / proven adapters are preserved here,
9+
outside the aggregate package tree**.
10+
11+
Rationale: a consumer that only needs the FFI seam (e.g. a proven FFI
12+
adapter, a Zig/WASM bridge) must be able to depend on the connector
13+
without pulling the entire `rescript-ecosystem` monorepo. Folding adapters
14+
into `packages/*` would couple the seam to the aggregate.
15+
16+
== Status
17+
18+
Scaffold. No adapters relocated yet. As per-repo consolidation proceeds
19+
(see link:../MIGRATION.adoc[MIGRATION.adoc]), proven-FFI / native-bridge
20+
adapters discovered in source repos are moved here — *not* into
21+
`packages/` — with their origin recorded in MIGRATION.adoc.
22+
23+
== Layout (target)
24+
25+
----
26+
connectors/
27+
├── <name>/ # one dir per preserved adapter
28+
│ ├── README.adoc # origin repo + seam description
29+
│ └── … # adapter sources (in-tree, history-preserving)
30+
└── README.adoc # this file
31+
----
32+
33+
== Not in scope
34+
35+
Application code, framework packages, and bindings belong in
36+
`packages/<group>/` or as top-level packages, not here. Connectors are
37+
strictly the FFI/proven-adapter seams.
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// SPDX-License-Identifier: PMPL-1.0-or-later
2+
= rescript-tea — Successor Notice
3+
:toc:
4+
5+
== This package is the consolidated *legacy* base
6+
7+
`rescript-ecosystem/rescript-tea/` is the canonical, consolidated home
8+
for the ReScript Elm Architecture. It is **left to this monorepo**: any
9+
ReScript TEA changes happen here, not in the standalone
10+
https://github.com/hyperpolymath/rescript-tea repo (which has diverged and
11+
is pending reconciliation + retirement — see
12+
link:../MIGRATION.adoc[../MIGRATION.adoc]).
13+
14+
== Go-forward: affinescript-tea
15+
16+
Per estate language policy (RS/TS/JS → AffineScript → typed-wasm), the
17+
**successor is `affinescript-tea`** — an AffineScript TEA implementation.
18+
New TEA feature work targets `affinescript-tea`, not continued ReScript
19+
feature work here.
20+
21+
=== Do not hand-port yet
22+
23+
`affinescript-tea` does **not** exist and must **not** be hand-translated
24+
ahead of the compiler. It is blocked on the same primitives as
25+
`gitbot-fleet#148`:
26+
27+
* `affinescript#61` — `Http.fetch`
28+
* `affinescript#62` — `Promise`
29+
* `affinescript#63` — `Json`
30+
* `affinescript#64` — `Dict`
31+
32+
Until those land, AffineScript cannot express the HTTP/async/JSON/dict
33+
surface TEA relies on. This `rescript-tea` corpus is the reference for the
34+
eventual **mechanical** port. Manual ports would diverge from it, need
35+
redoing, and risk silent semantic drift.
36+
37+
=== Exit
38+
39+
Create/scaffold `affinescript-tea` when `affinescript#61–64` resolve;
40+
mechanically port from this base; then this package becomes archival.

0 commit comments

Comments
 (0)