REPL.5 — Batch-mode & cold-start spike: AppCDS lever SHIPPED (#163 fix 3) - #170
Draft
fupelaqu wants to merge 1 commit into
Draft
REPL.5 — Batch-mode & cold-start spike: AppCDS lever SHIPPED (#163 fix 3)#170fupelaqu wants to merge 1 commit into
fupelaqu wants to merge 1 commit into
Conversation
…tch amortization docs (REPL.5 spike) Time-boxed spike #163 fix 3 — measured first, shipped what measured well: - launcher CDS block, bundle-gated via install-time baked CDS_BUNDLE (${USE_BUNDLE:-false} — inert until REPL.4 merges; plain/--no-extensions installs stay byte-identical on every JDK incl. 19+) - generate_cds_archive(): install-time dynamic archive (JDK 13-18, bare-jar -cp, -c "help" workload, no ES needed), set -e-hardened, success requires the .jsa to exist; JDK 19+ self-serves via -XX:+AutoCreateSharedArchive (verified: runtime dump works despite the literal lib/* wildcard) - AppCDS status line in installer summary + VERSION - docs: Cold-start & batch invocation cost (-f/;-split amortization ≈9-12ms marginal per statement; AppCDS automatic on bundle installs, JDK 13+) Measured (median of 5, Zulu 17.0.11, es8 -all bundle, warm ES 8.18.3): -c SELECT 1.924s -> 1.525s (-20.7%), prompt-and-exit 1.305s -> 0.926s, JOIN 3.187s -> 2.729s; JDK 21: 1.784s -> 1.313s. JDK 11: no flags, identical. Version bumped to 0.20.2-SNAPSHOT (shared REPL.x line — expect trivial build.sbt conflict with sibling REPL PRs). Merge order: REPL.2 -> REPL.4 -> REPL.5 (this lands LAST). Closed Issue #163 Refs #169 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This was referenced Jul 30, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Story REPL.5 (epic REPL Hardening — LAST story, closes the epic's #163 chain)
Time-boxed spike: measurement matrix first, AppCDS lever second, explicit ship decision third. The spike ran GO (residual warm batch overhead ≈1.9s on the
-allinstall ≥ the 1.5s trigger) and the lever measured above the ship bar, so it shipped.Measurements (median of 5 + discarded prime, Zulu 17.0.11, docker ES 8.18.3 :19200 warm, es8
-allbundle rebuilt locally from softclient4es-replfeature/REPL.4)-allbundle-cSELECT LIMIT 5-csingle JOIN-f10-statement batchJDK 21 (
AutoCreateSharedArchive): SELECT 1.784s → 1.313s (−26%). JDK 11: no CDS flags, byte-identicalexec javaline (trace-proven). Full matrix + environment + deviations in the story spec's Dev Agent Record.What shipped (install.sh + docs only, zero Scala)
EXTRA_OPTSandLOGBACK_OPTS, bundle-gated via the install-time bakedCDS_BUNDLE=${USE_BUNDLE:-false}(the one deliberately unescaped$in the heredoc). Plain/--no-extensionsinstalls are byte-identical in behaviour on every JDK incl. 19+ (verified: no flags, nocache/).generate_cds_archive()— install-time dynamic archive for JDK 13-18 (bare-jar-cp,-c "help"workload, needs no ES, 1.9s),set -e-hardened, success requires the.jsato exist (an unwritable path still exits 0); JDK 19+ self-serves at runtime. Failure = warn-and-continue (verified with an unwritablecache/).AppCDS:line in installer summary + VERSION.documentation/client/repl.md—-f/;-split batching is the recommended scripted shape (PD-2).Empirical checkpoints (spec OQ-2/OQ-3, all resolved)
[jar, jar](bundle jar duplicated vialib/*) validates against dump-time[jar].AutoCreateSharedArchivecreates and maps the archive despite the literallib/*wildcard in-cp— the java launcher expands*before the VM sees it. The-cp "$JAR_FILE"fallback was never needed; REPL.4's duplicate-classpath guidance (its Task 2.6) stands unmodified.Coordination (IMPORTANT — merge order)
Merge sequence: REPL.2 (#165) → REPL.4 (#167) → this PR LAST. The launcher block reads REPL.4's
USE_BUNDLE(Task 2.2); until REPL.4 merges,${USE_BUNDLE:-false}keeps everything inert (verified on this branch, which is offmain). Expected trivialbuild.sbtversion-line conflict with #164/#165/#166/#167 (all bump 0.20.1 → 0.20.2-SNAPSHOT). After each rebase:bash -n install.sh+ a scratch install.Incidental finding (pre-existing, NOT fixed here — candidate follow-up issue)
The published 0.20.1 plain cli assembly fails every query on JDK 21:
InetAddressResolverProvider: DnsjavaInetAddressResolverProvider not found(services-merge keeps dnsjava's registration, class absent; JDK 18+ consults the SPI). Reproduced without this branch's changes; the-allbundle is unaffected. Should ride 0.20.2 together with #168.Deferred (recorded): PD-5 softclient4es-web mirror — the site has no REPL page (same deferral as REPL.4).
Closes #163 · Refs #169 (epic)
🤖 Generated with Claude Code
Refs #171 — the JDK 18+/21 plain-cli resolver-SPI failure described above, now filed (with #172, both riding 0.20.2 alongside #168).