{
  "taskId": "086",
  "timestamp": "2026-11-06T07:50:46.503Z",
  "root": "<project>",
  "output": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520",
  "versions": {
    "java": {
      "executable": "java",
      "args": [
        "-version"
      ],
      "command": "\"java\" \"-version\"",
      "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520",
      "timeoutMs": 15000,
      "elapsedMs": 269,
      "exitCode": 0,
      "signal": null,
      "error": null,
      "stdout": "",
      "stderr": "NOTE: Picked up JDK_JAVA_OPTIONS: \r\nPicked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \njava version \"21.0.12\" 2026-07-21 LTS\r\nJava(TM) SE Runtime Environment (build 21.0.12+7-LTS-205)\r\nJava HotSpot(TM) 64-Bit Server VM (build 21.0.12+7-LTS-205, mixed mode, sharing)\r\n"
    },
    "javac": {
      "executable": "javac",
      "args": [
        "-version"
      ],
      "command": "\"javac\" \"-version\"",
      "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520",
      "timeoutMs": 15000,
      "elapsedMs": 298,
      "exitCode": 0,
      "signal": null,
      "error": null,
      "stdout": "javac 21.0.12\r\n",
      "stderr": "Picked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \n"
    }
  },
  "jdk21": true,
  "sources": [
    {
      "file": "examples/java-advanced/aqs-reentrantlock/LockDemo.java",
      "sha256": "843cbf7e8990545509549a89f14adc2e65479e6d9597d04b8025ff35c5d38cbe"
    },
    {
      "file": "examples/java-advanced/completablefuture/CompletableFutureDemo.java",
      "sha256": "f5c44bc4fdd409c0e765082a580b015e42db4a3fd9c9618677e56544d74cf311"
    },
    {
      "file": "examples/java-advanced/io-streams/IoStreamsDemo.java",
      "sha256": "2105818580bae36346cdd97e1bab01909fcc69207e7301221d3bab8fd0a26dd2"
    },
    {
      "file": "examples/java-advanced/jdk17-to21/NonExhaustive.java",
      "sha256": "d83a00469b1cb56d2ce401280f0cd243fc6fdbabe4afca6887bed168179badc8"
    },
    {
      "file": "examples/java-advanced/jdk17-to21/PreviewMain.java",
      "sha256": "822042f1ddb7408993447a3820da85d03555f1ad7f2bb6c4ef00a12bab7fa4da"
    },
    {
      "file": "examples/java-advanced/jdk17-to21/UpgradeDemo.java",
      "sha256": "95e6e8d24c0c47e4ace1eaaf9dbcf61ce215e9c650ed93695b9038e1858bdaa1"
    },
    {
      "file": "examples/java-advanced/nio-buffer-channel/BufferChannelDemo.java",
      "sha256": "ddbc691f36ccd3124afbbc2e995f4db13839d56321e1080369ffc3c2f202496f"
    },
    {
      "file": "examples/java-advanced/nio-file-channel/FileChannelDemo.java",
      "sha256": "9898b2e05bcb5468b2244d8526c94160401db9fa11f46684ca6fe19059092a99"
    },
    {
      "file": "examples/java-advanced/nio-selector/SelectorDemo.java",
      "sha256": "45e2880d611dd4d6af1a5187c6bee7065cc0b0d244ec54a85bd0836fb53f18f2"
    },
    {
      "file": "examples/java-advanced/threadlocal/ThreadLocalDemo.java",
      "sha256": "51bbce6fb176fb9e7e11a448c1d494bd8291b2034196cf7983c6e2e8d8f2f87e"
    },
    {
      "file": "examples/java-advanced/virtual-threads-jdk21/PinningDemo.java",
      "sha256": "8f273b3839c9489e8d1c24c2ecfb675b7aae1650a0b297e1036cd216486a5be7"
    },
    {
      "file": "examples/java-advanced/virtual-threads-jdk21/VirtualThreadsDemo.java",
      "sha256": "d691b618982f0aee2824b12911b68bad93659578f5c94b742853a0a94a9a1ab9"
    }
  ],
  "unknown": [],
  "status": "pass",
  "policy": {
    "timeoutMsPerProcess": 15000,
    "noExternalNetwork": true,
    "loopbackServers": "explicit opt-in; reviewed ephemeral 127.0.0.1 server only",
    "environmentJavaOptionsCleared": true,
    "isolation": "Fresh classpath, working/data/temp directory per example per run; no OS network sandbox. Only reviewed allowlisted sources execute."
  },
  "results": [
    {
      "id": "aqs-reentrantlock",
      "specification": {
        "id": "aqs-reentrantlock",
        "sources": [
          "examples/java-advanced/aqs-reentrantlock/LockDemo.java"
        ],
        "instructions": "src/tutorials/aqs-reentrantlock.md",
        "compile": {
          "exit": "zero",
          "contains": []
        },
        "runs": [
          {
            "main": "LockDemo",
            "args": [],
            "vmArgs": [],
            "expected": {
              "exit": "zero",
              "contains": [
                "PASS",
                "after await: holds=2",
                "EXPECTED await without ownership: IllegalMonitorStateException"
              ]
            }
          }
        ]
      },
      "sources": [
        {
          "file": "examples/java-advanced/aqs-reentrantlock/LockDemo.java",
          "sha256": "843cbf7e8990545509549a89f14adc2e65479e6d9597d04b8025ff35c5d38cbe"
        }
      ],
      "steps": [
        {
          "executable": "javac",
          "args": [
            "-J-Duser.language=en",
            "-J-Duser.country=US",
            "-encoding",
            "UTF-8",
            "--release",
            "21",
            "-classpath",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\aqs-reentrantlock\\classes",
            "-sourcepath",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\aqs-reentrantlock",
            "-d",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\aqs-reentrantlock\\classes",
            "<project>\\examples\\java-advanced\\aqs-reentrantlock\\LockDemo.java"
          ],
          "command": "\"javac\" \"-J-Duser.language=en\" \"-J-Duser.country=US\" \"-encoding\" \"UTF-8\" \"--release\" \"21\" \"-classpath\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\aqs-reentrantlock\\\\classes\" \"-sourcepath\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\aqs-reentrantlock\" \"-d\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\aqs-reentrantlock\\\\classes\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\examples\\\\java-advanced\\\\aqs-reentrantlock\\\\LockDemo.java\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\aqs-reentrantlock",
          "timeoutMs": 15000,
          "elapsedMs": 847,
          "exitCode": 0,
          "signal": null,
          "error": null,
          "stdout": "",
          "stderr": "Picked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \n",
          "expected": {
            "exit": "zero",
            "contains": []
          },
          "passed": true
        },
        {
          "executable": "java",
          "args": [
            "-Dfile.encoding=UTF-8",
            "-Djava.io.tmpdir=<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\aqs-reentrantlock\\tmp",
            "-ea",
            "-cp",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\aqs-reentrantlock\\classes",
            "LockDemo"
          ],
          "command": "\"java\" \"-Dfile.encoding=UTF-8\" \"-Djava.io.tmpdir=D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\aqs-reentrantlock\\\\tmp\" \"-ea\" \"-cp\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\aqs-reentrantlock\\\\classes\" \"LockDemo\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\aqs-reentrantlock",
          "timeoutMs": 15000,
          "elapsedMs": 180,
          "exitCode": 0,
          "signal": null,
          "error": null,
          "stdout": "before await: holds=2\r\nafter signal: signaller still owns lock\r\nafter await: holds=2\r\nafter partial unlock: holds=1\r\nafter final unlock: locked=false\r\nEXPECTED unlock without ownership: IllegalMonitorStateException\r\nEXPECTED signal without ownership: IllegalMonitorStateException\r\nEXPECTED await without ownership: IllegalMonitorStateException\r\nPASS\r\n",
          "stderr": "NOTE: Picked up JDK_JAVA_OPTIONS: \r\nPicked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \n",
          "expected": {
            "exit": "zero",
            "contains": [
              "PASS",
              "after await: holds=2",
              "EXPECTED await without ownership: IllegalMonitorStateException"
            ]
          },
          "passed": true
        }
      ],
      "status": "pass"
    },
    {
      "id": "completablefuture",
      "specification": {
        "id": "completablefuture",
        "sources": [
          "examples/java-advanced/completablefuture/CompletableFutureDemo.java"
        ],
        "instructions": "src/tutorials/completablefuture.md",
        "compile": {
          "exit": "zero",
          "contains": []
        },
        "runs": [
          {
            "main": "CompletableFutureDemo",
            "args": [],
            "vmArgs": [],
            "expected": {
              "exit": "zero",
              "contains": [
                "PASS",
                "allOf results=AB",
                "EXPECTED_FAILURE timeout: TimeoutException; underlyingFinished=false",
                "after release: underlyingFinished=true; futureStillExceptional=true"
              ]
            }
          }
        ]
      },
      "sources": [
        {
          "file": "examples/java-advanced/completablefuture/CompletableFutureDemo.java",
          "sha256": "f5c44bc4fdd409c0e765082a580b015e42db4a3fd9c9618677e56544d74cf311"
        }
      ],
      "steps": [
        {
          "executable": "javac",
          "args": [
            "-J-Duser.language=en",
            "-J-Duser.country=US",
            "-encoding",
            "UTF-8",
            "--release",
            "21",
            "-classpath",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\completablefuture\\classes",
            "-sourcepath",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\completablefuture",
            "-d",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\completablefuture\\classes",
            "<project>\\examples\\java-advanced\\completablefuture\\CompletableFutureDemo.java"
          ],
          "command": "\"javac\" \"-J-Duser.language=en\" \"-J-Duser.country=US\" \"-encoding\" \"UTF-8\" \"--release\" \"21\" \"-classpath\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\completablefuture\\\\classes\" \"-sourcepath\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\completablefuture\" \"-d\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\completablefuture\\\\classes\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\examples\\\\java-advanced\\\\completablefuture\\\\CompletableFutureDemo.java\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\completablefuture",
          "timeoutMs": 15000,
          "elapsedMs": 992,
          "exitCode": 0,
          "signal": null,
          "error": null,
          "stdout": "",
          "stderr": "Picked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \n",
          "expected": {
            "exit": "zero",
            "contains": []
          },
          "passed": true
        },
        {
          "executable": "java",
          "args": [
            "-Dfile.encoding=UTF-8",
            "-Djava.io.tmpdir=<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\completablefuture\\tmp",
            "-ea",
            "-cp",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\completablefuture\\classes",
            "CompletableFutureDemo"
          ],
          "command": "\"java\" \"-Dfile.encoding=UTF-8\" \"-Djava.io.tmpdir=D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\completablefuture\\\\tmp\" \"-ea\" \"-cp\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\completablefuture\\\\classes\" \"CompletableFutureDemo\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\completablefuture",
          "timeoutMs": 15000,
          "elapsedMs": 289,
          "exitCode": 0,
          "signal": null,
          "error": null,
          "stdout": "apply=user-7; nested=user-7; compose=user-7; explicitExecutor=true\r\nallOf results=AB\r\nallOf after one failure: done=false\r\nEXPECTED_FAILURE allOf: IllegalStateException\r\nexceptionally=fallback; handle=handled; whenComplete=exceptional\r\nEXPECTED_FAILURE timeout: TimeoutException; underlyingFinished=false\r\nafter release: underlyingFinished=true; futureStillExceptional=true\r\nPASS\r\n",
          "stderr": "NOTE: Picked up JDK_JAVA_OPTIONS: \r\nPicked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \n",
          "expected": {
            "exit": "zero",
            "contains": [
              "PASS",
              "allOf results=AB",
              "EXPECTED_FAILURE timeout: TimeoutException; underlyingFinished=false",
              "after release: underlyingFinished=true; futureStillExceptional=true"
            ]
          },
          "passed": true
        }
      ],
      "status": "pass"
    },
    {
      "id": "io-streams",
      "specification": {
        "id": "io-streams",
        "sources": [
          "examples/java-advanced/io-streams/IoStreamsDemo.java"
        ],
        "instructions": "src/tutorials/io-streams.md",
        "compile": {
          "exit": "zero",
          "contains": []
        },
        "runs": [
          {
            "main": "IoStreamsDemo",
            "args": [],
            "vmArgs": [],
            "expected": {
              "exit": "zero",
              "contains": [
                "stream=[U+0041, U+4E2D, U+0042]",
                "suppressed=[close second, close first]"
              ]
            }
          },
          {
            "main": "IoStreamsDemo",
            "args": [
              "truncated"
            ],
            "vmArgs": [],
            "expected": {
              "exit": "nonzero",
              "contains": [
                "MalformedInputException"
              ]
            }
          }
        ]
      },
      "sources": [
        {
          "file": "examples/java-advanced/io-streams/IoStreamsDemo.java",
          "sha256": "2105818580bae36346cdd97e1bab01909fcc69207e7301221d3bab8fd0a26dd2"
        }
      ],
      "steps": [
        {
          "executable": "javac",
          "args": [
            "-J-Duser.language=en",
            "-J-Duser.country=US",
            "-encoding",
            "UTF-8",
            "--release",
            "21",
            "-classpath",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\io-streams\\classes",
            "-sourcepath",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\io-streams",
            "-d",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\io-streams\\classes",
            "<project>\\examples\\java-advanced\\io-streams\\IoStreamsDemo.java"
          ],
          "command": "\"javac\" \"-J-Duser.language=en\" \"-J-Duser.country=US\" \"-encoding\" \"UTF-8\" \"--release\" \"21\" \"-classpath\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\io-streams\\\\classes\" \"-sourcepath\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\io-streams\" \"-d\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\io-streams\\\\classes\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\examples\\\\java-advanced\\\\io-streams\\\\IoStreamsDemo.java\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\io-streams",
          "timeoutMs": 15000,
          "elapsedMs": 1231,
          "exitCode": 0,
          "signal": null,
          "error": null,
          "stdout": "",
          "stderr": "Picked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \n",
          "expected": {
            "exit": "zero",
            "contains": []
          },
          "passed": true
        },
        {
          "executable": "java",
          "args": [
            "-Dfile.encoding=UTF-8",
            "-Djava.io.tmpdir=<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\io-streams\\tmp",
            "-ea",
            "-cp",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\io-streams\\classes",
            "IoStreamsDemo"
          ],
          "command": "\"java\" \"-Dfile.encoding=UTF-8\" \"-Djava.io.tmpdir=D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\io-streams\\\\tmp\" \"-ea\" \"-cp\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\io-streams\\\\classes\" \"IoStreamsDemo\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\io-streams",
          "timeoutMs": 15000,
          "elapsedMs": 250,
          "exitCode": 0,
          "signal": null,
          "error": null,
          "stdout": "per-chunk=[U+0041, U+FFFD, U+FFFD, U+FFFD, U+0042]\r\nstream=[U+0041, U+4E2D, U+0042]\r\nemoji char-units=2, code-points=1\r\nbefore flush=0\r\nafter flush=5\r\nclose second\r\nclose first\r\nprimary=body\r\nsuppressed=[close second, close first]\r\n",
          "stderr": "NOTE: Picked up JDK_JAVA_OPTIONS: \r\nPicked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \n",
          "expected": {
            "exit": "zero",
            "contains": [
              "stream=[U+0041, U+4E2D, U+0042]",
              "suppressed=[close second, close first]"
            ]
          },
          "passed": true
        },
        {
          "executable": "java",
          "args": [
            "-Dfile.encoding=UTF-8",
            "-Djava.io.tmpdir=<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\io-streams\\tmp",
            "-ea",
            "-cp",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\io-streams\\classes",
            "IoStreamsDemo",
            "truncated"
          ],
          "command": "\"java\" \"-Dfile.encoding=UTF-8\" \"-Djava.io.tmpdir=D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\io-streams\\\\tmp\" \"-ea\" \"-cp\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\io-streams\\\\classes\" \"IoStreamsDemo\" \"truncated\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\io-streams",
          "timeoutMs": 15000,
          "elapsedMs": 205,
          "exitCode": 1,
          "signal": null,
          "error": null,
          "stdout": "",
          "stderr": "NOTE: Picked up JDK_JAVA_OPTIONS: \r\nPicked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \nException in thread \"main\" java.nio.charset.MalformedInputException: Input length = 2\r\n\tat java.base/java.nio.charset.CoderResult.throwException(CoderResult.java:279)\r\n\tat java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:405)\r\n\tat java.base/sun.nio.cs.StreamDecoder.lockedRead(StreamDecoder.java:217)\r\n\tat java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:171)\r\n\tat java.base/java.io.InputStreamReader.read(InputStreamReader.java:188)\r\n\tat java.base/java.io.BufferedReader.fill(BufferedReader.java:160)\r\n\tat java.base/java.io.BufferedReader.read1(BufferedReader.java:225)\r\n\tat java.base/java.io.BufferedReader.implRead(BufferedReader.java:314)\r\n\tat java.base/java.io.BufferedReader.read(BufferedReader.java:296)\r\n\tat java.base/java.io.Reader.read(Reader.java:265)\r\n\tat IoStreamsDemo.readText(IoStreamsDemo.java:24)\r\n\tat IoStreamsDemo.main(IoStreamsDemo.java:48)\r\n",
          "expected": {
            "exit": "nonzero",
            "contains": [
              "MalformedInputException"
            ]
          },
          "passed": true
        }
      ],
      "status": "pass"
    },
    {
      "id": "jdk21-upgrade",
      "specification": {
        "id": "jdk21-upgrade",
        "sources": [
          "examples/java-advanced/jdk17-to21/UpgradeDemo.java"
        ],
        "instructions": "src/tutorials/jdk17-to21.md",
        "compile": {
          "exit": "zero",
          "contains": []
        },
        "runs": [
          {
            "main": "UpgradeDemo",
            "args": [],
            "vmArgs": [],
            "expected": {
              "exit": "zero",
              "contains": [
                "virtual=true, ok:java21",
                "error:503",
                "empty",
                "missing"
              ]
            }
          }
        ]
      },
      "sources": [
        {
          "file": "examples/java-advanced/jdk17-to21/UpgradeDemo.java",
          "sha256": "95e6e8d24c0c47e4ace1eaaf9dbcf61ce215e9c650ed93695b9038e1858bdaa1"
        }
      ],
      "steps": [
        {
          "executable": "javac",
          "args": [
            "-J-Duser.language=en",
            "-J-Duser.country=US",
            "-encoding",
            "UTF-8",
            "--release",
            "21",
            "-classpath",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\jdk21-upgrade\\classes",
            "-sourcepath",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\jdk21-upgrade",
            "-d",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\jdk21-upgrade\\classes",
            "<project>\\examples\\java-advanced\\jdk17-to21\\UpgradeDemo.java"
          ],
          "command": "\"javac\" \"-J-Duser.language=en\" \"-J-Duser.country=US\" \"-encoding\" \"UTF-8\" \"--release\" \"21\" \"-classpath\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\jdk21-upgrade\\\\classes\" \"-sourcepath\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\jdk21-upgrade\" \"-d\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\jdk21-upgrade\\\\classes\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\examples\\\\java-advanced\\\\jdk17-to21\\\\UpgradeDemo.java\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\jdk21-upgrade",
          "timeoutMs": 15000,
          "elapsedMs": 820,
          "exitCode": 0,
          "signal": null,
          "error": null,
          "stdout": "",
          "stderr": "Picked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \n",
          "expected": {
            "exit": "zero",
            "contains": []
          },
          "passed": true
        },
        {
          "executable": "java",
          "args": [
            "-Dfile.encoding=UTF-8",
            "-Djava.io.tmpdir=<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\jdk21-upgrade\\tmp",
            "-ea",
            "-cp",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\jdk21-upgrade\\classes",
            "UpgradeDemo"
          ],
          "command": "\"java\" \"-Dfile.encoding=UTF-8\" \"-Djava.io.tmpdir=D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\jdk21-upgrade\\\\tmp\" \"-ea\" \"-cp\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\jdk21-upgrade\\\\classes\" \"UpgradeDemo\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\jdk21-upgrade",
          "timeoutMs": 15000,
          "elapsedMs": 244,
          "exitCode": 0,
          "signal": null,
          "error": null,
          "stdout": "instanceof=java21\r\nvirtual=true, ok:java21\r\nerror:503\r\nempty\r\nmissing\r\n",
          "stderr": "NOTE: Picked up JDK_JAVA_OPTIONS: \r\nPicked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \n",
          "expected": {
            "exit": "zero",
            "contains": [
              "virtual=true, ok:java21",
              "error:503",
              "empty",
              "missing"
            ]
          },
          "passed": true
        }
      ],
      "status": "pass"
    },
    {
      "id": "jdk21-non-exhaustive",
      "specification": {
        "id": "jdk21-non-exhaustive",
        "sources": [
          "examples/java-advanced/jdk17-to21/UpgradeDemo.java",
          "examples/java-advanced/jdk17-to21/NonExhaustive.java"
        ],
        "instructions": "src/tutorials/jdk17-to21.md",
        "compile": {
          "exit": "nonzero",
          "contains": [
            "does not cover all possible input values"
          ]
        },
        "runs": [],
        "expectedCompileFailure": true,
        "reason": "NonExhaustive intentionally omits Failure; compile with UpgradeDemo dependency."
      },
      "sources": [
        {
          "file": "examples/java-advanced/jdk17-to21/NonExhaustive.java",
          "sha256": "d83a00469b1cb56d2ce401280f0cd243fc6fdbabe4afca6887bed168179badc8"
        },
        {
          "file": "examples/java-advanced/jdk17-to21/UpgradeDemo.java",
          "sha256": "95e6e8d24c0c47e4ace1eaaf9dbcf61ce215e9c650ed93695b9038e1858bdaa1"
        }
      ],
      "steps": [
        {
          "executable": "javac",
          "args": [
            "-J-Duser.language=en",
            "-J-Duser.country=US",
            "-encoding",
            "UTF-8",
            "--release",
            "21",
            "-classpath",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\jdk21-non-exhaustive\\classes",
            "-sourcepath",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\jdk21-non-exhaustive",
            "-d",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\jdk21-non-exhaustive\\classes",
            "<project>\\examples\\java-advanced\\jdk17-to21\\UpgradeDemo.java",
            "<project>\\examples\\java-advanced\\jdk17-to21\\NonExhaustive.java"
          ],
          "command": "\"javac\" \"-J-Duser.language=en\" \"-J-Duser.country=US\" \"-encoding\" \"UTF-8\" \"--release\" \"21\" \"-classpath\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\jdk21-non-exhaustive\\\\classes\" \"-sourcepath\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\jdk21-non-exhaustive\" \"-d\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\jdk21-non-exhaustive\\\\classes\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\examples\\\\java-advanced\\\\jdk17-to21\\\\UpgradeDemo.java\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\examples\\\\java-advanced\\\\jdk17-to21\\\\NonExhaustive.java\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\jdk21-non-exhaustive",
          "timeoutMs": 15000,
          "elapsedMs": 1107,
          "exitCode": 1,
          "signal": null,
          "error": null,
          "stdout": "",
          "stderr": "Picked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \n<project>\\examples\\java-advanced\\jdk17-to21\\NonExhaustive.java:4: error: the switch expression does not cover all possible input values\r\n        return switch (result) {\r\n               ^\r\n1 error\r\n",
          "expected": {
            "exit": "nonzero",
            "contains": [
              "does not cover all possible input values"
            ]
          },
          "passed": true
        }
      ],
      "status": "pass-expected-compile-failure"
    },
    {
      "id": "jdk21-preview-disabled",
      "specification": {
        "id": "jdk21-preview-disabled",
        "sources": [
          "examples/java-advanced/jdk17-to21/PreviewMain.java"
        ],
        "instructions": "src/tutorials/jdk17-to21.md",
        "compile": {
          "exit": "nonzero",
          "contains": [
            "preview feature",
            "disabled by default"
          ]
        },
        "runs": [],
        "expectedCompileFailure": true,
        "reason": "Java 21 unnamed class requires preview."
      },
      "sources": [
        {
          "file": "examples/java-advanced/jdk17-to21/PreviewMain.java",
          "sha256": "822042f1ddb7408993447a3820da85d03555f1ad7f2bb6c4ef00a12bab7fa4da"
        }
      ],
      "steps": [
        {
          "executable": "javac",
          "args": [
            "-J-Duser.language=en",
            "-J-Duser.country=US",
            "-encoding",
            "UTF-8",
            "--release",
            "21",
            "-classpath",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\jdk21-preview-disabled\\classes",
            "-sourcepath",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\jdk21-preview-disabled",
            "-d",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\jdk21-preview-disabled\\classes",
            "<project>\\examples\\java-advanced\\jdk17-to21\\PreviewMain.java"
          ],
          "command": "\"javac\" \"-J-Duser.language=en\" \"-J-Duser.country=US\" \"-encoding\" \"UTF-8\" \"--release\" \"21\" \"-classpath\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\jdk21-preview-disabled\\\\classes\" \"-sourcepath\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\jdk21-preview-disabled\" \"-d\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\jdk21-preview-disabled\\\\classes\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\examples\\\\java-advanced\\\\jdk17-to21\\\\PreviewMain.java\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\jdk21-preview-disabled",
          "timeoutMs": 15000,
          "elapsedMs": 617,
          "exitCode": 1,
          "signal": null,
          "error": null,
          "stdout": "",
          "stderr": "Picked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \n<project>\\examples\\java-advanced\\jdk17-to21\\PreviewMain.java:2: error: unnamed classes are a preview feature and are disabled by default.\r\nvoid main() {\r\n^\r\n  (use --enable-preview to enable unnamed classes)\r\n1 error\r\n",
          "expected": {
            "exit": "nonzero",
            "contains": [
              "preview feature",
              "disabled by default"
            ]
          },
          "passed": true
        }
      ],
      "status": "pass-expected-compile-failure"
    },
    {
      "id": "jdk21-preview-enabled",
      "specification": {
        "id": "jdk21-preview-enabled",
        "sources": [
          "examples/java-advanced/jdk17-to21/PreviewMain.java"
        ],
        "instructions": "src/tutorials/jdk17-to21.md",
        "compile": {
          "exit": "zero",
          "contains": []
        },
        "runs": [
          {
            "main": "PreviewMain",
            "args": [],
            "vmArgs": [],
            "expected": {
              "exit": "zero",
              "contains": [
                "preview21"
              ]
            }
          }
        ],
        "preview": true
      },
      "sources": [
        {
          "file": "examples/java-advanced/jdk17-to21/PreviewMain.java",
          "sha256": "822042f1ddb7408993447a3820da85d03555f1ad7f2bb6c4ef00a12bab7fa4da"
        }
      ],
      "steps": [
        {
          "executable": "javac",
          "args": [
            "-J-Duser.language=en",
            "-J-Duser.country=US",
            "-encoding",
            "UTF-8",
            "--release",
            "21",
            "--enable-preview",
            "-classpath",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\jdk21-preview-enabled\\classes",
            "-sourcepath",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\jdk21-preview-enabled",
            "-d",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\jdk21-preview-enabled\\classes",
            "<project>\\examples\\java-advanced\\jdk17-to21\\PreviewMain.java"
          ],
          "command": "\"javac\" \"-J-Duser.language=en\" \"-J-Duser.country=US\" \"-encoding\" \"UTF-8\" \"--release\" \"21\" \"--enable-preview\" \"-classpath\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\jdk21-preview-enabled\\\\classes\" \"-sourcepath\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\jdk21-preview-enabled\" \"-d\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\jdk21-preview-enabled\\\\classes\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\examples\\\\java-advanced\\\\jdk17-to21\\\\PreviewMain.java\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\jdk21-preview-enabled",
          "timeoutMs": 15000,
          "elapsedMs": 689,
          "exitCode": 0,
          "signal": null,
          "error": null,
          "stdout": "",
          "stderr": "Picked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \nNote: <project>\\examples\\java-advanced\\jdk17-to21\\PreviewMain.java uses preview features of Java SE 21.\r\nNote: Recompile with -Xlint:preview for details.\r\n",
          "expected": {
            "exit": "zero",
            "contains": []
          },
          "passed": true
        },
        {
          "executable": "java",
          "args": [
            "-Dfile.encoding=UTF-8",
            "-Djava.io.tmpdir=<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\jdk21-preview-enabled\\tmp",
            "--enable-preview",
            "-ea",
            "-cp",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\jdk21-preview-enabled\\classes",
            "PreviewMain"
          ],
          "command": "\"java\" \"-Dfile.encoding=UTF-8\" \"-Djava.io.tmpdir=D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\jdk21-preview-enabled\\\\tmp\" \"--enable-preview\" \"-ea\" \"-cp\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\jdk21-preview-enabled\\\\classes\" \"PreviewMain\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\jdk21-preview-enabled",
          "timeoutMs": 15000,
          "elapsedMs": 180,
          "exitCode": 0,
          "signal": null,
          "error": null,
          "stdout": "preview21\r\n",
          "stderr": "NOTE: Picked up JDK_JAVA_OPTIONS: \r\nPicked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \n",
          "expected": {
            "exit": "zero",
            "contains": [
              "preview21"
            ]
          },
          "passed": true
        }
      ],
      "status": "pass"
    },
    {
      "id": "nio-buffer-channel",
      "specification": {
        "id": "nio-buffer-channel",
        "sources": [
          "examples/java-advanced/nio-buffer-channel/BufferChannelDemo.java"
        ],
        "instructions": "src/tutorials/nio-buffer-channel.md",
        "compile": {
          "exit": "zero",
          "contains": []
        },
        "runs": [
          {
            "main": "BufferChannelDemo",
            "args": [],
            "vmArgs": [],
            "expected": {
              "exit": "zero",
              "contains": [
                "PASS",
                "preserved=CDEF",
                "output=ABCDE",
                "EXPECTED: BufferUnderflowException after double flip"
              ]
            }
          }
        ]
      },
      "sources": [
        {
          "file": "examples/java-advanced/nio-buffer-channel/BufferChannelDemo.java",
          "sha256": "ddbc691f36ccd3124afbbc2e995f4db13839d56321e1080369ffc3c2f202496f"
        }
      ],
      "steps": [
        {
          "executable": "javac",
          "args": [
            "-J-Duser.language=en",
            "-J-Duser.country=US",
            "-encoding",
            "UTF-8",
            "--release",
            "21",
            "-classpath",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\nio-buffer-channel\\classes",
            "-sourcepath",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\nio-buffer-channel",
            "-d",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\nio-buffer-channel\\classes",
            "<project>\\examples\\java-advanced\\nio-buffer-channel\\BufferChannelDemo.java"
          ],
          "command": "\"javac\" \"-J-Duser.language=en\" \"-J-Duser.country=US\" \"-encoding\" \"UTF-8\" \"--release\" \"21\" \"-classpath\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\nio-buffer-channel\\\\classes\" \"-sourcepath\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\nio-buffer-channel\" \"-d\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\nio-buffer-channel\\\\classes\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\examples\\\\java-advanced\\\\nio-buffer-channel\\\\BufferChannelDemo.java\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\nio-buffer-channel",
          "timeoutMs": 15000,
          "elapsedMs": 764,
          "exitCode": 0,
          "signal": null,
          "error": null,
          "stdout": "",
          "stderr": "Picked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \n",
          "expected": {
            "exit": "zero",
            "contains": []
          },
          "passed": true
        },
        {
          "executable": "java",
          "args": [
            "-Dfile.encoding=UTF-8",
            "-Djava.io.tmpdir=<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\nio-buffer-channel\\tmp",
            "-ea",
            "-cp",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\nio-buffer-channel\\classes",
            "BufferChannelDemo"
          ],
          "command": "\"java\" \"-Dfile.encoding=UTF-8\" \"-Djava.io.tmpdir=D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\nio-buffer-channel\\\\tmp\" \"-ea\" \"-cp\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\nio-buffer-channel\\\\classes\" \"BufferChannelDemo\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\nio-buffer-channel",
          "timeoutMs": 15000,
          "elapsedMs": 203,
          "exitCode": 0,
          "signal": null,
          "error": null,
          "stdout": "put p=5 l=8 c=8\r\nflip p=0 l=5 c=8\r\nget AB p=2 l=5 c=8\r\ncompact p=3 l=8 c=8\r\npreserved=CDEF\r\nclear p=0 l=8 c=8\r\nclear retains byte[0]=C\r\nread=2\r\nread=2\r\nread=1\r\nwrite=2 remaining=3\r\nwrite=0 remaining=3\r\npause: resume on next simulated writable event\r\nresume write=2 remaining=1\r\nresume write=1 remaining=0\r\noutput=ABCDE\r\nEXPECTED: BufferUnderflowException after double flip\r\nPASS\r\n",
          "stderr": "NOTE: Picked up JDK_JAVA_OPTIONS: \r\nPicked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \n",
          "expected": {
            "exit": "zero",
            "contains": [
              "PASS",
              "preserved=CDEF",
              "output=ABCDE",
              "EXPECTED: BufferUnderflowException after double flip"
            ]
          },
          "passed": true
        }
      ],
      "status": "pass"
    },
    {
      "id": "nio-file-channel",
      "specification": {
        "id": "nio-file-channel",
        "sources": [
          "examples/java-advanced/nio-file-channel/FileChannelDemo.java"
        ],
        "instructions": "src/tutorials/nio-file-channel.md",
        "compile": {
          "exit": "zero",
          "contains": []
        },
        "runs": [
          {
            "main": "FileChannelDemo",
            "args": [
              "$DATA"
            ],
            "vmArgs": [],
            "expected": {
              "exit": "zero",
              "contains": [
                "PASS content=0123456789 sourcePosition=2",
                "EXPECTED_FAILURE no progress at offset=0",
                "PASS mapping usable after channel.close; force/readback=90",
                "EXPECTED_FAILURE ReadOnlyBufferException"
              ]
            }
          }
        ]
      },
      "sources": [
        {
          "file": "examples/java-advanced/nio-file-channel/FileChannelDemo.java",
          "sha256": "9898b2e05bcb5468b2244d8526c94160401db9fa11f46684ca6fe19059092a99"
        }
      ],
      "steps": [
        {
          "executable": "javac",
          "args": [
            "-J-Duser.language=en",
            "-J-Duser.country=US",
            "-encoding",
            "UTF-8",
            "--release",
            "21",
            "-classpath",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\nio-file-channel\\classes",
            "-sourcepath",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\nio-file-channel",
            "-d",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\nio-file-channel\\classes",
            "<project>\\examples\\java-advanced\\nio-file-channel\\FileChannelDemo.java"
          ],
          "command": "\"javac\" \"-J-Duser.language=en\" \"-J-Duser.country=US\" \"-encoding\" \"UTF-8\" \"--release\" \"21\" \"-classpath\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\nio-file-channel\\\\classes\" \"-sourcepath\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\nio-file-channel\" \"-d\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\nio-file-channel\\\\classes\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\examples\\\\java-advanced\\\\nio-file-channel\\\\FileChannelDemo.java\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\nio-file-channel",
          "timeoutMs": 15000,
          "elapsedMs": 918,
          "exitCode": 0,
          "signal": null,
          "error": null,
          "stdout": "",
          "stderr": "Picked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \n",
          "expected": {
            "exit": "zero",
            "contains": []
          },
          "passed": true
        },
        {
          "executable": "java",
          "args": [
            "-Dfile.encoding=UTF-8",
            "-Djava.io.tmpdir=<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\nio-file-channel\\tmp",
            "-ea",
            "-cp",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\nio-file-channel\\classes",
            "FileChannelDemo",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\nio-file-channel\\data"
          ],
          "command": "\"java\" \"-Dfile.encoding=UTF-8\" \"-Djava.io.tmpdir=D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\nio-file-channel\\\\tmp\" \"-ea\" \"-cp\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\nio-file-channel\\\\classes\" \"FileChannelDemo\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\nio-file-channel\\\\data\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\nio-file-channel",
          "timeoutMs": 15000,
          "elapsedMs": 261,
          "exitCode": 0,
          "signal": null,
          "error": null,
          "stdout": "offset=0 transferred=3\r\noffset=3 transferred=3\r\noffset=6 transferred=3\r\noffset=9 transferred=1\r\nPASS content=0123456789 sourcePosition=2\r\noffset=0 transferred=0\r\nEXPECTED_FAILURE no progress at offset=0\r\nPASS mapping usable after channel.close; force/readback=90\r\nEXPECTED_FAILURE ReadOnlyBufferException\r\n",
          "stderr": "NOTE: Picked up JDK_JAVA_OPTIONS: \r\nPicked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \n",
          "expected": {
            "exit": "zero",
            "contains": [
              "PASS content=0123456789 sourcePosition=2",
              "EXPECTED_FAILURE no progress at offset=0",
              "PASS mapping usable after channel.close; force/readback=90",
              "EXPECTED_FAILURE ReadOnlyBufferException"
            ]
          },
          "passed": true
        }
      ],
      "status": "pass"
    },
    {
      "id": "nio-selector",
      "specification": {
        "id": "nio-selector",
        "sources": [
          "examples/java-advanced/nio-selector/SelectorDemo.java"
        ],
        "instructions": "src/tutorials/nio-selector.md",
        "compile": {
          "exit": "zero",
          "contains": []
        },
        "runs": [
          {
            "main": "SelectorDemo",
            "args": [
              "normal"
            ],
            "expected": {
              "exit": "zero",
              "contains": [
                "PASS",
                "registered=0"
              ]
            }
          },
          {
            "main": "SelectorDemo",
            "args": [
              "stale"
            ],
            "expected": {
              "exit": "nonzero",
              "contains": [
                "AssertionError: selectedKeys retained"
              ]
            }
          },
          {
            "main": "SelectorDemo",
            "args": [
              "busy"
            ],
            "expected": {
              "exit": "nonzero",
              "contains": [
                "AssertionError: OP_WRITE retained"
              ]
            }
          }
        ],
        "network": true,
        "documentedRuns": [
          "normal",
          "stale (expected AssertionError)",
          "busy (expected AssertionError)"
        ],
        "reason": "Main integration may opt in to the reviewed ephemeral loopback fixture with --include-loopback; default remains compile-only."
      },
      "sources": [
        {
          "file": "examples/java-advanced/nio-selector/SelectorDemo.java",
          "sha256": "45e2880d611dd4d6af1a5187c6bee7065cc0b0d244ec54a85bd0836fb53f18f2"
        }
      ],
      "steps": [
        {
          "executable": "javac",
          "args": [
            "-J-Duser.language=en",
            "-J-Duser.country=US",
            "-encoding",
            "UTF-8",
            "--release",
            "21",
            "-classpath",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\nio-selector\\classes",
            "-sourcepath",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\nio-selector",
            "-d",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\nio-selector\\classes",
            "<project>\\examples\\java-advanced\\nio-selector\\SelectorDemo.java"
          ],
          "command": "\"javac\" \"-J-Duser.language=en\" \"-J-Duser.country=US\" \"-encoding\" \"UTF-8\" \"--release\" \"21\" \"-classpath\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\nio-selector\\\\classes\" \"-sourcepath\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\nio-selector\" \"-d\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\nio-selector\\\\classes\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\examples\\\\java-advanced\\\\nio-selector\\\\SelectorDemo.java\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\nio-selector",
          "timeoutMs": 15000,
          "elapsedMs": 828,
          "exitCode": 0,
          "signal": null,
          "error": null,
          "stdout": "",
          "stderr": "Picked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \n",
          "expected": {
            "exit": "zero",
            "contains": []
          },
          "passed": true
        },
        {
          "executable": "java",
          "args": [
            "-Dfile.encoding=UTF-8",
            "-Djava.io.tmpdir=<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\nio-selector\\tmp",
            "-ea",
            "-cp",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\nio-selector\\classes",
            "SelectorDemo",
            "normal"
          ],
          "command": "\"java\" \"-Dfile.encoding=UTF-8\" \"-Djava.io.tmpdir=D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\nio-selector\\\\tmp\" \"-ea\" \"-cp\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\nio-selector\\\\classes\" \"SelectorDemo\" \"normal\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\nio-selector",
          "timeoutMs": 15000,
          "elapsedMs": 284,
          "exitCode": 0,
          "signal": null,
          "error": null,
          "stdout": "EOF -> READ off, WRITE on\r\ndrained -> WRITE off\r\nclient=bye; EOF=true; registered=0; PASS\r\n",
          "stderr": "NOTE: Picked up JDK_JAVA_OPTIONS: \r\nPicked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \n",
          "expected": {
            "exit": "zero",
            "contains": [
              "PASS",
              "registered=0"
            ]
          },
          "passed": true
        },
        {
          "executable": "java",
          "args": [
            "-Dfile.encoding=UTF-8",
            "-Djava.io.tmpdir=<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\nio-selector\\tmp",
            "-ea",
            "-cp",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\nio-selector\\classes",
            "SelectorDemo",
            "stale"
          ],
          "command": "\"java\" \"-Dfile.encoding=UTF-8\" \"-Djava.io.tmpdir=D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\nio-selector\\\\tmp\" \"-ea\" \"-cp\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\nio-selector\\\\classes\" \"SelectorDemo\" \"stale\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\nio-selector",
          "timeoutMs": 15000,
          "elapsedMs": 255,
          "exitCode": 1,
          "signal": null,
          "error": null,
          "stdout": "EOF -> READ off, WRITE on\r\n",
          "stderr": "NOTE: Picked up JDK_JAVA_OPTIONS: \r\nPicked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \nException in thread \"main\" java.lang.AssertionError: selectedKeys retained: missing iterator.remove\r\n\tat SelectorDemo.require(SelectorDemo.java:8)\r\n\tat SelectorDemo.main(SelectorDemo.java:44)\r\n",
          "expected": {
            "exit": "nonzero",
            "contains": [
              "AssertionError: selectedKeys retained"
            ]
          },
          "passed": true
        },
        {
          "executable": "java",
          "args": [
            "-Dfile.encoding=UTF-8",
            "-Djava.io.tmpdir=<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\nio-selector\\tmp",
            "-ea",
            "-cp",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\nio-selector\\classes",
            "SelectorDemo",
            "busy"
          ],
          "command": "\"java\" \"-Dfile.encoding=UTF-8\" \"-Djava.io.tmpdir=D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\nio-selector\\\\tmp\" \"-ea\" \"-cp\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\nio-selector\\\\classes\" \"SelectorDemo\" \"busy\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\nio-selector",
          "timeoutMs": 15000,
          "elapsedMs": 269,
          "exitCode": 1,
          "signal": null,
          "error": null,
          "stdout": "EOF -> READ off, WRITE on\r\nempty queue writable events=20\r\n",
          "stderr": "NOTE: Picked up JDK_JAVA_OPTIONS: \r\nPicked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \nException in thread \"main\" java.lang.AssertionError: OP_WRITE retained with empty queue\r\n\tat SelectorDemo.require(SelectorDemo.java:8)\r\n\tat SelectorDemo.main(SelectorDemo.java:64)\r\n",
          "expected": {
            "exit": "nonzero",
            "contains": [
              "AssertionError: OP_WRITE retained"
            ]
          },
          "passed": true
        }
      ],
      "status": "pass"
    },
    {
      "id": "threadlocal",
      "specification": {
        "id": "threadlocal",
        "sources": [
          "examples/java-advanced/threadlocal/ThreadLocalDemo.java"
        ],
        "instructions": "src/tutorials/threadlocal.md",
        "compile": {
          "exit": "zero",
          "contains": []
        },
        "runs": [
          {
            "main": "ThreadLocalDemo",
            "args": [
              "leak"
            ],
            "vmArgs": [],
            "expected": {
              "exit": "nonzero",
              "contains": [
                "request B: alice",
                "AssertionError: request B inherited request A context"
              ]
            }
          },
          {
            "main": "ThreadLocalDemo",
            "args": [
              "fixed"
            ],
            "vmArgs": [],
            "expected": {
              "exit": "zero",
              "contains": [
                "request B: null",
                "PASS: request B has no user"
              ]
            }
          },
          {
            "main": "ThreadLocalDemo",
            "args": [
              "semantics"
            ],
            "vmArgs": [],
            "expected": {
              "exit": "zero",
              "contains": [
                "after set(null): null",
                "after remove: initial"
              ]
            }
          }
        ]
      },
      "sources": [
        {
          "file": "examples/java-advanced/threadlocal/ThreadLocalDemo.java",
          "sha256": "51bbce6fb176fb9e7e11a448c1d494bd8291b2034196cf7983c6e2e8d8f2f87e"
        }
      ],
      "steps": [
        {
          "executable": "javac",
          "args": [
            "-J-Duser.language=en",
            "-J-Duser.country=US",
            "-encoding",
            "UTF-8",
            "--release",
            "21",
            "-classpath",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\threadlocal\\classes",
            "-sourcepath",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\threadlocal",
            "-d",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\threadlocal\\classes",
            "<project>\\examples\\java-advanced\\threadlocal\\ThreadLocalDemo.java"
          ],
          "command": "\"javac\" \"-J-Duser.language=en\" \"-J-Duser.country=US\" \"-encoding\" \"UTF-8\" \"--release\" \"21\" \"-classpath\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\threadlocal\\\\classes\" \"-sourcepath\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\threadlocal\" \"-d\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\threadlocal\\\\classes\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\examples\\\\java-advanced\\\\threadlocal\\\\ThreadLocalDemo.java\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\threadlocal",
          "timeoutMs": 15000,
          "elapsedMs": 806,
          "exitCode": 0,
          "signal": null,
          "error": null,
          "stdout": "",
          "stderr": "Picked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \n",
          "expected": {
            "exit": "zero",
            "contains": []
          },
          "passed": true
        },
        {
          "executable": "java",
          "args": [
            "-Dfile.encoding=UTF-8",
            "-Djava.io.tmpdir=<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\threadlocal\\tmp",
            "-ea",
            "-cp",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\threadlocal\\classes",
            "ThreadLocalDemo",
            "leak"
          ],
          "command": "\"java\" \"-Dfile.encoding=UTF-8\" \"-Djava.io.tmpdir=D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\threadlocal\\\\tmp\" \"-ea\" \"-cp\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\threadlocal\\\\classes\" \"ThreadLocalDemo\" \"leak\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\threadlocal",
          "timeoutMs": 15000,
          "elapsedMs": 183,
          "exitCode": 1,
          "signal": null,
          "error": null,
          "stdout": "worker-1 request A: alice\r\nrequest A: simulated exception observed\r\nworker-1 request B: alice\r\n",
          "stderr": "NOTE: Picked up JDK_JAVA_OPTIONS: \r\nPicked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \nException in thread \"main\" java.lang.AssertionError: request B inherited request A context\r\n\tat ThreadLocalDemo.main(ThreadLocalDemo.java:47)\r\n",
          "expected": {
            "exit": "nonzero",
            "contains": [
              "request B: alice",
              "AssertionError: request B inherited request A context"
            ]
          },
          "passed": true
        },
        {
          "executable": "java",
          "args": [
            "-Dfile.encoding=UTF-8",
            "-Djava.io.tmpdir=<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\threadlocal\\tmp",
            "-ea",
            "-cp",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\threadlocal\\classes",
            "ThreadLocalDemo",
            "fixed"
          ],
          "command": "\"java\" \"-Dfile.encoding=UTF-8\" \"-Djava.io.tmpdir=D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\threadlocal\\\\tmp\" \"-ea\" \"-cp\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\threadlocal\\\\classes\" \"ThreadLocalDemo\" \"fixed\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\threadlocal",
          "timeoutMs": 15000,
          "elapsedMs": 166,
          "exitCode": 0,
          "signal": null,
          "error": null,
          "stdout": "worker-1 request A: alice\r\nrequest A: simulated exception observed\r\nworker-1 request B: null\r\nPASS: request B has no user\r\n",
          "stderr": "NOTE: Picked up JDK_JAVA_OPTIONS: \r\nPicked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \n",
          "expected": {
            "exit": "zero",
            "contains": [
              "request B: null",
              "PASS: request B has no user"
            ]
          },
          "passed": true
        },
        {
          "executable": "java",
          "args": [
            "-Dfile.encoding=UTF-8",
            "-Djava.io.tmpdir=<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\threadlocal\\tmp",
            "-ea",
            "-cp",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\threadlocal\\classes",
            "ThreadLocalDemo",
            "semantics"
          ],
          "command": "\"java\" \"-Dfile.encoding=UTF-8\" \"-Djava.io.tmpdir=D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\threadlocal\\\\tmp\" \"-ea\" \"-cp\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\threadlocal\\\\classes\" \"ThreadLocalDemo\" \"semantics\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\threadlocal",
          "timeoutMs": 15000,
          "elapsedMs": 162,
          "exitCode": 0,
          "signal": null,
          "error": null,
          "stdout": "after set(null): null\r\nafter remove: initial\r\n",
          "stderr": "NOTE: Picked up JDK_JAVA_OPTIONS: \r\nPicked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \n",
          "expected": {
            "exit": "zero",
            "contains": [
              "after set(null): null",
              "after remove: initial"
            ]
          },
          "passed": true
        }
      ],
      "status": "pass"
    },
    {
      "id": "virtual-threads",
      "specification": {
        "id": "virtual-threads",
        "sources": [
          "examples/java-advanced/virtual-threads-jdk21/VirtualThreadsDemo.java"
        ],
        "instructions": "src/tutorials/virtual-threads-jdk21.md",
        "compile": {
          "exit": "zero",
          "contains": []
        },
        "runs": [
          {
            "main": "VirtualThreadsDemo",
            "args": [],
            "vmArgs": [],
            "expected": {
              "exit": "zero",
              "contains": [
                "platform-4 completed=40 virtual=0",
                "virtual completed=40 virtual=40",
                "virtual-limit-4 completed=40 virtual=40",
                "expected rejection: permit timeout; permits=0"
              ]
            }
          }
        ]
      },
      "sources": [
        {
          "file": "examples/java-advanced/virtual-threads-jdk21/VirtualThreadsDemo.java",
          "sha256": "d691b618982f0aee2824b12911b68bad93659578f5c94b742853a0a94a9a1ab9"
        }
      ],
      "steps": [
        {
          "executable": "javac",
          "args": [
            "-J-Duser.language=en",
            "-J-Duser.country=US",
            "-encoding",
            "UTF-8",
            "--release",
            "21",
            "-classpath",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\virtual-threads\\classes",
            "-sourcepath",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\virtual-threads",
            "-d",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\virtual-threads\\classes",
            "<project>\\examples\\java-advanced\\virtual-threads-jdk21\\VirtualThreadsDemo.java"
          ],
          "command": "\"javac\" \"-J-Duser.language=en\" \"-J-Duser.country=US\" \"-encoding\" \"UTF-8\" \"--release\" \"21\" \"-classpath\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\virtual-threads\\\\classes\" \"-sourcepath\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\virtual-threads\" \"-d\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\virtual-threads\\\\classes\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\examples\\\\java-advanced\\\\virtual-threads-jdk21\\\\VirtualThreadsDemo.java\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\virtual-threads",
          "timeoutMs": 15000,
          "elapsedMs": 972,
          "exitCode": 0,
          "signal": null,
          "error": null,
          "stdout": "",
          "stderr": "Picked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \n",
          "expected": {
            "exit": "zero",
            "contains": []
          },
          "passed": true
        },
        {
          "executable": "java",
          "args": [
            "-Dfile.encoding=UTF-8",
            "-Djava.io.tmpdir=<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\virtual-threads\\tmp",
            "-ea",
            "-cp",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\virtual-threads\\classes",
            "VirtualThreadsDemo"
          ],
          "command": "\"java\" \"-Dfile.encoding=UTF-8\" \"-Djava.io.tmpdir=D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\virtual-threads\\\\tmp\" \"-ea\" \"-cp\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\virtual-threads\\\\classes\" \"VirtualThreadsDemo\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\virtual-threads",
          "timeoutMs": 15000,
          "elapsedMs": 1439,
          "exitCode": 0,
          "signal": null,
          "error": null,
          "stdout": "platform-4 completed=40 virtual=0 peak=4 elapsedMs=584\r\nvirtual completed=40 virtual=40 peak=40 elapsedMs=64\r\nvirtual-limit-4 completed=40 virtual=40 peak=4 elapsedMs=553\r\nexpected rejection: permit timeout; permits=0\r\n",
          "stderr": "NOTE: Picked up JDK_JAVA_OPTIONS: \r\nPicked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \n",
          "expected": {
            "exit": "zero",
            "contains": [
              "platform-4 completed=40 virtual=0",
              "virtual completed=40 virtual=40",
              "virtual-limit-4 completed=40 virtual=40",
              "expected rejection: permit timeout; permits=0"
            ]
          },
          "passed": true
        }
      ],
      "status": "pass"
    },
    {
      "id": "virtual-pinning",
      "specification": {
        "id": "virtual-pinning",
        "sources": [
          "examples/java-advanced/virtual-threads-jdk21/PinningDemo.java"
        ],
        "instructions": "src/tutorials/virtual-threads-jdk21.md",
        "compile": {
          "exit": "zero",
          "contains": []
        },
        "runs": [
          {
            "main": "PinningDemo",
            "args": [],
            "vmArgs": [
              "-Djdk.virtualThreadScheduler.parallelism=1",
              "-Djdk.tracePinnedThreads=full"
            ],
            "expected": {
              "exit": "zero",
              "contains": [
                "reason:MONITOR",
                "pinning completed=4"
              ]
            }
          }
        ]
      },
      "sources": [
        {
          "file": "examples/java-advanced/virtual-threads-jdk21/PinningDemo.java",
          "sha256": "8f273b3839c9489e8d1c24c2ecfb675b7aae1650a0b297e1036cd216486a5be7"
        }
      ],
      "steps": [
        {
          "executable": "javac",
          "args": [
            "-J-Duser.language=en",
            "-J-Duser.country=US",
            "-encoding",
            "UTF-8",
            "--release",
            "21",
            "-classpath",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\virtual-pinning\\classes",
            "-sourcepath",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\virtual-pinning",
            "-d",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\virtual-pinning\\classes",
            "<project>\\examples\\java-advanced\\virtual-threads-jdk21\\PinningDemo.java"
          ],
          "command": "\"javac\" \"-J-Duser.language=en\" \"-J-Duser.country=US\" \"-encoding\" \"UTF-8\" \"--release\" \"21\" \"-classpath\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\virtual-pinning\\\\classes\" \"-sourcepath\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\virtual-pinning\" \"-d\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\virtual-pinning\\\\classes\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\examples\\\\java-advanced\\\\virtual-threads-jdk21\\\\PinningDemo.java\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\virtual-pinning",
          "timeoutMs": 15000,
          "elapsedMs": 788,
          "exitCode": 0,
          "signal": null,
          "error": null,
          "stdout": "",
          "stderr": "Picked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \n",
          "expected": {
            "exit": "zero",
            "contains": []
          },
          "passed": true
        },
        {
          "executable": "java",
          "args": [
            "-Dfile.encoding=UTF-8",
            "-Djava.io.tmpdir=<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\virtual-pinning\\tmp",
            "-Djdk.virtualThreadScheduler.parallelism=1",
            "-Djdk.tracePinnedThreads=full",
            "-ea",
            "-cp",
            "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\virtual-pinning\\classes",
            "PinningDemo"
          ],
          "command": "\"java\" \"-Dfile.encoding=UTF-8\" \"-Djava.io.tmpdir=D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\virtual-pinning\\\\tmp\" \"-Djdk.virtualThreadScheduler.parallelism=1\" \"-Djdk.tracePinnedThreads=full\" \"-ea\" \"-cp\" \"D:\\\\zhuomian\\\\qiuzhiwang_pro\\\\docs\\\\upgrade-100\\\\checks\\\\java-advanced\\\\runs\\\\2026-11-06T07-50-29-533Z-36520\\\\virtual-pinning\\\\classes\" \"PinningDemo\"",
          "cwd": "<project>\\docs\\upgrade-100\\checks\\java-advanced\\runs\\2026-11-06T07-50-29-533Z-36520\\virtual-pinning",
          "timeoutMs": 15000,
          "elapsedMs": 397,
          "exitCode": 0,
          "signal": null,
          "error": null,
          "stdout": "VirtualThread[#29]/runnable@ForkJoinPool-1-worker-1 reason:MONITOR\r\n    java.base/java.lang.VirtualThread$VThreadContinuation.onPinned(VirtualThread.java:199)\r\n    java.base/jdk.internal.vm.Continuation.onPinned0(Continuation.java:393)\r\n    java.base/java.lang.VirtualThread.parkNanos(VirtualThread.java:635)\r\n    java.base/java.lang.VirtualThread.sleepNanos(VirtualThread.java:807)\r\n    java.base/java.lang.Thread.sleep(Thread.java:507)\r\n    PinningDemo.lambda$main$0(PinningDemo.java:13) <== monitors:1\r\n    java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)\r\n    java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)\r\n    java.base/java.lang.VirtualThread.run(VirtualThread.java:329)\r\npinning completed=4 elapsedMs=240\r\n",
          "stderr": "NOTE: Picked up JDK_JAVA_OPTIONS: \r\nPicked up JAVA_TOOL_OPTIONS: \nPicked up _JAVA_OPTIONS: \n",
          "expected": {
            "exit": "zero",
            "contains": [
              "reason:MONITOR",
              "pinning completed=4"
            ]
          },
          "passed": true
        }
      ],
      "status": "pass"
    }
  ]
}
