Repository navigation
Expand file tree
/
Copy pathgershwin-research.html
More file actions
113 lines (106 loc) · 7.76 KB
/
Copy pathgershwin-research.html
File metadata and controls
113 lines (106 loc) · 7.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
<title>Gershwin Research · Joe Maloney</title>
<style>
body {
font-family: -apple-system, "Helvetica Neue", Helvetica, Arial, sans-serif;
max-width: 760px;
margin: 40px auto;
padding: 0 20px;
color: #222;
line-height: 1.6;
}
header {
border-bottom: 1px solid #ccc;
padding-bottom: 16px;
margin-bottom: 24px;
}
h1 { font-size: 1.8em; margin: 0 0 4px; }
header p { margin: 0; color: #666; }
h2 {
font-size: 1.25em;
margin-top: 2em;
border-bottom: 1px solid #eee;
padding-bottom: 4px;
}
ul { padding-left: 20px; }
li { margin-bottom: 8px; }
a { color: #0366d6; text-decoration: none; }
a:hover { text-decoration: underline; }
.guides li { margin-bottom: 12px; }
.guides .desc { color: #666; font-size: 0.92em; display: block; }
.pill { display: inline-block; font-size: 0.72em; font-weight: 600; padding: 1px 8px;
border-radius: 999px; background: #eee; color: #333; vertical-align: middle; }
.pill-warn { background: #f6e4cb; color: #8a5a00; }
.pill-ok { background: #d8efd8; color: #1f7a1f; }
footer {
margin-top: 3em;
padding-top: 16px;
border-top: 1px solid #eee;
color: #888;
font-size: 0.9em;
}
</style>
</head>
<body>
<header>
<h1>Gershwin Research</h1>
<p><a href="index.html">← Back to home</a> · <a href="https://github.com/gershwin-desktop">github.com/gershwin-desktop</a></p>
</header>
<p>Plans and investigations for the Gershwin desktop — the GNUstep-based, Apple-style userland that runs on FreeBSD, NextBSD, and Linux. Installer, live-ISO, and component work for <code>gershwin-desktop/gershwin-components</code> and friends.</p>
<h2>Installer</h2>
<ul class="guides">
<li>
<a href="gershwin-installer-backends-plan.html?v=20260621">Installer backends — Linux fix, NextBSD backend, FreeBSD reorganization <span class="pill pill-warn">Plan ready</span></a>
<span class="desc">The InstallationAssistant offers two methods — <em>Clone running system to disk</em> and <em>Image based installation</em> — but on Linux both fail while FreeBSD mostly works. A 4-agent investigation root-causes it: the deployed <code>installer-linux.sh</code> drifted from source and lost <code>--check-image-source</code> (so the image radio never appears), image detection only matches <code>iso9660</code> (misses Debian’s <code>/run/live/medium</code>), and the clone path installs the bootloader via <code>chroot grub-install</code>/<code>update-grub</code> which needs grub+initramfs inside the copied tree (FreeBSD instead copies <code>loader.efi</code> + <code>efibootmgr</code>). Also surfaces a latent NextBSD bug: the ostype rebrand makes the boolean <code>IAIsFreeBSD()</code> misclassify NextBSD as Linux. Plan: a dispatcher + per-OS modules with proper names (out of the <code>/System/Library/Scripts</code> junk drawer), an explicit <code>--method</code> flag, a 3-way platform resolver, a first-class NextBSD backend (launchd, label-based UFS <code>ROOTFS</code>, kextd autoload, configd/hostnamed identity), and a shared first-boot identity reset (machine-id, SSH host keys, stable fstab).</span>
</li>
<li>
<a href="gershwin-native-installer-backend-plan.html?v=20260514">Native installer backend — <code>Copier.framework</code></a>
<span class="desc">Replacing the shell file-walker with a native Objective-C copier framework for the clone/image pipeline.</span>
</li>
</ul>
<h2>Live ISO</h2>
<ul class="guides">
<li>
<a href="gershwin-livecd-unionfs-plan.html?v=20260514">Live-ISO unionfs plan</a>
<span class="desc">Read-only squashfs/uzip + writable tmpfs union; how the live session is flattened on install, and the dropped-binaries / avahi-corruption traps.</span>
</li>
<li>
<a href="gershwin-livecd-launchd-plan.html?v=20260514">Live-ISO launchd plan</a>
<span class="desc">Booting the Gershwin live ISO under launchd.</span>
</li>
<li>
<a href="gershwin-on-nextbsd-iso-pipeline-plan.html?v=20260514">Gershwin-on-NextBSD ISO pipeline</a>
<span class="desc">Building the Gershwin live/install ISO on the NextBSD base.</span>
</li>
</ul>
<h2>Components & CI</h2>
<ul class="guides">
<li>
<a href="gershwin-automated-testing.html?v=20260719">Native automated testing — every category, options & gaps <span class="pill">Survey</span></a>
<span class="desc">What native mechanism covers each layer of testing for a GNUstep/AppKit stack — unit, integration, functional, UI, acceptance/BDD, system/smoke, regression — from a multi-agent survey plus a live read of the ISO test scripts. Answers directly: <b>UnitKit</b> and the GNUstep <b>Testing</b> framework (<code>make check</code>) cover <em>unit/integration</em>; <b>StepTalk</b> and <b>Distributed Objects</b> are <em>functional/integration drivers</em> that script a running app; UI/acceptance/visual-regression have <b>no native tooling</b> because GNUstep’s <code>NSAccessibility</code> is a stub with no AT-SPI bridge (so LDTP/Dogtail are blocked and “read the screen” is a pixel/OCR problem). Documents how the <code>gershwin-on-nextbsd</code> QEMU screenshot gate works today (monitor <code>sendkey</code>/<code>screendump</code> + colour-count + tesseract OCR, gating publish). Proposes a native <b>Gherkin/BDD</b> framework (Frank/Calabash-style in-app TestAgent that walks the view tree — routing around the missing a11y — driven by <code>godog</code>), and a full-pyramid strategy that runs in GitHub Actions and locally.</span>
</li>
<li>
<a href="gershwin-iso-monorepo-consolidation-plan.html?v=20260719">Consolidating the five ISO builders into one repo <span class="pill pill-warn">Decision doc</span></a>
<span class="desc">Should <code>gershwin-on-{debian,freebsd,arch,devuan,nextbsd}</code> collapse into <code>gershwin-desktop/gershwin-desktop</code>? A 3-agent live read of all five repos, the shared <code>checkout.sh</code>, the release inventory, and GitHub’s 2026 limits. Finds two build families (Linux-container vs FreeBSD-VM) that want <em>two</em> reusable workflows, not one matrix; NextBSD’s QEMU boot+colour-count+OCR screenshot test is the gate to spread to every target (release <code>needs: [build, test]</code>). Real constraints are the <b>2 GiB-per-asset cap</b> (Arch already at 1.91 GiB) and the one-time history migration — <em>not</em> storage (release assets are unquota’d) or concurrency (the 20-job ceiling is already org-wide across all five repos, so mono vs split is a wash). Answers the rolling-tag question directly: per-target <code>continuous-<distro></code> tags, ~10–15 GiB live, self-cleaning once every target moves off <code>uploadtool</code> to <code>gh release delete+create</code> (which is what’s letting Devuan’s tag leak today). Plus the ~15-line <code>checkout.sh</code> custom-branch change that unblocks the future second job, and a 3-way alternatives table (monorepo / hub-repo / unified dispatcher) with a de-risked rollout order.</span>
</li>
<li>
<a href="gershwin-windowmanager-qa-plan.html?v=20260514">WindowManager QA plan</a>
<span class="desc">QA strategy for the Gershwin WindowManager.</span>
</li>
<li>
<a href="gershwin-developer-nextbsd-ci-plan.html?v=20260514">gershwin-developer NextBSD CI plan</a>
<span class="desc">CI for the gershwin-developer image on the NextBSD pipeline.</span>
</li>
</ul>
<footer>
<p>Joe Maloney · <a href="index.html">Home</a></p>
</footer>
</body>
</html>