The Introduction taught a dead IDE menu, an iTunes walkthrough and 2018 statistics - #5671

Merged
shai-almog merged 4 commits into
devguide-guardsfrom
devguide-introduction
Sep 2, 2026
Merged

The Introduction taught a dead IDE menu, an iTunes walkthrough and 2018 statistics#5671
shai-almog merged 4 commits into
devguide-guardsfrom
devguide-introduction

Conversation

@shai-almog

Copy link
Copy Markdown
Collaborator

Fourth PR in the developer-guide stack. Six corrections to the chapter a new developer reads first.

whatwhy it was wrong
JavaScript translationThe overview said TeaVM did the translation; the port section further down said ParparVM with TeaVM as a fallback. The port section is right — javascript.port is declared with parparvm as its default and teavm documented as "the original builder as a compatibility fallback".
http://teavm.org:[...]The stray colon made the macro a bare host, and the site serves TLS. Removed from the link ratchet, now 37.
BitcodeCited as something ParparVM absorbed without modification. Apple has since withdrawn bitcode — which makes the future-proofing point better than the arrival did — so the sentence now names both moves.
Device fragmentationRested on two 2018 Android share figures, followed by a sentence conceding they would be stale on arrival. The structural claim survives without them.
iOS developer feeDated with "for 10 years at the time of this writing".
UDIDWalked the reader through iTunes, which has not existed on macOS since Catalina. The screenshot also exposed a real device serial and UDID. signing.asciidoc already gives the current answer (Finder device summary, Apple Configurator), so this now cross-references it.
Device build"a right click away" via the IDE plugin, illustrated by a menu still offering Blackberry, J2ME and Windows Phone builds. Replaced with cn1:buildAndroid / cn1:buildIos, names taken from the mojo definitions rather than from prose.

Both dead screenshots are deleted in the same commit, so find_unused_images.py stays satisfied.

Two items the plan listed for this chapter turned out not to need work: the <<ApplicationLifecycle>> sidebar already exists (written earlier in this stack), and the malformed stackoverflow host is no longer present.

Verification

asciidoctor --failure-level WARN, Vale at suggestion level, LanguageTool (status: ok, 0 matches — run under JDK 17 rather than the JDK 8 path that reports a false green), paragraph capitalization, snippet validation, xrefs, structure, links and missing-code-blocks: all clean.

🤖 Generated with Claude Code

@chatgpt-codex-connector

chatgpt-codex-connectorBot commented Sep 2, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

ReviewStatusCommitReview trigger
📝 Code ReviewCompleted2026-09-02T15:37:31.325757Z18cc667New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:16bbebc80f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threaddocs/developer-guide/Introduction.asciidoc Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:cc57d1cfd6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threaddocs/developer-guide/Working-With-Windows.asciidoc
@github-actions

github-actionsBot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Developer Guide build artifacts are available for download from this workflow run:

Developer Guide quality checks:

  • AsciiDoc linter: No issues found (report)
  • Vale: No alerts found (report)
  • Paragraph capitalization: No paragraph capitalization issues (report)
  • LanguageTool: No grammar matches (report)
  • Image references: No unused images detected (report)

@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from ae956d3 to eecf05dCompareSeptember 2, 2026 11:58
@github-actions

Copy link
Copy Markdown
Contributor

Cloudflare Preview

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:dd501cd3aa

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threaddocs/developer-guide/Working-With-Windows.asciidoc
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from eecf05d to f81e4b1CompareSeptember 2, 2026 12:16
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from f81e4b1 to 335a54aCompareSeptember 2, 2026 12:29
@shai-almog

shai-almog commented Sep 2, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 151 screenshots: 151 matched.

