diff --git a/backends/atlas-sparkqwen/pins.json b/backends/atlas-sparkqwen/pins.json index deb6813..a5c95f7 100644 --- a/backends/atlas-sparkqwen/pins.json +++ b/backends/atlas-sparkqwen/pins.json @@ -1,22 +1,22 @@ { "manifestVersion": 1, "status": "final", - "note": "Single pin manifest for the Atlas SparkQwen RC16 lane. Source, install tree, tag and model identities are final. image.reference is the GHCR manifest digest of ghcr.io/enntity/atlas-sparkqwen:e7268337a5c8, also used as the recipe's bootstrap image. The normal install path addresses image.reference; the tag is source-build metadata (the first 12 characters of the git tree of install/ at the pinned revision) and the install-tree label is a contents check. A tag or label alone is never the artifact identity.", + "note": "Single pin manifest for the Atlas SparkQwen RC16 lane. Source, install tree, tag and model identities are final. image.reference is the GHCR manifest digest of ghcr.io/enntity/atlas-sparkqwen:b151fbe840a1, also used as the recipe's bootstrap image. The normal install path addresses image.reference; the tag is source-build metadata (the first 12 characters of the git tree of install/ at the pinned revision) and the install-tree label is a contents check. A tag or label alone is never the artifact identity.", "source": { "repo": "Enntity/sparkqwen", - "revision": "0cf2436de5211b41edf4d92071180c75cec31dd8", - "installTree": "e7268337a5c8e77c874c7cb7be689f80a79946a5", + "revision": "2e8e6dda78fa12848d9a48722332f6aff39b860f", + "installTree": "b151fbe840a15b735f08026c2bf521edac9ce96e", "cloneUrl": "https://github.com/Enntity/sparkqwen.git", "buildScript": "install/build.sh" }, "engine": { "repo": "Enntity/atlas", - "branch": "sparkqwen/atlas-20261010-rc16", - "commit": "1c43247d93ca050f02cb67b0603e88edfe3d92a5" + "branch": "sparkqwen/atlas-20261013-sidecars", + "commit": "84e7c734bbb70850bd2f65b0bf9e68ab8f8bac22" }, "image": { - "reference": "ghcr.io/enntity/atlas-sparkqwen@sha256:63fcc9f8f87a3963aba91f0a5dbf2c1cf5efa1d809c4ab1b52bd5853979e73ed", - "tag": "ghcr.io/enntity/atlas-sparkqwen:e7268337a5c8", + "reference": "ghcr.io/enntity/atlas-sparkqwen@sha256:ea6a2df03adfc8802a1baf6ab1d4b55c69dd76588f36bfd5d189781500e75830", + "tag": "ghcr.io/enntity/atlas-sparkqwen:b151fbe840a1", "label": "io.enntity.sparkqwen.install-tree", "entrypoint": "/opt/atlas/serve.py", "profilePath": "/opt/atlas/profiles/8x262k.json", diff --git a/docs/recipes.md b/docs/recipes.md index 47273c6..d947e6e 100644 --- a/docs/recipes.md +++ b/docs/recipes.md @@ -563,7 +563,7 @@ interface and backend address when refreshing discovery. ## Atlas SparkQwen RC16 `linux-nvidia-dgx-spark-2x-qwen38-flash-next-atlas` runs the Atlas SparkQwen -RC16 engine (Enntity/atlas `sparkqwen/atlas-20261010-rc16` @ `1c43247d`) on two +RC16 engine (Enntity/atlas `sparkqwen/atlas-20261013-sidecars` @ `84e7c734`) on two directly connected DGX Sparks, serving the unmodified `nvidia/Qwen3.8-Flash-Next-NVFP4` checkpoint at revision `fc694b54fb0174e0913e6adf86691ef85a4ead47` as `qwen3.8-flash-next-atlas`. There @@ -586,7 +586,7 @@ Do not raise the host memory safety limit to make an oversized cache fit. The recipe is additive (no default model, no aliases, `keepWarm` false). Pins live in `backends/atlas-sparkqwen/pins.json` (source `Enntity/sparkqwen` -`0cf2436d`, install tree `e7268337a5c8`). The GHCR manifest digest is pinned in the same manifest. +`2e8e6dda`, install tree `b151fbe840a1`). The GHCR manifest digest is pinned in the same manifest. `node backends/atlas-sparkqwen/verify-pins.mjs`, setup step `verify-atlas-pins` and `install.sh` reject missing or placeholder identities. The installer only pulls that digest and verifies the image's arm64 architecture, diff --git a/recipes/linux-nvidia-dgx-spark-2x-qwen38-flash-next-atlas.json b/recipes/linux-nvidia-dgx-spark-2x-qwen38-flash-next-atlas.json index 09b7d69..f1f9f7d 100644 --- a/recipes/linux-nvidia-dgx-spark-2x-qwen38-flash-next-atlas.json +++ b/recipes/linux-nvidia-dgx-spark-2x-qwen38-flash-next-atlas.json @@ -14,16 +14,16 @@ "provenance": { "createdBy": "lloom", "generatedBy": "manual-curated", - "source": "SparkQwen RC16: Enntity/sparkqwen 0cf2436de5211b41edf4d92071180c75cec31dd8 (install tree e7268337a5c8e77c874c7cb7be689f80a79946a5), engine Enntity/atlas sparkqwen/atlas-20261010-rc16 @ 1c43247d (AGPL-3.0-only, recorded in the image's /opt/atlas/source-manifest.json). The image is ghcr.io/enntity/atlas-sparkqwen:e7268337a5c8, addressed by its GHCR manifest digest in pins.json. The engine argument vector ships inside the image as /opt/atlas/profiles/8x262k.json, selected with SPARKQWEN_PROFILE=8x262k: eight sequences of up to 262144 tokens, BF16 KV (about 3.19M pool tokens at the profile's 0.88 GPU memory utilization), prefix caching, MTP speculation (up to 7 drafts), content-loop steering. Model nvidia/Qwen3.8-Flash-Next-NVFP4 revision fc694b54fb0174e0913e6adf86691ef85a4ead47." + "source": "SparkQwen RC16 maintenance: Enntity/sparkqwen 2e8e6dda78fa12848d9a48722332f6aff39b860f (install tree b151fbe840a15b735f08026c2bf521edac9ce96e), engine Enntity/atlas sparkqwen/atlas-20261013-sidecars @ 84e7c734 (AGPL-3.0-only, recorded in the image's /opt/atlas/source-manifest.json). The image is ghcr.io/enntity/atlas-sparkqwen:b151fbe840a1, addressed by its GHCR manifest digest in pins.json. The engine argument vector ships inside the image as /opt/atlas/profiles/8x262k.json, selected with SPARKQWEN_PROFILE=8x262k: eight sequences of up to 262144 tokens, BF16 KV (about 3.19M pool tokens at the profile's 0.88 GPU memory utilization), prefix caching, MTP speculation (up to 7 drafts), content-loop steering. Model nvidia/Qwen3.8-Flash-Next-NVFP4 revision fc694b54fb0174e0913e6adf86691ef85a4ead47." }, "links": [ { "rel": "upstream", - "href": "https://github.com/Enntity/sparkqwen/tree/0cf2436de5211b41edf4d92071180c75cec31dd8" + "href": "https://github.com/Enntity/sparkqwen/tree/2e8e6dda78fa12848d9a48722332f6aff39b860f" }, { "rel": "engine", - "href": "https://github.com/Enntity/atlas/tree/1c43247d93ca050f02cb67b0603e88edfe3d92a5" + "href": "https://github.com/Enntity/atlas/tree/84e7c734bbb70850bd2f65b0bf9e68ab8f8bac22" }, { "rel": "engine-upstream", @@ -219,7 +219,7 @@ "warmup": false, "bootstrap": { "adapter": "docker", - "image": "ghcr.io/enntity/atlas-sparkqwen@sha256:63fcc9f8f87a3963aba91f0a5dbf2c1cf5efa1d809c4ab1b52bd5853979e73ed", + "image": "ghcr.io/enntity/atlas-sparkqwen@sha256:ea6a2df03adfc8802a1baf6ab1d4b55c69dd76588f36bfd5d189781500e75830", "pull": false, "pullTimeoutMs": 3600000, "createArgs": [ @@ -320,7 +320,7 @@ }, "bootstrap": { "adapter": "docker", - "image": "ghcr.io/enntity/atlas-sparkqwen@sha256:63fcc9f8f87a3963aba91f0a5dbf2c1cf5efa1d809c4ab1b52bd5853979e73ed", + "image": "ghcr.io/enntity/atlas-sparkqwen@sha256:ea6a2df03adfc8802a1baf6ab1d4b55c69dd76588f36bfd5d189781500e75830", "pull": false, "pullTimeoutMs": 3600000, "createArgs": [ diff --git a/test/atlas-sparkqwen-recipe.test.mjs b/test/atlas-sparkqwen-recipe.test.mjs index d1df343..7eb0fb3 100644 --- a/test/atlas-sparkqwen-recipe.test.mjs +++ b/test/atlas-sparkqwen-recipe.test.mjs @@ -323,10 +323,10 @@ assert.throws(() => materialize(missingFabric), /cluster\.nodes\[ennspark04\]\.f // ---- pins: final identities, pending digest, fail-closed gate --------------- assert.equal(pins.source.repo, 'Enntity/sparkqwen'); -assert.equal(pins.source.revision, '0cf2436de5211b41edf4d92071180c75cec31dd8'); -assert.equal(pins.source.installTree, 'e7268337a5c8e77c874c7cb7be689f80a79946a5'); -assert.equal(pins.engine.commit, '1c43247d93ca050f02cb67b0603e88edfe3d92a5'); -assert.equal(pins.image.tag, 'ghcr.io/enntity/atlas-sparkqwen:e7268337a5c8'); +assert.equal(pins.source.revision, '2e8e6dda78fa12848d9a48722332f6aff39b860f'); +assert.equal(pins.source.installTree, 'b151fbe840a15b735f08026c2bf521edac9ce96e'); +assert.equal(pins.engine.commit, '84e7c734bbb70850bd2f65b0bf9e68ab8f8bac22'); +assert.equal(pins.image.tag, 'ghcr.io/enntity/atlas-sparkqwen:b151fbe840a1'); assert.equal(pins.image.tag, imageTagFor(pins)); assert.equal(pins.image.label, 'io.enntity.sparkqwen.install-tree'); assert.equal(pins.image.profilePath, '/opt/atlas/profiles/8x262k.json'); @@ -357,7 +357,7 @@ const variant = (mutate) => { for (const [label, mutate] of [ ['draft status', (m) => (m.status = 'draft')], ['branch as revision', (m) => (m.source.revision = 'main')], - ['short engine commit', (m) => (m.engine.commit = '1c43247d')], + ['short engine commit', (m) => (m.engine.commit = '84e7c734')], ['shell in profile path', (m) => (m.image.profilePath = "/opt/atlas/x' ; rm -rf / ; '")], ['short install tree', (m) => (m.source.installTree = m.source.installTree.slice(0, 12))], ['tag not derived from tree', (m) => (m.image.tag = `${IMAGE_REPOSITORY}:latest`)],