Skip to content

A server image loads what it serves - #12

Merged
noha merged 3 commits into
mainfrom
a-server-image-loads-what-it-serves
Sep 21, 2026
Merged

noha merged 3 commits into
mainfrom
a-server-image-loads-what-it-serves

Conversation

@noha

@noha noha commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

BaselineOfHOP declared no groups, so Metacello's default group was every package there is - and apptive-common asks for this baseline without naming one. HOP-Core-Tests, HOP-Extra-Tests and HOP-Roassal therefore travelled into apptive-base, apptive-account and apptive-metabase, none of which serve any of them. Checked in image [a]: it carries HOP-Core-Tests and HOP-Roassal today.

Test classes in a deployed image are not idle. AGTestRunnerHandler hangs under #health in two of those servers and runs the whole suite of any TestCase class it is asked for, which is how a test could empty the Canopy tree a running server serves - the same finding, from the other end.

HOP-Roassal does not belong there twice over: it names RSTreeLayout and its kin, which this baseline never loads, so it has been compiling against undeclared variables wherever it landed. Nothing downstream calls it - no repository under 2denker names a class from any of the three packages, nor HOPNode>>children, #displayLabel or #numberOfChildren, the three the Roassal extension adds.

CI keeps loading everything. 'All' is exactly the package set the baseline had before, and .smalltalk.ston now names it, so the test run is unchanged - without that line the new default would have quietly stopped running the tests.

Resolved in image [a] rather than assumed: default -> Core -> HOP-Core, HOP-Extra; All -> Core, Tests, Roassal; Tests -> the two test packages.

noha and others added 3 commits September 21, 2026 13:03
BaselineOfHOP declared no groups, so Metacello's default group was every package
there is - and apptive-common asks for this baseline without naming one. HOP-Core-Tests,
HOP-Extra-Tests and HOP-Roassal therefore travelled into apptive-base, apptive-account
and apptive-metabase, none of which serve any of them. Checked in image [a]: it carries
HOP-Core-Tests and HOP-Roassal today.

Test classes in a deployed image are not idle. AGTestRunnerHandler hangs under #health
in two of those servers and runs the whole suite of any TestCase class it is asked for,
which is how a test could empty the Canopy tree a running server serves - the same
finding, from the other end.

HOP-Roassal does not belong there twice over: it names RSTreeLayout and its kin, which
this baseline never loads, so it has been compiling against undeclared variables
wherever it landed. Nothing downstream calls it - no repository under 2denker names a
class from any of the three packages, nor HOPNode>>children, #displayLabel or
#numberOfChildren, the three the Roassal extension adds.

CI keeps loading everything. 'All' is exactly the package set the baseline had before,
and .smalltalk.ston now names it, so the test run is unchanged - without that line the
new default would have quietly stopped running the tests.

Resolved in image [a] rather than assumed: default -> Core -> HOP-Core, HOP-Extra;
All -> Core, Tests, Roassal; Tests -> the two test packages.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
My own regression from the commit before, and the CI caught it: HOPRouteHanderWrapperTest
failed on an undeclared NeoJSONWriter, which arrives with JSONSchema.

Without any group, Metacello's default group is everything the baseline mentions, and that
included the two project references. A named group is a list, and a list that leaves them
out leaves them out - so 'Core' loaded HOP-Core and HOP-Extra and neither JSONSchema nor
Zinc, which HOP-Core needs in HOPRequestParameter and in HOPJsonResponseFormatter.

Resolved in image [a]: Core -> JSONSchema, ZincHTTPComponents, HOP-Core, HOP-Extra.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…eline

Norbert, on reading the undeclared NeoJSONWriter in the CI log: we should be using STON
instead. He is right, and the reason is not taste - BaselineOfHOP never declared Neo-JSON
at all. It came along behind JSONSchema, so HOPJsonResponseFormatter worked by accident of
load order, and the first load that did not bring JSONSchema read an undeclared variable.
STON-Core is in the image Pharo ships, so there is nothing to declare.

The wire format does not move. STONJSON toStringPretty: and NeoJSONWriter toStringPretty:
write the same characters for this payload, and each reads the other's output - checked in
image [a] before changing anything. HOP-Core-Tests 25 passed both before and after, and
HOPRouteHanderWrapperTest 3 passed.

HOPTestCase>>parseResponse: reads with STONJSON for the same reason, and HOPCodeTest's
list of valid dependent packages gains STON-Core so it describes what HOP-Core actually
uses. That test begins with #skip, so the list is documentation - but wrong documentation
is worse than none.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@noha
noha merged commit ded0124 into main Sep 21, 2026
4 checks passed
@noha
noha deleted the a-server-image-loads-what-it-serves branch October 5, 2026 07:13
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.

1 participant