Native Android coverage

  • 📊 Line coverage: 9.10% (9017/99118 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 8.88% (46522/523733), branch 3.50% (1739/49629), complexity 3.48% (1842/52924), method 5.34% (1487/27841), class 10.74% (400/3723)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6367 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.ClassReader – 0.00% (0/1524 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1187 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.MethodWriter – 0.00% (0/922 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/736 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • okio.okio.Buffer – 0.00% (0/687 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/625 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.Frame – 0.00% (0/570 lines covered)

✅ Native Android screenshot tests passed.

Native Android coverage

  • 📊 Line coverage: 9.10% (9017/99118 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 8.88% (46522/523733), branch 3.50% (1739/49629), complexity 3.48% (1842/52924), method 5.34% (1487/27841), class 10.74% (400/3723)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6367 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.ClassReader – 0.00% (0/1524 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1187 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.MethodWriter – 0.00% (0/922 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/736 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • okio.okio.Buffer – 0.00% (0/687 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/625 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.Frame – 0.00% (0/570 lines covered)

Benchmark Results

Detailed Performance Metrics

MetricDuration
SIMD kernel backendscalar fallback (no native SIMD)
SIMD int-add (64K x300)java 135ms / native 106ms = 1.2x speedup
SIMD float-mul (64K x300)java 94ms / native 64ms = 1.4x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathgated to scalar (CPU autovectorizes scalar; explicit SIMD not beneficial here)
Base64 CN1 encode54.000 ms
Base64 CN1 decode66.000 ms
Base64 native encode359.000 ms
Base64 encode ratio (CN1/native)0.150x (85.0% faster)
Base64 native decode291.000 ms
Base64 decode ratio (CN1/native)0.227x (77.3% faster)
Image encode benchmark statusskipped (SIMD unsupported)

@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from 335a54a to f915089CompareSeptember 2, 2026 13:06
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from f915089 to f0f0e4eCompareSeptember 2, 2026 13:21
@shai-almog

shai-almog commented Sep 2, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 181 screenshots: 181 matched.
✅ JavaScript-port screenshot tests passed.

@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from f0f0e4e to facd9edCompareSeptember 2, 2026 14:16
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from facd9ed to 15e0c1eCompareSeptember 2, 2026 14:42
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from 15e0c1e to 815afcfCompareSeptember 2, 2026 15:02
Base automatically changed from devguide-figure-harness to devguide-guardsSeptember 2, 2026 15:21
@shai-almog
shai-almogforce-pushed the devguide-introduction branch 3 times, most recently from bca6854 to ae6bbdfCompareSeptember 2, 2026 15:26
shai-almogand others added 2 commits September 2, 2026 18:35
…18 statistics
Six corrections to the chapter a new developer reads first:
* The JavaScript target was described twice and contradicted itself: the
overview said TeaVM did the translation, the port section said ParparVM with
TeaVM as a fallback. The port section is right -- `javascript.port` is
declared with `parparvm` as its default and `teavm` documented as "the
original builder as a compatibility fallback".
* `http://teavm.org:[TeaVM-based builder]` -- the stray colon made the macro a
bare host, and the site serves TLS. Removed from the link ratchet, which now
stands at 37.
* Bitcode was cited as something ParparVM absorbed without modification. Apple
has since withdrawn bitcode, which makes the point better than the arrival
did, so the sentence now names both moves.
* The device-fragmentation section rested on two 2018 Android share numbers,
followed by a sentence conceding they would be stale on arrival. The
structural claim survives without them.
* The iOS developer fee was dated with "for 10 years at the time of this
writing".
* The UDID instructions walked the reader through iTunes, with a screenshot of
iTunes on iOS 9.3.5 that also exposed a real device serial and UDID. iTunes
has not existed on macOS since Catalina, and the signing chapter already gives
the current answer, so this now points there.
* The device build was "a right click away" via the IDE plugin, illustrated by a
menu still offering Blackberry, J2ME and Windows Phone builds. Replaced with
the `cn1:buildAndroid` and `cn1:buildIos` goals, taken from the mojo names.
Both screenshots are deleted, so find_unused_images.py stays satisfied.
Verified: asciidoctor at --failure-level WARN, Vale at suggestion level,
LanguageTool (status ok, 0 matches, run under JDK 17 rather than the JDK 8
false green), paragraph capitalization, snippets, xrefs, structure, links and
missing-code-blocks all clean.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Review caught the command I had just written. AbstractBuildWrapperMojo.execute()
opens with:
if (!project.isExecutionRoot()) {
getLog().info("Skipping execution for non-root project");
return;
}
and BuildAndroidMojo, BuildIosMojo and BuildWin32Mojo all inherit it unchanged.
Under `-pl common` the selected module is not the execution root, so the goal
logs that line and stops. The design is deliberate -- the wrapper re-invokes
Maven on the root pom itself (`request.setPomFile(new File("pom.xml"))`) -- so
naming a module both skips the wrapper and defeats its purpose.
Measured rather than reasoned, against scripts/hellocodenameone:
mvn -pl common ...:buildWin32 -> "Skipping execution for non-root project"
BUILD SUCCESS, nothing built
mvn ...:buildWin32 -> no skip line, proceeds into the reactor
A silent success is the worst failure mode for a getting-started instruction, so
the Introduction now says where to run it and warns about the module form
explicitly.
Working-With-Windows carried the same `-pl common` shape and is fixed with it --
it is where I copied the form from, so leaving it would reintroduce the defect
the next time someone follows the pattern.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
shai-almogand others added 2 commits September 2, 2026 18:35
Review checked the command this PR documents and found it still builds nothing.
The wrapper passes `codename1.platform` to its nested Maven run, and that
property is what activates the module profile in a generated project's root pom.
The profile is `win`, matching the value the win module itself declares:
<profile><id>win</id>
<activation><property>
<name>codename1.platform</name><value>win</value>
</property></activation>
<modules><module>win</module></modules>
BuildWin32Mojo and BuildWindowsDeviceMojo both passed "windows", which matches no
profile at all. Nothing else in the plugin reads the platform as "windows", so
the value was simply inert: the win module never joined the reactor and the
nested build reported success having produced no Windows binary. Every other
wrapper already agrees with its profile -- android, ios, javascript, linux and
javase all match -- so these two were the only ones out of step.
Verified by A/B against scripts/hellocodenameone, reading the NESTED reactor
rather than the outer one:
before hellocodenameone, -common, -javase <- no win module
after hellocodenameone, -common, -win
The build TARGET is a separate namespace and stays "windows-device"
(Executor.BUILD_TARGET_WINDOWS_NATIVE), which is correct.
SpotBugs over codenameone-maven-plugin regenerated: 0 findings.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…lost
Fixing BuildWin32Mojo made the sentence beside this snippet false: the goal now
submits a build, while the command the chapter leads with still could not. It
carried both defects at once --
mvn -pl common package -Dcodename1.platform=windows ...
-- `-pl common` builds that module instead of the reactor, so the win module is
never reached, and `windows` matches no profile even when the reactor is whole.
The two mistakes hid each other: with only the module selected, the platform
value had nothing left to activate.
Corrected to what the wrapper actually runs, read off AbstractBuildWrapperMojo:
goal `package`, `codename1.platform=win`, `codename1.buildTarget=windows-device`,
from the project root.
A/B against scripts/hellocodenameone, reading the reactor, which Maven prints
before it compiles:
old no win module in the reactor at all
new hellocodenameone, -common, -win
Both invocations then fail identically on this machine with "invalid target
release: 17", because tools/env.sh pins JDK 8 while the demo targets 17. That is
environmental and equal on both sides, so it does not affect the comparison.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@shai-almog
shai-almog merged commit a9c0b73 into devguide-guardsSep 2, 2026
6 of 19 checks passed
@shai-almog
shai-almog deleted the devguide-introduction branch September 2, 2026 15:38
Sign up for freeto 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

@shai-almog
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

The Introduction taught a dead IDE menu, an iTunes walkthrough and 2018 statistics - #5671

Merged
shai-almog merged 4 commits into
devguide-guardsfrom
devguide-introduction
Sep 2, 2026
Merged

The Introduction taught a dead IDE menu, an iTunes walkthrough and 2018 statistics#5671
shai-almog merged 4 commits into
devguide-guardsfrom
devguide-introduction

Conversation

@shai-almog

Copy link
Copy Markdown
Collaborator

Fourth PR in the developer-guide stack. Six corrections to the chapter a new developer reads first.

whatwhy it was wrong
JavaScript translationThe overview said TeaVM did the translation; the port section further down said ParparVM with TeaVM as a fallback. The port section is right — javascript.port is declared with parparvm as its default and teavm documented as "the original builder as a compatibility fallback".
http://teavm.org:[...]The stray colon made the macro a bare host, and the site serves TLS. Removed from the link ratchet, now 37.
BitcodeCited as something ParparVM absorbed without modification. Apple has since withdrawn bitcode — which makes the future-proofing point better than the arrival did — so the sentence now names both moves.
Device fragmentationRested on two 2018 Android share figures, followed by a sentence conceding they would be stale on arrival. The structural claim survives without them.
iOS developer feeDated with "for 10 years at the time of this writing".
UDIDWalked the reader through iTunes, which has not existed on macOS since Catalina. The screenshot also exposed a real device serial and UDID. signing.asciidoc already gives the current answer (Finder device summary, Apple Configurator), so this now cross-references it.
Device build"a right click away" via the IDE plugin, illustrated by a menu still offering Blackberry, J2ME and Windows Phone builds. Replaced with cn1:buildAndroid / cn1:buildIos, names taken from the mojo definitions rather than from prose.

Both dead screenshots are deleted in the same commit, so find_unused_images.py stays satisfied.

Two items the plan listed for this chapter turned out not to need work: the <<ApplicationLifecycle>> sidebar already exists (written earlier in this stack), and the malformed stackoverflow host is no longer present.

Verification

asciidoctor --failure-level WARN, Vale at suggestion level, LanguageTool (status: ok, 0 matches — run under JDK 17 rather than the JDK 8 path that reports a false green), paragraph capitalization, snippet validation, xrefs, structure, links and missing-code-blocks: all clean.

🤖 Generated with Claude Code

@chatgpt-codex-connector

chatgpt-codex-connectorBot commented Sep 2, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

ReviewStatusCommitReview trigger
📝 Code ReviewCompleted2026-09-02T15:37:31.325757Z18cc667New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:16bbebc80f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threaddocs/developer-guide/Introduction.asciidoc Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:cc57d1cfd6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threaddocs/developer-guide/Working-With-Windows.asciidoc
@github-actions

github-actionsBot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Developer Guide build artifacts are available for download from this workflow run:

Developer Guide quality checks:

  • AsciiDoc linter: No issues found (report)
  • Vale: No alerts found (report)
  • Paragraph capitalization: No paragraph capitalization issues (report)
  • LanguageTool: No grammar matches (report)
  • Image references: No unused images detected (report)

@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from ae956d3 to eecf05dCompareSeptember 2, 2026 11:58
@github-actions

Copy link
Copy Markdown
Contributor

Cloudflare Preview

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:dd501cd3aa

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threaddocs/developer-guide/Working-With-Windows.asciidoc
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from eecf05d to f81e4b1CompareSeptember 2, 2026 12:16
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from f81e4b1 to 335a54aCompareSeptember 2, 2026 12:29
@shai-almog

shai-almog commented Sep 2, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 151 screenshots: 151 matched.

Native Android coverage

  • 📊 Line coverage: 9.10% (9017/99118 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 8.88% (46522/523733), branch 3.50% (1739/49629), complexity 3.48% (1842/52924), method 5.34% (1487/27841), class 10.74% (400/3723)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6367 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.ClassReader – 0.00% (0/1524 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1187 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.MethodWriter – 0.00% (0/922 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/736 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • okio.okio.Buffer – 0.00% (0/687 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/625 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.Frame – 0.00% (0/570 lines covered)

✅ Native Android screenshot tests passed.

Native Android coverage

  • 📊 Line coverage: 9.10% (9017/99118 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 8.88% (46522/523733), branch 3.50% (1739/49629), complexity 3.48% (1842/52924), method 5.34% (1487/27841), class 10.74% (400/3723)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6367 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.ClassReader – 0.00% (0/1524 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1187 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.MethodWriter – 0.00% (0/922 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/736 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • okio.okio.Buffer – 0.00% (0/687 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/625 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.Frame – 0.00% (0/570 lines covered)

Benchmark Results

Detailed Performance Metrics

MetricDuration
SIMD kernel backendscalar fallback (no native SIMD)
SIMD int-add (64K x300)java 135ms / native 106ms = 1.2x speedup
SIMD float-mul (64K x300)java 94ms / native 64ms = 1.4x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathgated to scalar (CPU autovectorizes scalar; explicit SIMD not beneficial here)
Base64 CN1 encode54.000 ms
Base64 CN1 decode66.000 ms
Base64 native encode359.000 ms
Base64 encode ratio (CN1/native)0.150x (85.0% faster)
Base64 native decode291.000 ms
Base64 decode ratio (CN1/native)0.227x (77.3% faster)
Image encode benchmark statusskipped (SIMD unsupported)

@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from 335a54a to f915089CompareSeptember 2, 2026 13:06
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from f915089 to f0f0e4eCompareSeptember 2, 2026 13:21
@shai-almog

shai-almog commented Sep 2, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 181 screenshots: 181 matched.
✅ JavaScript-port screenshot tests passed.

@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from f0f0e4e to facd9edCompareSeptember 2, 2026 14:16
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from facd9ed to 15e0c1eCompareSeptember 2, 2026 14:42
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from 15e0c1e to 815afcfCompareSeptember 2, 2026 15:02
Base automatically changed from devguide-figure-harness to devguide-guardsSeptember 2, 2026 15:21
@shai-almog
shai-almogforce-pushed the devguide-introduction branch 3 times, most recently from bca6854 to ae6bbdfCompareSeptember 2, 2026 15:26
shai-almogand others added 2 commits September 2, 2026 18:35
…18 statistics
Six corrections to the chapter a new developer reads first:
* The JavaScript target was described twice and contradicted itself: the
overview said TeaVM did the translation, the port section said ParparVM with
TeaVM as a fallback. The port section is right -- `javascript.port` is
declared with `parparvm` as its default and `teavm` documented as "the
original builder as a compatibility fallback".
* `http://teavm.org:[TeaVM-based builder]` -- the stray colon made the macro a
bare host, and the site serves TLS. Removed from the link ratchet, which now
stands at 37.
* Bitcode was cited as something ParparVM absorbed without modification. Apple
has since withdrawn bitcode, which makes the point better than the arrival
did, so the sentence now names both moves.
* The device-fragmentation section rested on two 2018 Android share numbers,
followed by a sentence conceding they would be stale on arrival. The
structural claim survives without them.
* The iOS developer fee was dated with "for 10 years at the time of this
writing".
* The UDID instructions walked the reader through iTunes, with a screenshot of
iTunes on iOS 9.3.5 that also exposed a real device serial and UDID. iTunes
has not existed on macOS since Catalina, and the signing chapter already gives
the current answer, so this now points there.
* The device build was "a right click away" via the IDE plugin, illustrated by a
menu still offering Blackberry, J2ME and Windows Phone builds. Replaced with
the `cn1:buildAndroid` and `cn1:buildIos` goals, taken from the mojo names.
Both screenshots are deleted, so find_unused_images.py stays satisfied.
Verified: asciidoctor at --failure-level WARN, Vale at suggestion level,
LanguageTool (status ok, 0 matches, run under JDK 17 rather than the JDK 8
false green), paragraph capitalization, snippets, xrefs, structure, links and
missing-code-blocks all clean.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Review caught the command I had just written. AbstractBuildWrapperMojo.execute()
opens with:
if (!project.isExecutionRoot()) {
getLog().info("Skipping execution for non-root project");
return;
}
and BuildAndroidMojo, BuildIosMojo and BuildWin32Mojo all inherit it unchanged.
Under `-pl common` the selected module is not the execution root, so the goal
logs that line and stops. The design is deliberate -- the wrapper re-invokes
Maven on the root pom itself (`request.setPomFile(new File("pom.xml"))`) -- so
naming a module both skips the wrapper and defeats its purpose.
Measured rather than reasoned, against scripts/hellocodenameone:
mvn -pl common ...:buildWin32 -> "Skipping execution for non-root project"
BUILD SUCCESS, nothing built
mvn ...:buildWin32 -> no skip line, proceeds into the reactor
A silent success is the worst failure mode for a getting-started instruction, so
the Introduction now says where to run it and warns about the module form
explicitly.
Working-With-Windows carried the same `-pl common` shape and is fixed with it --
it is where I copied the form from, so leaving it would reintroduce the defect
the next time someone follows the pattern.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
shai-almogand others added 2 commits September 2, 2026 18:35
Review checked the command this PR documents and found it still builds nothing.
The wrapper passes `codename1.platform` to its nested Maven run, and that
property is what activates the module profile in a generated project's root pom.
The profile is `win`, matching the value the win module itself declares:
<profile><id>win</id>
<activation><property>
<name>codename1.platform</name><value>win</value>
</property></activation>
<modules><module>win</module></modules>
BuildWin32Mojo and BuildWindowsDeviceMojo both passed "windows", which matches no
profile at all. Nothing else in the plugin reads the platform as "windows", so
the value was simply inert: the win module never joined the reactor and the
nested build reported success having produced no Windows binary. Every other
wrapper already agrees with its profile -- android, ios, javascript, linux and
javase all match -- so these two were the only ones out of step.
Verified by A/B against scripts/hellocodenameone, reading the NESTED reactor
rather than the outer one:
before hellocodenameone, -common, -javase <- no win module
after hellocodenameone, -common, -win
The build TARGET is a separate namespace and stays "windows-device"
(Executor.BUILD_TARGET_WINDOWS_NATIVE), which is correct.
SpotBugs over codenameone-maven-plugin regenerated: 0 findings.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…lost
Fixing BuildWin32Mojo made the sentence beside this snippet false: the goal now
submits a build, while the command the chapter leads with still could not. It
carried both defects at once --
mvn -pl common package -Dcodename1.platform=windows ...
-- `-pl common` builds that module instead of the reactor, so the win module is
never reached, and `windows` matches no profile even when the reactor is whole.
The two mistakes hid each other: with only the module selected, the platform
value had nothing left to activate.
Corrected to what the wrapper actually runs, read off AbstractBuildWrapperMojo:
goal `package`, `codename1.platform=win`, `codename1.buildTarget=windows-device`,
from the project root.
A/B against scripts/hellocodenameone, reading the reactor, which Maven prints
before it compiles:
old no win module in the reactor at all
new hellocodenameone, -common, -win
Both invocations then fail identically on this machine with "invalid target
release: 17", because tools/env.sh pins JDK 8 while the demo targets 17. That is
environmental and equal on both sides, so it does not affect the comparison.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@shai-almog
shai-almog merged commit a9c0b73 into devguide-guardsSep 2, 2026
6 of 19 checks passed
@shai-almog
shai-almog deleted the devguide-introduction branch September 2, 2026 15:38
Sign up for freeto 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

@shai-almog
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

The Introduction taught a dead IDE menu, an iTunes walkthrough and 2018 statistics - #5671

Merged
shai-almog merged 4 commits into
devguide-guardsfrom
devguide-introduction
Sep 2, 2026
Merged

The Introduction taught a dead IDE menu, an iTunes walkthrough and 2018 statistics#5671
shai-almog merged 4 commits into
devguide-guardsfrom
devguide-introduction

Conversation

@shai-almog

Copy link
Copy Markdown
Collaborator

Fourth PR in the developer-guide stack. Six corrections to the chapter a new developer reads first.

whatwhy it was wrong
JavaScript translationThe overview said TeaVM did the translation; the port section further down said ParparVM with TeaVM as a fallback. The port section is right — javascript.port is declared with parparvm as its default and teavm documented as "the original builder as a compatibility fallback".
http://teavm.org:[...]The stray colon made the macro a bare host, and the site serves TLS. Removed from the link ratchet, now 37.
BitcodeCited as something ParparVM absorbed without modification. Apple has since withdrawn bitcode — which makes the future-proofing point better than the arrival did — so the sentence now names both moves.
Device fragmentationRested on two 2018 Android share figures, followed by a sentence conceding they would be stale on arrival. The structural claim survives without them.
iOS developer feeDated with "for 10 years at the time of this writing".
UDIDWalked the reader through iTunes, which has not existed on macOS since Catalina. The screenshot also exposed a real device serial and UDID. signing.asciidoc already gives the current answer (Finder device summary, Apple Configurator), so this now cross-references it.
Device build"a right click away" via the IDE plugin, illustrated by a menu still offering Blackberry, J2ME and Windows Phone builds. Replaced with cn1:buildAndroid / cn1:buildIos, names taken from the mojo definitions rather than from prose.

Both dead screenshots are deleted in the same commit, so find_unused_images.py stays satisfied.

Two items the plan listed for this chapter turned out not to need work: the <<ApplicationLifecycle>> sidebar already exists (written earlier in this stack), and the malformed stackoverflow host is no longer present.

Verification

asciidoctor --failure-level WARN, Vale at suggestion level, LanguageTool (status: ok, 0 matches — run under JDK 17 rather than the JDK 8 path that reports a false green), paragraph capitalization, snippet validation, xrefs, structure, links and missing-code-blocks: all clean.

🤖 Generated with Claude Code

@chatgpt-codex-connector

chatgpt-codex-connectorBot commented Sep 2, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

ReviewStatusCommitReview trigger
📝 Code ReviewCompleted2026-09-02T15:37:31.325757Z18cc667New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:16bbebc80f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threaddocs/developer-guide/Introduction.asciidoc Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:cc57d1cfd6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threaddocs/developer-guide/Working-With-Windows.asciidoc
@github-actions

github-actionsBot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Developer Guide build artifacts are available for download from this workflow run:

Developer Guide quality checks:

  • AsciiDoc linter: No issues found (report)
  • Vale: No alerts found (report)
  • Paragraph capitalization: No paragraph capitalization issues (report)
  • LanguageTool: No grammar matches (report)
  • Image references: No unused images detected (report)

@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from ae956d3 to eecf05dCompareSeptember 2, 2026 11:58
@github-actions

Copy link
Copy Markdown
Contributor

Cloudflare Preview

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:dd501cd3aa

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threaddocs/developer-guide/Working-With-Windows.asciidoc
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from eecf05d to f81e4b1CompareSeptember 2, 2026 12:16
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from f81e4b1 to 335a54aCompareSeptember 2, 2026 12:29
@shai-almog

shai-almog commented Sep 2, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 151 screenshots: 151 matched.

Native Android coverage

  • 📊 Line coverage: 9.10% (9017/99118 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 8.88% (46522/523733), branch 3.50% (1739/49629), complexity 3.48% (1842/52924), method 5.34% (1487/27841), class 10.74% (400/3723)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6367 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.ClassReader – 0.00% (0/1524 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1187 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.MethodWriter – 0.00% (0/922 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/736 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • okio.okio.Buffer – 0.00% (0/687 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/625 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.Frame – 0.00% (0/570 lines covered)

✅ Native Android screenshot tests passed.

Native Android coverage

  • 📊 Line coverage: 9.10% (9017/99118 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 8.88% (46522/523733), branch 3.50% (1739/49629), complexity 3.48% (1842/52924), method 5.34% (1487/27841), class 10.74% (400/3723)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6367 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.ClassReader – 0.00% (0/1524 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1187 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.MethodWriter – 0.00% (0/922 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/736 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • okio.okio.Buffer – 0.00% (0/687 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/625 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.Frame – 0.00% (0/570 lines covered)

Benchmark Results

Detailed Performance Metrics

MetricDuration
SIMD kernel backendscalar fallback (no native SIMD)
SIMD int-add (64K x300)java 135ms / native 106ms = 1.2x speedup
SIMD float-mul (64K x300)java 94ms / native 64ms = 1.4x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathgated to scalar (CPU autovectorizes scalar; explicit SIMD not beneficial here)
Base64 CN1 encode54.000 ms
Base64 CN1 decode66.000 ms
Base64 native encode359.000 ms
Base64 encode ratio (CN1/native)0.150x (85.0% faster)
Base64 native decode291.000 ms
Base64 decode ratio (CN1/native)0.227x (77.3% faster)
Image encode benchmark statusskipped (SIMD unsupported)

@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from 335a54a to f915089CompareSeptember 2, 2026 13:06
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from f915089 to f0f0e4eCompareSeptember 2, 2026 13:21
@shai-almog

shai-almog commented Sep 2, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 181 screenshots: 181 matched.
✅ JavaScript-port screenshot tests passed.

@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from f0f0e4e to facd9edCompareSeptember 2, 2026 14:16
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from facd9ed to 15e0c1eCompareSeptember 2, 2026 14:42
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from 15e0c1e to 815afcfCompareSeptember 2, 2026 15:02
Base automatically changed from devguide-figure-harness to devguide-guardsSeptember 2, 2026 15:21
@shai-almog
shai-almogforce-pushed the devguide-introduction branch 3 times, most recently from bca6854 to ae6bbdfCompareSeptember 2, 2026 15:26
shai-almogand others added 2 commits September 2, 2026 18:35
…18 statistics
Six corrections to the chapter a new developer reads first:
* The JavaScript target was described twice and contradicted itself: the
overview said TeaVM did the translation, the port section said ParparVM with
TeaVM as a fallback. The port section is right -- `javascript.port` is
declared with `parparvm` as its default and `teavm` documented as "the
original builder as a compatibility fallback".
* `http://teavm.org:[TeaVM-based builder]` -- the stray colon made the macro a
bare host, and the site serves TLS. Removed from the link ratchet, which now
stands at 37.
* Bitcode was cited as something ParparVM absorbed without modification. Apple
has since withdrawn bitcode, which makes the point better than the arrival
did, so the sentence now names both moves.
* The device-fragmentation section rested on two 2018 Android share numbers,
followed by a sentence conceding they would be stale on arrival. The
structural claim survives without them.
* The iOS developer fee was dated with "for 10 years at the time of this
writing".
* The UDID instructions walked the reader through iTunes, with a screenshot of
iTunes on iOS 9.3.5 that also exposed a real device serial and UDID. iTunes
has not existed on macOS since Catalina, and the signing chapter already gives
the current answer, so this now points there.
* The device build was "a right click away" via the IDE plugin, illustrated by a
menu still offering Blackberry, J2ME and Windows Phone builds. Replaced with
the `cn1:buildAndroid` and `cn1:buildIos` goals, taken from the mojo names.
Both screenshots are deleted, so find_unused_images.py stays satisfied.
Verified: asciidoctor at --failure-level WARN, Vale at suggestion level,
LanguageTool (status ok, 0 matches, run under JDK 17 rather than the JDK 8
false green), paragraph capitalization, snippets, xrefs, structure, links and
missing-code-blocks all clean.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Review caught the command I had just written. AbstractBuildWrapperMojo.execute()
opens with:
if (!project.isExecutionRoot()) {
getLog().info("Skipping execution for non-root project");
return;
}
and BuildAndroidMojo, BuildIosMojo and BuildWin32Mojo all inherit it unchanged.
Under `-pl common` the selected module is not the execution root, so the goal
logs that line and stops. The design is deliberate -- the wrapper re-invokes
Maven on the root pom itself (`request.setPomFile(new File("pom.xml"))`) -- so
naming a module both skips the wrapper and defeats its purpose.
Measured rather than reasoned, against scripts/hellocodenameone:
mvn -pl common ...:buildWin32 -> "Skipping execution for non-root project"
BUILD SUCCESS, nothing built
mvn ...:buildWin32 -> no skip line, proceeds into the reactor
A silent success is the worst failure mode for a getting-started instruction, so
the Introduction now says where to run it and warns about the module form
explicitly.
Working-With-Windows carried the same `-pl common` shape and is fixed with it --
it is where I copied the form from, so leaving it would reintroduce the defect
the next time someone follows the pattern.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
shai-almogand others added 2 commits September 2, 2026 18:35
Review checked the command this PR documents and found it still builds nothing.
The wrapper passes `codename1.platform` to its nested Maven run, and that
property is what activates the module profile in a generated project's root pom.
The profile is `win`, matching the value the win module itself declares:
<profile><id>win</id>
<activation><property>
<name>codename1.platform</name><value>win</value>
</property></activation>
<modules><module>win</module></modules>
BuildWin32Mojo and BuildWindowsDeviceMojo both passed "windows", which matches no
profile at all. Nothing else in the plugin reads the platform as "windows", so
the value was simply inert: the win module never joined the reactor and the
nested build reported success having produced no Windows binary. Every other
wrapper already agrees with its profile -- android, ios, javascript, linux and
javase all match -- so these two were the only ones out of step.
Verified by A/B against scripts/hellocodenameone, reading the NESTED reactor
rather than the outer one:
before hellocodenameone, -common, -javase <- no win module
after hellocodenameone, -common, -win
The build TARGET is a separate namespace and stays "windows-device"
(Executor.BUILD_TARGET_WINDOWS_NATIVE), which is correct.
SpotBugs over codenameone-maven-plugin regenerated: 0 findings.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…lost
Fixing BuildWin32Mojo made the sentence beside this snippet false: the goal now
submits a build, while the command the chapter leads with still could not. It
carried both defects at once --
mvn -pl common package -Dcodename1.platform=windows ...
-- `-pl common` builds that module instead of the reactor, so the win module is
never reached, and `windows` matches no profile even when the reactor is whole.
The two mistakes hid each other: with only the module selected, the platform
value had nothing left to activate.
Corrected to what the wrapper actually runs, read off AbstractBuildWrapperMojo:
goal `package`, `codename1.platform=win`, `codename1.buildTarget=windows-device`,
from the project root.
A/B against scripts/hellocodenameone, reading the reactor, which Maven prints
before it compiles:
old no win module in the reactor at all
new hellocodenameone, -common, -win
Both invocations then fail identically on this machine with "invalid target
release: 17", because tools/env.sh pins JDK 8 while the demo targets 17. That is
environmental and equal on both sides, so it does not affect the comparison.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@shai-almog
shai-almog merged commit a9c0b73 into devguide-guardsSep 2, 2026
6 of 19 checks passed
@shai-almog
shai-almog deleted the devguide-introduction branch September 2, 2026 15:38
Sign up for freeto 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

@shai-almog
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

The Introduction taught a dead IDE menu, an iTunes walkthrough and 2018 statistics - #5671

Merged
shai-almog merged 4 commits into
devguide-guardsfrom
devguide-introduction
Sep 2, 2026
Merged

The Introduction taught a dead IDE menu, an iTunes walkthrough and 2018 statistics#5671
shai-almog merged 4 commits into
devguide-guardsfrom
devguide-introduction

Conversation

@shai-almog

Copy link
Copy Markdown
Collaborator

Fourth PR in the developer-guide stack. Six corrections to the chapter a new developer reads first.

whatwhy it was wrong
JavaScript translationThe overview said TeaVM did the translation; the port section further down said ParparVM with TeaVM as a fallback. The port section is right — javascript.port is declared with parparvm as its default and teavm documented as "the original builder as a compatibility fallback".
http://teavm.org:[...]The stray colon made the macro a bare host, and the site serves TLS. Removed from the link ratchet, now 37.
BitcodeCited as something ParparVM absorbed without modification. Apple has since withdrawn bitcode — which makes the future-proofing point better than the arrival did — so the sentence now names both moves.
Device fragmentationRested on two 2018 Android share figures, followed by a sentence conceding they would be stale on arrival. The structural claim survives without them.
iOS developer feeDated with "for 10 years at the time of this writing".
UDIDWalked the reader through iTunes, which has not existed on macOS since Catalina. The screenshot also exposed a real device serial and UDID. signing.asciidoc already gives the current answer (Finder device summary, Apple Configurator), so this now cross-references it.
Device build"a right click away" via the IDE plugin, illustrated by a menu still offering Blackberry, J2ME and Windows Phone builds. Replaced with cn1:buildAndroid / cn1:buildIos, names taken from the mojo definitions rather than from prose.

Both dead screenshots are deleted in the same commit, so find_unused_images.py stays satisfied.

Two items the plan listed for this chapter turned out not to need work: the <<ApplicationLifecycle>> sidebar already exists (written earlier in this stack), and the malformed stackoverflow host is no longer present.

Verification

asciidoctor --failure-level WARN, Vale at suggestion level, LanguageTool (status: ok, 0 matches — run under JDK 17 rather than the JDK 8 path that reports a false green), paragraph capitalization, snippet validation, xrefs, structure, links and missing-code-blocks: all clean.

🤖 Generated with Claude Code

@chatgpt-codex-connector

chatgpt-codex-connectorBot commented Sep 2, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

ReviewStatusCommitReview trigger
📝 Code ReviewCompleted2026-09-02T15:37:31.325757Z18cc667New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:16bbebc80f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threaddocs/developer-guide/Introduction.asciidoc Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:cc57d1cfd6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threaddocs/developer-guide/Working-With-Windows.asciidoc
@github-actions

github-actionsBot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Developer Guide build artifacts are available for download from this workflow run:

Developer Guide quality checks:

  • AsciiDoc linter: No issues found (report)
  • Vale: No alerts found (report)
  • Paragraph capitalization: No paragraph capitalization issues (report)
  • LanguageTool: No grammar matches (report)
  • Image references: No unused images detected (report)

@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from ae956d3 to eecf05dCompareSeptember 2, 2026 11:58
@github-actions

Copy link
Copy Markdown
Contributor

Cloudflare Preview

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:dd501cd3aa

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threaddocs/developer-guide/Working-With-Windows.asciidoc
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from eecf05d to f81e4b1CompareSeptember 2, 2026 12:16
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from f81e4b1 to 335a54aCompareSeptember 2, 2026 12:29
@shai-almog

shai-almog commented Sep 2, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 151 screenshots: 151 matched.

Native Android coverage

  • 📊 Line coverage: 9.10% (9017/99118 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 8.88% (46522/523733), branch 3.50% (1739/49629), complexity 3.48% (1842/52924), method 5.34% (1487/27841), class 10.74% (400/3723)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6367 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.ClassReader – 0.00% (0/1524 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1187 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.MethodWriter – 0.00% (0/922 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/736 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • okio.okio.Buffer – 0.00% (0/687 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/625 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.Frame – 0.00% (0/570 lines covered)

✅ Native Android screenshot tests passed.

Native Android coverage

  • 📊 Line coverage: 9.10% (9017/99118 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 8.88% (46522/523733), branch 3.50% (1739/49629), complexity 3.48% (1842/52924), method 5.34% (1487/27841), class 10.74% (400/3723)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6367 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.ClassReader – 0.00% (0/1524 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1187 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.MethodWriter – 0.00% (0/922 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/736 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • okio.okio.Buffer – 0.00% (0/687 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/625 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.Frame – 0.00% (0/570 lines covered)

Benchmark Results

Detailed Performance Metrics

MetricDuration
SIMD kernel backendscalar fallback (no native SIMD)
SIMD int-add (64K x300)java 135ms / native 106ms = 1.2x speedup
SIMD float-mul (64K x300)java 94ms / native 64ms = 1.4x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathgated to scalar (CPU autovectorizes scalar; explicit SIMD not beneficial here)
Base64 CN1 encode54.000 ms
Base64 CN1 decode66.000 ms
Base64 native encode359.000 ms
Base64 encode ratio (CN1/native)0.150x (85.0% faster)
Base64 native decode291.000 ms
Base64 decode ratio (CN1/native)0.227x (77.3% faster)
Image encode benchmark statusskipped (SIMD unsupported)

@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from 335a54a to f915089CompareSeptember 2, 2026 13:06
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from f915089 to f0f0e4eCompareSeptember 2, 2026 13:21
@shai-almog

shai-almog commented Sep 2, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 181 screenshots: 181 matched.
✅ JavaScript-port screenshot tests passed.

@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from f0f0e4e to facd9edCompareSeptember 2, 2026 14:16
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from facd9ed to 15e0c1eCompareSeptember 2, 2026 14:42
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from 15e0c1e to 815afcfCompareSeptember 2, 2026 15:02
Base automatically changed from devguide-figure-harness to devguide-guardsSeptember 2, 2026 15:21
@shai-almog
shai-almogforce-pushed the devguide-introduction branch 3 times, most recently from bca6854 to ae6bbdfCompareSeptember 2, 2026 15:26
shai-almogand others added 2 commits September 2, 2026 18:35
…18 statistics
Six corrections to the chapter a new developer reads first:
* The JavaScript target was described twice and contradicted itself: the
overview said TeaVM did the translation, the port section said ParparVM with
TeaVM as a fallback. The port section is right -- `javascript.port` is
declared with `parparvm` as its default and `teavm` documented as "the
original builder as a compatibility fallback".
* `http://teavm.org:[TeaVM-based builder]` -- the stray colon made the macro a
bare host, and the site serves TLS. Removed from the link ratchet, which now
stands at 37.
* Bitcode was cited as something ParparVM absorbed without modification. Apple
has since withdrawn bitcode, which makes the point better than the arrival
did, so the sentence now names both moves.
* The device-fragmentation section rested on two 2018 Android share numbers,
followed by a sentence conceding they would be stale on arrival. The
structural claim survives without them.
* The iOS developer fee was dated with "for 10 years at the time of this
writing".
* The UDID instructions walked the reader through iTunes, with a screenshot of
iTunes on iOS 9.3.5 that also exposed a real device serial and UDID. iTunes
has not existed on macOS since Catalina, and the signing chapter already gives
the current answer, so this now points there.
* The device build was "a right click away" via the IDE plugin, illustrated by a
menu still offering Blackberry, J2ME and Windows Phone builds. Replaced with
the `cn1:buildAndroid` and `cn1:buildIos` goals, taken from the mojo names.
Both screenshots are deleted, so find_unused_images.py stays satisfied.
Verified: asciidoctor at --failure-level WARN, Vale at suggestion level,
LanguageTool (status ok, 0 matches, run under JDK 17 rather than the JDK 8
false green), paragraph capitalization, snippets, xrefs, structure, links and
missing-code-blocks all clean.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Review caught the command I had just written. AbstractBuildWrapperMojo.execute()
opens with:
if (!project.isExecutionRoot()) {
getLog().info("Skipping execution for non-root project");
return;
}
and BuildAndroidMojo, BuildIosMojo and BuildWin32Mojo all inherit it unchanged.
Under `-pl common` the selected module is not the execution root, so the goal
logs that line and stops. The design is deliberate -- the wrapper re-invokes
Maven on the root pom itself (`request.setPomFile(new File("pom.xml"))`) -- so
naming a module both skips the wrapper and defeats its purpose.
Measured rather than reasoned, against scripts/hellocodenameone:
mvn -pl common ...:buildWin32 -> "Skipping execution for non-root project"
BUILD SUCCESS, nothing built
mvn ...:buildWin32 -> no skip line, proceeds into the reactor
A silent success is the worst failure mode for a getting-started instruction, so
the Introduction now says where to run it and warns about the module form
explicitly.
Working-With-Windows carried the same `-pl common` shape and is fixed with it --
it is where I copied the form from, so leaving it would reintroduce the defect
the next time someone follows the pattern.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
shai-almogand others added 2 commits September 2, 2026 18:35
Review checked the command this PR documents and found it still builds nothing.
The wrapper passes `codename1.platform` to its nested Maven run, and that
property is what activates the module profile in a generated project's root pom.
The profile is `win`, matching the value the win module itself declares:
<profile><id>win</id>
<activation><property>
<name>codename1.platform</name><value>win</value>
</property></activation>
<modules><module>win</module></modules>
BuildWin32Mojo and BuildWindowsDeviceMojo both passed "windows", which matches no
profile at all. Nothing else in the plugin reads the platform as "windows", so
the value was simply inert: the win module never joined the reactor and the
nested build reported success having produced no Windows binary. Every other
wrapper already agrees with its profile -- android, ios, javascript, linux and
javase all match -- so these two were the only ones out of step.
Verified by A/B against scripts/hellocodenameone, reading the NESTED reactor
rather than the outer one:
before hellocodenameone, -common, -javase <- no win module
after hellocodenameone, -common, -win
The build TARGET is a separate namespace and stays "windows-device"
(Executor.BUILD_TARGET_WINDOWS_NATIVE), which is correct.
SpotBugs over codenameone-maven-plugin regenerated: 0 findings.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…lost
Fixing BuildWin32Mojo made the sentence beside this snippet false: the goal now
submits a build, while the command the chapter leads with still could not. It
carried both defects at once --
mvn -pl common package -Dcodename1.platform=windows ...
-- `-pl common` builds that module instead of the reactor, so the win module is
never reached, and `windows` matches no profile even when the reactor is whole.
The two mistakes hid each other: with only the module selected, the platform
value had nothing left to activate.
Corrected to what the wrapper actually runs, read off AbstractBuildWrapperMojo:
goal `package`, `codename1.platform=win`, `codename1.buildTarget=windows-device`,
from the project root.
A/B against scripts/hellocodenameone, reading the reactor, which Maven prints
before it compiles:
old no win module in the reactor at all
new hellocodenameone, -common, -win
Both invocations then fail identically on this machine with "invalid target
release: 17", because tools/env.sh pins JDK 8 while the demo targets 17. That is
environmental and equal on both sides, so it does not affect the comparison.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@shai-almog
shai-almog merged commit a9c0b73 into devguide-guardsSep 2, 2026
6 of 19 checks passed
@shai-almog
shai-almog deleted the devguide-introduction branch September 2, 2026 15:38
Sign up for freeto 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

@shai-almog
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

The Introduction taught a dead IDE menu, an iTunes walkthrough and 2018 statistics - #5671

Merged
shai-almog merged 4 commits into
devguide-guardsfrom
devguide-introduction
Sep 2, 2026
Merged

The Introduction taught a dead IDE menu, an iTunes walkthrough and 2018 statistics#5671
shai-almog merged 4 commits into
devguide-guardsfrom
devguide-introduction

Conversation

@shai-almog

Copy link
Copy Markdown
Collaborator

Fourth PR in the developer-guide stack. Six corrections to the chapter a new developer reads first.

whatwhy it was wrong
JavaScript translationThe overview said TeaVM did the translation; the port section further down said ParparVM with TeaVM as a fallback. The port section is right — javascript.port is declared with parparvm as its default and teavm documented as "the original builder as a compatibility fallback".
http://teavm.org:[...]The stray colon made the macro a bare host, and the site serves TLS. Removed from the link ratchet, now 37.
BitcodeCited as something ParparVM absorbed without modification. Apple has since withdrawn bitcode — which makes the future-proofing point better than the arrival did — so the sentence now names both moves.
Device fragmentationRested on two 2018 Android share figures, followed by a sentence conceding they would be stale on arrival. The structural claim survives without them.
iOS developer feeDated with "for 10 years at the time of this writing".
UDIDWalked the reader through iTunes, which has not existed on macOS since Catalina. The screenshot also exposed a real device serial and UDID. signing.asciidoc already gives the current answer (Finder device summary, Apple Configurator), so this now cross-references it.
Device build"a right click away" via the IDE plugin, illustrated by a menu still offering Blackberry, J2ME and Windows Phone builds. Replaced with cn1:buildAndroid / cn1:buildIos, names taken from the mojo definitions rather than from prose.

Both dead screenshots are deleted in the same commit, so find_unused_images.py stays satisfied.

Two items the plan listed for this chapter turned out not to need work: the <<ApplicationLifecycle>> sidebar already exists (written earlier in this stack), and the malformed stackoverflow host is no longer present.

Verification

asciidoctor --failure-level WARN, Vale at suggestion level, LanguageTool (status: ok, 0 matches — run under JDK 17 rather than the JDK 8 path that reports a false green), paragraph capitalization, snippet validation, xrefs, structure, links and missing-code-blocks: all clean.

🤖 Generated with Claude Code

@chatgpt-codex-connector

chatgpt-codex-connectorBot commented Sep 2, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

ReviewStatusCommitReview trigger
📝 Code ReviewCompleted2026-09-02T15:37:31.325757Z18cc667New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:16bbebc80f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threaddocs/developer-guide/Introduction.asciidoc Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:cc57d1cfd6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threaddocs/developer-guide/Working-With-Windows.asciidoc
@github-actions

github-actionsBot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Developer Guide build artifacts are available for download from this workflow run:

Developer Guide quality checks:

  • AsciiDoc linter: No issues found (report)
  • Vale: No alerts found (report)
  • Paragraph capitalization: No paragraph capitalization issues (report)
  • LanguageTool: No grammar matches (report)
  • Image references: No unused images detected (report)

@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from ae956d3 to eecf05dCompareSeptember 2, 2026 11:58
@github-actions

Copy link
Copy Markdown
Contributor

Cloudflare Preview

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:dd501cd3aa

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threaddocs/developer-guide/Working-With-Windows.asciidoc
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from eecf05d to f81e4b1CompareSeptember 2, 2026 12:16
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from f81e4b1 to 335a54aCompareSeptember 2, 2026 12:29
@shai-almog

shai-almog commented Sep 2, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 151 screenshots: 151 matched.

Native Android coverage

  • 📊 Line coverage: 9.10% (9017/99118 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 8.88% (46522/523733), branch 3.50% (1739/49629), complexity 3.48% (1842/52924), method 5.34% (1487/27841), class 10.74% (400/3723)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6367 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.ClassReader – 0.00% (0/1524 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1187 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.MethodWriter – 0.00% (0/922 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/736 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • okio.okio.Buffer – 0.00% (0/687 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/625 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.Frame – 0.00% (0/570 lines covered)

✅ Native Android screenshot tests passed.

Native Android coverage

  • 📊 Line coverage: 9.10% (9017/99118 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 8.88% (46522/523733), branch 3.50% (1739/49629), complexity 3.48% (1842/52924), method 5.34% (1487/27841), class 10.74% (400/3723)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6367 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.ClassReader – 0.00% (0/1524 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1187 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.MethodWriter – 0.00% (0/922 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/736 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • okio.okio.Buffer – 0.00% (0/687 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/625 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.Frame – 0.00% (0/570 lines covered)

Benchmark Results

Detailed Performance Metrics

MetricDuration
SIMD kernel backendscalar fallback (no native SIMD)
SIMD int-add (64K x300)java 135ms / native 106ms = 1.2x speedup
SIMD float-mul (64K x300)java 94ms / native 64ms = 1.4x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathgated to scalar (CPU autovectorizes scalar; explicit SIMD not beneficial here)
Base64 CN1 encode54.000 ms
Base64 CN1 decode66.000 ms
Base64 native encode359.000 ms
Base64 encode ratio (CN1/native)0.150x (85.0% faster)
Base64 native decode291.000 ms
Base64 decode ratio (CN1/native)0.227x (77.3% faster)
Image encode benchmark statusskipped (SIMD unsupported)

@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from 335a54a to f915089CompareSeptember 2, 2026 13:06
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from f915089 to f0f0e4eCompareSeptember 2, 2026 13:21
@shai-almog

shai-almog commented Sep 2, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 181 screenshots: 181 matched.
✅ JavaScript-port screenshot tests passed.

@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from f0f0e4e to facd9edCompareSeptember 2, 2026 14:16
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from facd9ed to 15e0c1eCompareSeptember 2, 2026 14:42
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from 15e0c1e to 815afcfCompareSeptember 2, 2026 15:02
Base automatically changed from devguide-figure-harness to devguide-guardsSeptember 2, 2026 15:21
@shai-almog
shai-almogforce-pushed the devguide-introduction branch 3 times, most recently from bca6854 to ae6bbdfCompareSeptember 2, 2026 15:26
shai-almogand others added 2 commits September 2, 2026 18:35
…18 statistics
Six corrections to the chapter a new developer reads first:
* The JavaScript target was described twice and contradicted itself: the
overview said TeaVM did the translation, the port section said ParparVM with
TeaVM as a fallback. The port section is right -- `javascript.port` is
declared with `parparvm` as its default and `teavm` documented as "the
original builder as a compatibility fallback".
* `http://teavm.org:[TeaVM-based builder]` -- the stray colon made the macro a
bare host, and the site serves TLS. Removed from the link ratchet, which now
stands at 37.
* Bitcode was cited as something ParparVM absorbed without modification. Apple
has since withdrawn bitcode, which makes the point better than the arrival
did, so the sentence now names both moves.
* The device-fragmentation section rested on two 2018 Android share numbers,
followed by a sentence conceding they would be stale on arrival. The
structural claim survives without them.
* The iOS developer fee was dated with "for 10 years at the time of this
writing".
* The UDID instructions walked the reader through iTunes, with a screenshot of
iTunes on iOS 9.3.5 that also exposed a real device serial and UDID. iTunes
has not existed on macOS since Catalina, and the signing chapter already gives
the current answer, so this now points there.
* The device build was "a right click away" via the IDE plugin, illustrated by a
menu still offering Blackberry, J2ME and Windows Phone builds. Replaced with
the `cn1:buildAndroid` and `cn1:buildIos` goals, taken from the mojo names.
Both screenshots are deleted, so find_unused_images.py stays satisfied.
Verified: asciidoctor at --failure-level WARN, Vale at suggestion level,
LanguageTool (status ok, 0 matches, run under JDK 17 rather than the JDK 8
false green), paragraph capitalization, snippets, xrefs, structure, links and
missing-code-blocks all clean.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Review caught the command I had just written. AbstractBuildWrapperMojo.execute()
opens with:
if (!project.isExecutionRoot()) {
getLog().info("Skipping execution for non-root project");
return;
}
and BuildAndroidMojo, BuildIosMojo and BuildWin32Mojo all inherit it unchanged.
Under `-pl common` the selected module is not the execution root, so the goal
logs that line and stops. The design is deliberate -- the wrapper re-invokes
Maven on the root pom itself (`request.setPomFile(new File("pom.xml"))`) -- so
naming a module both skips the wrapper and defeats its purpose.
Measured rather than reasoned, against scripts/hellocodenameone:
mvn -pl common ...:buildWin32 -> "Skipping execution for non-root project"
BUILD SUCCESS, nothing built
mvn ...:buildWin32 -> no skip line, proceeds into the reactor
A silent success is the worst failure mode for a getting-started instruction, so
the Introduction now says where to run it and warns about the module form
explicitly.
Working-With-Windows carried the same `-pl common` shape and is fixed with it --
it is where I copied the form from, so leaving it would reintroduce the defect
the next time someone follows the pattern.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
shai-almogand others added 2 commits September 2, 2026 18:35
Review checked the command this PR documents and found it still builds nothing.
The wrapper passes `codename1.platform` to its nested Maven run, and that
property is what activates the module profile in a generated project's root pom.
The profile is `win`, matching the value the win module itself declares:
<profile><id>win</id>
<activation><property>
<name>codename1.platform</name><value>win</value>
</property></activation>
<modules><module>win</module></modules>
BuildWin32Mojo and BuildWindowsDeviceMojo both passed "windows", which matches no
profile at all. Nothing else in the plugin reads the platform as "windows", so
the value was simply inert: the win module never joined the reactor and the
nested build reported success having produced no Windows binary. Every other
wrapper already agrees with its profile -- android, ios, javascript, linux and
javase all match -- so these two were the only ones out of step.
Verified by A/B against scripts/hellocodenameone, reading the NESTED reactor
rather than the outer one:
before hellocodenameone, -common, -javase <- no win module
after hellocodenameone, -common, -win
The build TARGET is a separate namespace and stays "windows-device"
(Executor.BUILD_TARGET_WINDOWS_NATIVE), which is correct.
SpotBugs over codenameone-maven-plugin regenerated: 0 findings.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…lost
Fixing BuildWin32Mojo made the sentence beside this snippet false: the goal now
submits a build, while the command the chapter leads with still could not. It
carried both defects at once --
mvn -pl common package -Dcodename1.platform=windows ...
-- `-pl common` builds that module instead of the reactor, so the win module is
never reached, and `windows` matches no profile even when the reactor is whole.
The two mistakes hid each other: with only the module selected, the platform
value had nothing left to activate.
Corrected to what the wrapper actually runs, read off AbstractBuildWrapperMojo:
goal `package`, `codename1.platform=win`, `codename1.buildTarget=windows-device`,
from the project root.
A/B against scripts/hellocodenameone, reading the reactor, which Maven prints
before it compiles:
old no win module in the reactor at all
new hellocodenameone, -common, -win
Both invocations then fail identically on this machine with "invalid target
release: 17", because tools/env.sh pins JDK 8 while the demo targets 17. That is
environmental and equal on both sides, so it does not affect the comparison.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@shai-almog
shai-almog merged commit a9c0b73 into devguide-guardsSep 2, 2026
6 of 19 checks passed
@shai-almog
shai-almog deleted the devguide-introduction branch September 2, 2026 15:38
Sign up for freeto 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

@shai-almog
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

The Introduction taught a dead IDE menu, an iTunes walkthrough and 2018 statistics - #5671

Merged
shai-almog merged 4 commits into
devguide-guardsfrom
devguide-introduction
Sep 2, 2026
Merged

The Introduction taught a dead IDE menu, an iTunes walkthrough and 2018 statistics#5671
shai-almog merged 4 commits into
devguide-guardsfrom
devguide-introduction

Conversation

@shai-almog

Copy link
Copy Markdown
Collaborator

Fourth PR in the developer-guide stack. Six corrections to the chapter a new developer reads first.

whatwhy it was wrong
JavaScript translationThe overview said TeaVM did the translation; the port section further down said ParparVM with TeaVM as a fallback. The port section is right — javascript.port is declared with parparvm as its default and teavm documented as "the original builder as a compatibility fallback".
http://teavm.org:[...]The stray colon made the macro a bare host, and the site serves TLS. Removed from the link ratchet, now 37.
BitcodeCited as something ParparVM absorbed without modification. Apple has since withdrawn bitcode — which makes the future-proofing point better than the arrival did — so the sentence now names both moves.
Device fragmentationRested on two 2018 Android share figures, followed by a sentence conceding they would be stale on arrival. The structural claim survives without them.
iOS developer feeDated with "for 10 years at the time of this writing".
UDIDWalked the reader through iTunes, which has not existed on macOS since Catalina. The screenshot also exposed a real device serial and UDID. signing.asciidoc already gives the current answer (Finder device summary, Apple Configurator), so this now cross-references it.
Device build"a right click away" via the IDE plugin, illustrated by a menu still offering Blackberry, J2ME and Windows Phone builds. Replaced with cn1:buildAndroid / cn1:buildIos, names taken from the mojo definitions rather than from prose.

Both dead screenshots are deleted in the same commit, so find_unused_images.py stays satisfied.

Two items the plan listed for this chapter turned out not to need work: the <<ApplicationLifecycle>> sidebar already exists (written earlier in this stack), and the malformed stackoverflow host is no longer present.

Verification

asciidoctor --failure-level WARN, Vale at suggestion level, LanguageTool (status: ok, 0 matches — run under JDK 17 rather than the JDK 8 path that reports a false green), paragraph capitalization, snippet validation, xrefs, structure, links and missing-code-blocks: all clean.

🤖 Generated with Claude Code

@chatgpt-codex-connector

chatgpt-codex-connectorBot commented Sep 2, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

ReviewStatusCommitReview trigger
📝 Code ReviewCompleted2026-09-02T15:37:31.325757Z18cc667New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:16bbebc80f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threaddocs/developer-guide/Introduction.asciidoc Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:cc57d1cfd6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threaddocs/developer-guide/Working-With-Windows.asciidoc
@github-actions

github-actionsBot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Developer Guide build artifacts are available for download from this workflow run:

Developer Guide quality checks:

  • AsciiDoc linter: No issues found (report)
  • Vale: No alerts found (report)
  • Paragraph capitalization: No paragraph capitalization issues (report)
  • LanguageTool: No grammar matches (report)
  • Image references: No unused images detected (report)

@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from ae956d3 to eecf05dCompareSeptember 2, 2026 11:58
@github-actions

Copy link
Copy Markdown
Contributor

Cloudflare Preview

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:dd501cd3aa

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threaddocs/developer-guide/Working-With-Windows.asciidoc
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from eecf05d to f81e4b1CompareSeptember 2, 2026 12:16
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from f81e4b1 to 335a54aCompareSeptember 2, 2026 12:29
@shai-almog

shai-almog commented Sep 2, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 151 screenshots: 151 matched.

Native Android coverage

  • 📊 Line coverage: 9.10% (9017/99118 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 8.88% (46522/523733), branch 3.50% (1739/49629), complexity 3.48% (1842/52924), method 5.34% (1487/27841), class 10.74% (400/3723)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6367 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.ClassReader – 0.00% (0/1524 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1187 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.MethodWriter – 0.00% (0/922 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/736 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • okio.okio.Buffer – 0.00% (0/687 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/625 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.Frame – 0.00% (0/570 lines covered)

✅ Native Android screenshot tests passed.

Native Android coverage

  • 📊 Line coverage: 9.10% (9017/99118 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 8.88% (46522/523733), branch 3.50% (1739/49629), complexity 3.48% (1842/52924), method 5.34% (1487/27841), class 10.74% (400/3723)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6367 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.ClassReader – 0.00% (0/1524 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1187 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.MethodWriter – 0.00% (0/922 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/736 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • okio.okio.Buffer – 0.00% (0/687 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/625 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.Frame – 0.00% (0/570 lines covered)

Benchmark Results

Detailed Performance Metrics

MetricDuration
SIMD kernel backendscalar fallback (no native SIMD)
SIMD int-add (64K x300)java 135ms / native 106ms = 1.2x speedup
SIMD float-mul (64K x300)java 94ms / native 64ms = 1.4x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathgated to scalar (CPU autovectorizes scalar; explicit SIMD not beneficial here)
Base64 CN1 encode54.000 ms
Base64 CN1 decode66.000 ms
Base64 native encode359.000 ms
Base64 encode ratio (CN1/native)0.150x (85.0% faster)
Base64 native decode291.000 ms
Base64 decode ratio (CN1/native)0.227x (77.3% faster)
Image encode benchmark statusskipped (SIMD unsupported)

@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from 335a54a to f915089CompareSeptember 2, 2026 13:06
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from f915089 to f0f0e4eCompareSeptember 2, 2026 13:21
@shai-almog

shai-almog commented Sep 2, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 181 screenshots: 181 matched.
✅ JavaScript-port screenshot tests passed.

@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from f0f0e4e to facd9edCompareSeptember 2, 2026 14:16
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from facd9ed to 15e0c1eCompareSeptember 2, 2026 14:42
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from 15e0c1e to 815afcfCompareSeptember 2, 2026 15:02
Base automatically changed from devguide-figure-harness to devguide-guardsSeptember 2, 2026 15:21
@shai-almog
shai-almogforce-pushed the devguide-introduction branch 3 times, most recently from bca6854 to ae6bbdfCompareSeptember 2, 2026 15:26
shai-almogand others added 2 commits September 2, 2026 18:35
…18 statistics
Six corrections to the chapter a new developer reads first:
* The JavaScript target was described twice and contradicted itself: the
overview said TeaVM did the translation, the port section said ParparVM with
TeaVM as a fallback. The port section is right -- `javascript.port` is
declared with `parparvm` as its default and `teavm` documented as "the
original builder as a compatibility fallback".
* `http://teavm.org:[TeaVM-based builder]` -- the stray colon made the macro a
bare host, and the site serves TLS. Removed from the link ratchet, which now
stands at 37.
* Bitcode was cited as something ParparVM absorbed without modification. Apple
has since withdrawn bitcode, which makes the point better than the arrival
did, so the sentence now names both moves.
* The device-fragmentation section rested on two 2018 Android share numbers,
followed by a sentence conceding they would be stale on arrival. The
structural claim survives without them.
* The iOS developer fee was dated with "for 10 years at the time of this
writing".
* The UDID instructions walked the reader through iTunes, with a screenshot of
iTunes on iOS 9.3.5 that also exposed a real device serial and UDID. iTunes
has not existed on macOS since Catalina, and the signing chapter already gives
the current answer, so this now points there.
* The device build was "a right click away" via the IDE plugin, illustrated by a
menu still offering Blackberry, J2ME and Windows Phone builds. Replaced with
the `cn1:buildAndroid` and `cn1:buildIos` goals, taken from the mojo names.
Both screenshots are deleted, so find_unused_images.py stays satisfied.
Verified: asciidoctor at --failure-level WARN, Vale at suggestion level,
LanguageTool (status ok, 0 matches, run under JDK 17 rather than the JDK 8
false green), paragraph capitalization, snippets, xrefs, structure, links and
missing-code-blocks all clean.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Review caught the command I had just written. AbstractBuildWrapperMojo.execute()
opens with:
if (!project.isExecutionRoot()) {
getLog().info("Skipping execution for non-root project");
return;
}
and BuildAndroidMojo, BuildIosMojo and BuildWin32Mojo all inherit it unchanged.
Under `-pl common` the selected module is not the execution root, so the goal
logs that line and stops. The design is deliberate -- the wrapper re-invokes
Maven on the root pom itself (`request.setPomFile(new File("pom.xml"))`) -- so
naming a module both skips the wrapper and defeats its purpose.
Measured rather than reasoned, against scripts/hellocodenameone:
mvn -pl common ...:buildWin32 -> "Skipping execution for non-root project"
BUILD SUCCESS, nothing built
mvn ...:buildWin32 -> no skip line, proceeds into the reactor
A silent success is the worst failure mode for a getting-started instruction, so
the Introduction now says where to run it and warns about the module form
explicitly.
Working-With-Windows carried the same `-pl common` shape and is fixed with it --
it is where I copied the form from, so leaving it would reintroduce the defect
the next time someone follows the pattern.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
shai-almogand others added 2 commits September 2, 2026 18:35
Review checked the command this PR documents and found it still builds nothing.
The wrapper passes `codename1.platform` to its nested Maven run, and that
property is what activates the module profile in a generated project's root pom.
The profile is `win`, matching the value the win module itself declares:
<profile><id>win</id>
<activation><property>
<name>codename1.platform</name><value>win</value>
</property></activation>
<modules><module>win</module></modules>
BuildWin32Mojo and BuildWindowsDeviceMojo both passed "windows", which matches no
profile at all. Nothing else in the plugin reads the platform as "windows", so
the value was simply inert: the win module never joined the reactor and the
nested build reported success having produced no Windows binary. Every other
wrapper already agrees with its profile -- android, ios, javascript, linux and
javase all match -- so these two were the only ones out of step.
Verified by A/B against scripts/hellocodenameone, reading the NESTED reactor
rather than the outer one:
before hellocodenameone, -common, -javase <- no win module
after hellocodenameone, -common, -win
The build TARGET is a separate namespace and stays "windows-device"
(Executor.BUILD_TARGET_WINDOWS_NATIVE), which is correct.
SpotBugs over codenameone-maven-plugin regenerated: 0 findings.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…lost
Fixing BuildWin32Mojo made the sentence beside this snippet false: the goal now
submits a build, while the command the chapter leads with still could not. It
carried both defects at once --
mvn -pl common package -Dcodename1.platform=windows ...
-- `-pl common` builds that module instead of the reactor, so the win module is
never reached, and `windows` matches no profile even when the reactor is whole.
The two mistakes hid each other: with only the module selected, the platform
value had nothing left to activate.
Corrected to what the wrapper actually runs, read off AbstractBuildWrapperMojo:
goal `package`, `codename1.platform=win`, `codename1.buildTarget=windows-device`,
from the project root.
A/B against scripts/hellocodenameone, reading the reactor, which Maven prints
before it compiles:
old no win module in the reactor at all
new hellocodenameone, -common, -win
Both invocations then fail identically on this machine with "invalid target
release: 17", because tools/env.sh pins JDK 8 while the demo targets 17. That is
environmental and equal on both sides, so it does not affect the comparison.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@shai-almog
shai-almog merged commit a9c0b73 into devguide-guardsSep 2, 2026
6 of 19 checks passed
@shai-almog
shai-almog deleted the devguide-introduction branch September 2, 2026 15:38
Sign up for freeto 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

@shai-almog
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

The Introduction taught a dead IDE menu, an iTunes walkthrough and 2018 statistics - #5671

Merged
shai-almog merged 4 commits into
devguide-guardsfrom
devguide-introduction
Sep 2, 2026
Merged

The Introduction taught a dead IDE menu, an iTunes walkthrough and 2018 statistics#5671
shai-almog merged 4 commits into
devguide-guardsfrom
devguide-introduction

Conversation

@shai-almog

Copy link
Copy Markdown
Collaborator

Fourth PR in the developer-guide stack. Six corrections to the chapter a new developer reads first.

whatwhy it was wrong
JavaScript translationThe overview said TeaVM did the translation; the port section further down said ParparVM with TeaVM as a fallback. The port section is right — javascript.port is declared with parparvm as its default and teavm documented as "the original builder as a compatibility fallback".
http://teavm.org:[...]The stray colon made the macro a bare host, and the site serves TLS. Removed from the link ratchet, now 37.
BitcodeCited as something ParparVM absorbed without modification. Apple has since withdrawn bitcode — which makes the future-proofing point better than the arrival did — so the sentence now names both moves.
Device fragmentationRested on two 2018 Android share figures, followed by a sentence conceding they would be stale on arrival. The structural claim survives without them.
iOS developer feeDated with "for 10 years at the time of this writing".
UDIDWalked the reader through iTunes, which has not existed on macOS since Catalina. The screenshot also exposed a real device serial and UDID. signing.asciidoc already gives the current answer (Finder device summary, Apple Configurator), so this now cross-references it.
Device build"a right click away" via the IDE plugin, illustrated by a menu still offering Blackberry, J2ME and Windows Phone builds. Replaced with cn1:buildAndroid / cn1:buildIos, names taken from the mojo definitions rather than from prose.

Both dead screenshots are deleted in the same commit, so find_unused_images.py stays satisfied.

Two items the plan listed for this chapter turned out not to need work: the <<ApplicationLifecycle>> sidebar already exists (written earlier in this stack), and the malformed stackoverflow host is no longer present.

Verification

asciidoctor --failure-level WARN, Vale at suggestion level, LanguageTool (status: ok, 0 matches — run under JDK 17 rather than the JDK 8 path that reports a false green), paragraph capitalization, snippet validation, xrefs, structure, links and missing-code-blocks: all clean.

🤖 Generated with Claude Code

@chatgpt-codex-connector

chatgpt-codex-connectorBot commented Sep 2, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

ReviewStatusCommitReview trigger
📝 Code ReviewCompleted2026-09-02T15:37:31.325757Z18cc667New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:16bbebc80f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threaddocs/developer-guide/Introduction.asciidoc Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:cc57d1cfd6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threaddocs/developer-guide/Working-With-Windows.asciidoc
@github-actions

github-actionsBot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Developer Guide build artifacts are available for download from this workflow run:

Developer Guide quality checks:

  • AsciiDoc linter: No issues found (report)
  • Vale: No alerts found (report)
  • Paragraph capitalization: No paragraph capitalization issues (report)
  • LanguageTool: No grammar matches (report)
  • Image references: No unused images detected (report)

@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from ae956d3 to eecf05dCompareSeptember 2, 2026 11:58
@github-actions

Copy link
Copy Markdown
Contributor

Cloudflare Preview

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:dd501cd3aa

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threaddocs/developer-guide/Working-With-Windows.asciidoc
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from eecf05d to f81e4b1CompareSeptember 2, 2026 12:16
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from f81e4b1 to 335a54aCompareSeptember 2, 2026 12:29
@shai-almog

shai-almog commented Sep 2, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 151 screenshots: 151 matched.

Native Android coverage

  • 📊 Line coverage: 9.10% (9017/99118 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 8.88% (46522/523733), branch 3.50% (1739/49629), complexity 3.48% (1842/52924), method 5.34% (1487/27841), class 10.74% (400/3723)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6367 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.ClassReader – 0.00% (0/1524 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1187 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.MethodWriter – 0.00% (0/922 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/736 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • okio.okio.Buffer – 0.00% (0/687 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/625 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.Frame – 0.00% (0/570 lines covered)

✅ Native Android screenshot tests passed.

Native Android coverage

  • 📊 Line coverage: 9.10% (9017/99118 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 8.88% (46522/523733), branch 3.50% (1739/49629), complexity 3.48% (1842/52924), method 5.34% (1487/27841), class 10.74% (400/3723)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6367 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.ClassReader – 0.00% (0/1524 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1187 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.MethodWriter – 0.00% (0/922 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/736 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • okio.okio.Buffer – 0.00% (0/687 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/625 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.Frame – 0.00% (0/570 lines covered)

Benchmark Results

Detailed Performance Metrics

MetricDuration
SIMD kernel backendscalar fallback (no native SIMD)
SIMD int-add (64K x300)java 135ms / native 106ms = 1.2x speedup
SIMD float-mul (64K x300)java 94ms / native 64ms = 1.4x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathgated to scalar (CPU autovectorizes scalar; explicit SIMD not beneficial here)
Base64 CN1 encode54.000 ms
Base64 CN1 decode66.000 ms
Base64 native encode359.000 ms
Base64 encode ratio (CN1/native)0.150x (85.0% faster)
Base64 native decode291.000 ms
Base64 decode ratio (CN1/native)0.227x (77.3% faster)
Image encode benchmark statusskipped (SIMD unsupported)

@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from 335a54a to f915089CompareSeptember 2, 2026 13:06
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from f915089 to f0f0e4eCompareSeptember 2, 2026 13:21
@shai-almog

shai-almog commented Sep 2, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 181 screenshots: 181 matched.
✅ JavaScript-port screenshot tests passed.

@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from f0f0e4e to facd9edCompareSeptember 2, 2026 14:16
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from facd9ed to 15e0c1eCompareSeptember 2, 2026 14:42
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from 15e0c1e to 815afcfCompareSeptember 2, 2026 15:02
Base automatically changed from devguide-figure-harness to devguide-guardsSeptember 2, 2026 15:21
@shai-almog
shai-almogforce-pushed the devguide-introduction branch 3 times, most recently from bca6854 to ae6bbdfCompareSeptember 2, 2026 15:26
shai-almogand others added 2 commits September 2, 2026 18:35
…18 statistics
Six corrections to the chapter a new developer reads first:
* The JavaScript target was described twice and contradicted itself: the
overview said TeaVM did the translation, the port section said ParparVM with
TeaVM as a fallback. The port section is right -- `javascript.port` is
declared with `parparvm` as its default and `teavm` documented as "the
original builder as a compatibility fallback".
* `http://teavm.org:[TeaVM-based builder]` -- the stray colon made the macro a
bare host, and the site serves TLS. Removed from the link ratchet, which now
stands at 37.
* Bitcode was cited as something ParparVM absorbed without modification. Apple
has since withdrawn bitcode, which makes the point better than the arrival
did, so the sentence now names both moves.
* The device-fragmentation section rested on two 2018 Android share numbers,
followed by a sentence conceding they would be stale on arrival. The
structural claim survives without them.
* The iOS developer fee was dated with "for 10 years at the time of this
writing".
* The UDID instructions walked the reader through iTunes, with a screenshot of
iTunes on iOS 9.3.5 that also exposed a real device serial and UDID. iTunes
has not existed on macOS since Catalina, and the signing chapter already gives
the current answer, so this now points there.
* The device build was "a right click away" via the IDE plugin, illustrated by a
menu still offering Blackberry, J2ME and Windows Phone builds. Replaced with
the `cn1:buildAndroid` and `cn1:buildIos` goals, taken from the mojo names.
Both screenshots are deleted, so find_unused_images.py stays satisfied.
Verified: asciidoctor at --failure-level WARN, Vale at suggestion level,
LanguageTool (status ok, 0 matches, run under JDK 17 rather than the JDK 8
false green), paragraph capitalization, snippets, xrefs, structure, links and
missing-code-blocks all clean.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Review caught the command I had just written. AbstractBuildWrapperMojo.execute()
opens with:
if (!project.isExecutionRoot()) {
getLog().info("Skipping execution for non-root project");
return;
}
and BuildAndroidMojo, BuildIosMojo and BuildWin32Mojo all inherit it unchanged.
Under `-pl common` the selected module is not the execution root, so the goal
logs that line and stops. The design is deliberate -- the wrapper re-invokes
Maven on the root pom itself (`request.setPomFile(new File("pom.xml"))`) -- so
naming a module both skips the wrapper and defeats its purpose.
Measured rather than reasoned, against scripts/hellocodenameone:
mvn -pl common ...:buildWin32 -> "Skipping execution for non-root project"
BUILD SUCCESS, nothing built
mvn ...:buildWin32 -> no skip line, proceeds into the reactor
A silent success is the worst failure mode for a getting-started instruction, so
the Introduction now says where to run it and warns about the module form
explicitly.
Working-With-Windows carried the same `-pl common` shape and is fixed with it --
it is where I copied the form from, so leaving it would reintroduce the defect
the next time someone follows the pattern.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
shai-almogand others added 2 commits September 2, 2026 18:35
Review checked the command this PR documents and found it still builds nothing.
The wrapper passes `codename1.platform` to its nested Maven run, and that
property is what activates the module profile in a generated project's root pom.
The profile is `win`, matching the value the win module itself declares:
<profile><id>win</id>
<activation><property>
<name>codename1.platform</name><value>win</value>
</property></activation>
<modules><module>win</module></modules>
BuildWin32Mojo and BuildWindowsDeviceMojo both passed "windows", which matches no
profile at all. Nothing else in the plugin reads the platform as "windows", so
the value was simply inert: the win module never joined the reactor and the
nested build reported success having produced no Windows binary. Every other
wrapper already agrees with its profile -- android, ios, javascript, linux and
javase all match -- so these two were the only ones out of step.
Verified by A/B against scripts/hellocodenameone, reading the NESTED reactor
rather than the outer one:
before hellocodenameone, -common, -javase <- no win module
after hellocodenameone, -common, -win
The build TARGET is a separate namespace and stays "windows-device"
(Executor.BUILD_TARGET_WINDOWS_NATIVE), which is correct.
SpotBugs over codenameone-maven-plugin regenerated: 0 findings.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…lost
Fixing BuildWin32Mojo made the sentence beside this snippet false: the goal now
submits a build, while the command the chapter leads with still could not. It
carried both defects at once --
mvn -pl common package -Dcodename1.platform=windows ...
-- `-pl common` builds that module instead of the reactor, so the win module is
never reached, and `windows` matches no profile even when the reactor is whole.
The two mistakes hid each other: with only the module selected, the platform
value had nothing left to activate.
Corrected to what the wrapper actually runs, read off AbstractBuildWrapperMojo:
goal `package`, `codename1.platform=win`, `codename1.buildTarget=windows-device`,
from the project root.
A/B against scripts/hellocodenameone, reading the reactor, which Maven prints
before it compiles:
old no win module in the reactor at all
new hellocodenameone, -common, -win
Both invocations then fail identically on this machine with "invalid target
release: 17", because tools/env.sh pins JDK 8 while the demo targets 17. That is
environmental and equal on both sides, so it does not affect the comparison.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@shai-almog
shai-almog merged commit a9c0b73 into devguide-guardsSep 2, 2026
6 of 19 checks passed
@shai-almog
shai-almog deleted the devguide-introduction branch September 2, 2026 15:38
Sign up for freeto 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

@shai-almog
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

The Introduction taught a dead IDE menu, an iTunes walkthrough and 2018 statistics - #5671

Merged
shai-almog merged 4 commits into
devguide-guardsfrom
devguide-introduction
Sep 2, 2026
Merged

The Introduction taught a dead IDE menu, an iTunes walkthrough and 2018 statistics#5671
shai-almog merged 4 commits into
devguide-guardsfrom
devguide-introduction

Conversation

@shai-almog

Copy link
Copy Markdown
Collaborator

Fourth PR in the developer-guide stack. Six corrections to the chapter a new developer reads first.

whatwhy it was wrong
JavaScript translationThe overview said TeaVM did the translation; the port section further down said ParparVM with TeaVM as a fallback. The port section is right — javascript.port is declared with parparvm as its default and teavm documented as "the original builder as a compatibility fallback".
http://teavm.org:[...]The stray colon made the macro a bare host, and the site serves TLS. Removed from the link ratchet, now 37.
BitcodeCited as something ParparVM absorbed without modification. Apple has since withdrawn bitcode — which makes the future-proofing point better than the arrival did — so the sentence now names both moves.
Device fragmentationRested on two 2018 Android share figures, followed by a sentence conceding they would be stale on arrival. The structural claim survives without them.
iOS developer feeDated with "for 10 years at the time of this writing".
UDIDWalked the reader through iTunes, which has not existed on macOS since Catalina. The screenshot also exposed a real device serial and UDID. signing.asciidoc already gives the current answer (Finder device summary, Apple Configurator), so this now cross-references it.
Device build"a right click away" via the IDE plugin, illustrated by a menu still offering Blackberry, J2ME and Windows Phone builds. Replaced with cn1:buildAndroid / cn1:buildIos, names taken from the mojo definitions rather than from prose.

Both dead screenshots are deleted in the same commit, so find_unused_images.py stays satisfied.

Two items the plan listed for this chapter turned out not to need work: the <<ApplicationLifecycle>> sidebar already exists (written earlier in this stack), and the malformed stackoverflow host is no longer present.

Verification

asciidoctor --failure-level WARN, Vale at suggestion level, LanguageTool (status: ok, 0 matches — run under JDK 17 rather than the JDK 8 path that reports a false green), paragraph capitalization, snippet validation, xrefs, structure, links and missing-code-blocks: all clean.

🤖 Generated with Claude Code

@chatgpt-codex-connector

chatgpt-codex-connectorBot commented Sep 2, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

ReviewStatusCommitReview trigger
📝 Code ReviewCompleted2026-09-02T15:37:31.325757Z18cc667New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:16bbebc80f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threaddocs/developer-guide/Introduction.asciidoc Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:cc57d1cfd6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threaddocs/developer-guide/Working-With-Windows.asciidoc
@github-actions

github-actionsBot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Developer Guide build artifacts are available for download from this workflow run:

Developer Guide quality checks:

  • AsciiDoc linter: No issues found (report)
  • Vale: No alerts found (report)
  • Paragraph capitalization: No paragraph capitalization issues (report)
  • LanguageTool: No grammar matches (report)
  • Image references: No unused images detected (report)

@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from ae956d3 to eecf05dCompareSeptember 2, 2026 11:58
@github-actions

Copy link
Copy Markdown
Contributor

Cloudflare Preview

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:dd501cd3aa

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threaddocs/developer-guide/Working-With-Windows.asciidoc
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from eecf05d to f81e4b1CompareSeptember 2, 2026 12:16
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from f81e4b1 to 335a54aCompareSeptember 2, 2026 12:29
@shai-almog

shai-almog commented Sep 2, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 151 screenshots: 151 matched.

Native Android coverage

  • 📊 Line coverage: 9.10% (9017/99118 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 8.88% (46522/523733), branch 3.50% (1739/49629), complexity 3.48% (1842/52924), method 5.34% (1487/27841), class 10.74% (400/3723)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6367 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.ClassReader – 0.00% (0/1524 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1187 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.MethodWriter – 0.00% (0/922 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/736 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • okio.okio.Buffer – 0.00% (0/687 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/625 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.Frame – 0.00% (0/570 lines covered)

✅ Native Android screenshot tests passed.

Native Android coverage

  • 📊 Line coverage: 9.10% (9017/99118 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 8.88% (46522/523733), branch 3.50% (1739/49629), complexity 3.48% (1842/52924), method 5.34% (1487/27841), class 10.74% (400/3723)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6367 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.ClassReader – 0.00% (0/1524 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1187 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.MethodWriter – 0.00% (0/922 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/736 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • okio.okio.Buffer – 0.00% (0/687 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/625 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.Frame – 0.00% (0/570 lines covered)

Benchmark Results

Detailed Performance Metrics

MetricDuration
SIMD kernel backendscalar fallback (no native SIMD)
SIMD int-add (64K x300)java 135ms / native 106ms = 1.2x speedup
SIMD float-mul (64K x300)java 94ms / native 64ms = 1.4x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathgated to scalar (CPU autovectorizes scalar; explicit SIMD not beneficial here)
Base64 CN1 encode54.000 ms
Base64 CN1 decode66.000 ms
Base64 native encode359.000 ms
Base64 encode ratio (CN1/native)0.150x (85.0% faster)
Base64 native decode291.000 ms
Base64 decode ratio (CN1/native)0.227x (77.3% faster)
Image encode benchmark statusskipped (SIMD unsupported)

@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from 335a54a to f915089CompareSeptember 2, 2026 13:06
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from f915089 to f0f0e4eCompareSeptember 2, 2026 13:21
@shai-almog

shai-almog commented Sep 2, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 181 screenshots: 181 matched.
✅ JavaScript-port screenshot tests passed.

@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from f0f0e4e to facd9edCompareSeptember 2, 2026 14:16
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from facd9ed to 15e0c1eCompareSeptember 2, 2026 14:42
@shai-almog
shai-almogforce-pushed the devguide-figure-harness branch from 15e0c1e to 815afcfCompareSeptember 2, 2026 15:02
Base automatically changed from devguide-figure-harness to devguide-guardsSeptember 2, 2026 15:21
@shai-almog
shai-almogforce-pushed the devguide-introduction branch 3 times, most recently from bca6854 to ae6bbdfCompareSeptember 2, 2026 15:26
shai-almogand others added 2 commits September 2, 2026 18:35
…18 statistics
Six corrections to the chapter a new developer reads first:
* The JavaScript target was described twice and contradicted itself: the
overview said TeaVM did the translation, the port section said ParparVM with
TeaVM as a fallback. The port section is right -- `javascript.port` is
declared with `parparvm` as its default and `teavm` documented as "the
original builder as a compatibility fallback".
* `http://teavm.org:[TeaVM-based builder]` -- the stray colon made the macro a
bare host, and the site serves TLS. Removed from the link ratchet, which now
stands at 37.
* Bitcode was cited as something ParparVM absorbed without modification. Apple
has since withdrawn bitcode, which makes the point better than the arrival
did, so the sentence now names both moves.
* The device-fragmentation section rested on two 2018 Android share numbers,
followed by a sentence conceding they would be stale on arrival. The
structural claim survives without them.
* The iOS developer fee was dated with "for 10 years at the time of this
writing".
* The UDID instructions walked the reader through iTunes, with a screenshot of
iTunes on iOS 9.3.5 that also exposed a real device serial and UDID. iTunes
has not existed on macOS since Catalina, and the signing chapter already gives
the current answer, so this now points there.
* The device build was "a right click away" via the IDE plugin, illustrated by a
menu still offering Blackberry, J2ME and Windows Phone builds. Replaced with
the `cn1:buildAndroid` and `cn1:buildIos` goals, taken from the mojo names.
Both screenshots are deleted, so find_unused_images.py stays satisfied.
Verified: asciidoctor at --failure-level WARN, Vale at suggestion level,
LanguageTool (status ok, 0 matches, run under JDK 17 rather than the JDK 8
false green), paragraph capitalization, snippets, xrefs, structure, links and
missing-code-blocks all clean.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Review caught the command I had just written. AbstractBuildWrapperMojo.execute()
opens with:
if (!project.isExecutionRoot()) {
getLog().info("Skipping execution for non-root project");
return;
}
and BuildAndroidMojo, BuildIosMojo and BuildWin32Mojo all inherit it unchanged.
Under `-pl common` the selected module is not the execution root, so the goal
logs that line and stops. The design is deliberate -- the wrapper re-invokes
Maven on the root pom itself (`request.setPomFile(new File("pom.xml"))`) -- so
naming a module both skips the wrapper and defeats its purpose.
Measured rather than reasoned, against scripts/hellocodenameone:
mvn -pl common ...:buildWin32 -> "Skipping execution for non-root project"
BUILD SUCCESS, nothing built
mvn ...:buildWin32 -> no skip line, proceeds into the reactor
A silent success is the worst failure mode for a getting-started instruction, so
the Introduction now says where to run it and warns about the module form
explicitly.
Working-With-Windows carried the same `-pl common` shape and is fixed with it --
it is where I copied the form from, so leaving it would reintroduce the defect
the next time someone follows the pattern.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
shai-almogand others added 2 commits September 2, 2026 18:35
Review checked the command this PR documents and found it still builds nothing.
The wrapper passes `codename1.platform` to its nested Maven run, and that
property is what activates the module profile in a generated project's root pom.
The profile is `win`, matching the value the win module itself declares:
<profile><id>win</id>
<activation><property>
<name>codename1.platform</name><value>win</value>
</property></activation>
<modules><module>win</module></modules>
BuildWin32Mojo and BuildWindowsDeviceMojo both passed "windows", which matches no
profile at all. Nothing else in the plugin reads the platform as "windows", so
the value was simply inert: the win module never joined the reactor and the
nested build reported success having produced no Windows binary. Every other
wrapper already agrees with its profile -- android, ios, javascript, linux and
javase all match -- so these two were the only ones out of step.
Verified by A/B against scripts/hellocodenameone, reading the NESTED reactor
rather than the outer one:
before hellocodenameone, -common, -javase <- no win module
after hellocodenameone, -common, -win
The build TARGET is a separate namespace and stays "windows-device"
(Executor.BUILD_TARGET_WINDOWS_NATIVE), which is correct.
SpotBugs over codenameone-maven-plugin regenerated: 0 findings.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…lost
Fixing BuildWin32Mojo made the sentence beside this snippet false: the goal now
submits a build, while the command the chapter leads with still could not. It
carried both defects at once --
mvn -pl common package -Dcodename1.platform=windows ...
-- `-pl common` builds that module instead of the reactor, so the win module is
never reached, and `windows` matches no profile even when the reactor is whole.
The two mistakes hid each other: with only the module selected, the platform
value had nothing left to activate.
Corrected to what the wrapper actually runs, read off AbstractBuildWrapperMojo:
goal `package`, `codename1.platform=win`, `codename1.buildTarget=windows-device`,
from the project root.
A/B against scripts/hellocodenameone, reading the reactor, which Maven prints
before it compiles:
old no win module in the reactor at all
new hellocodenameone, -common, -win
Both invocations then fail identically on this machine with "invalid target
release: 17", because tools/env.sh pins JDK 8 while the demo targets 17. That is
environmental and equal on both sides, so it does not affect the comparison.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@shai-almog
shai-almog merged commit a9c0b73 into devguide-guardsSep 2, 2026
6 of 19 checks passed
@shai-almog
shai-almog deleted the devguide-introduction branch September 2, 2026 15:38
Sign up for freeto 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

@shai-almog