Update to Stack Internal
Snapshot Oct 24, 2026 · 13:17 UTC · version 1.0.2
Package or technical metadata updated
Package or technical metadata updated
Observed in package metadata. These changes alone do not establish a new customer-facing feature.
Up to 3 plugins free · no card required.
All fields and original values.
These are saved file metadata. Open a changed file to read its text edits.
Package file
Sep 30, 2026 · 23:12 UTC
6816ffd4a6d70c05f58d0f7220c8e46c703dfbf024d6f4ea2ffad05d41365f3c
Oct 24, 2026 · 13:17 UTC
b02a0d335e852dd1e7a97b8e77c4c20d89a3a571b6d6391546432ad4fb6593e2
Package file
Sep 30, 2026 · 23:12 UTC
127
Oct 24, 2026 · 13:17 UTC
105
Package file
Sep 30, 2026 · 23:12 UTC
{"sha256":"0b6c62a907c3483d8b64a2f8ccf3ad36da7c1186911d91fbc2b8b720865c6004","size":1224}
Oct 24, 2026 · 13:17 UTC
Not present
Package file
Sep 30, 2026 · 23:12 UTC
Not present
Oct 24, 2026 · 13:17 UTC
{"sha256":"72e7d2904b3771c8b67a08d433842922690c4a56cc8bc44d01e0f2942553a0cc","size":3845}
Compare saved observations
Download comparison JSONChanged files
Choose a file to see its text changes. Binary or large files show metadata only.
.github/workflows/check-plugin-version.yml →
.github/workflows/package-plugin.yml →
LICENSE →
assets/stack-internal-logo.png →
assets/stack-internal-logo.svg →
mcp.json →
.github/workflows/check-plugin-version.yml
− removed · + added
--- before +++ after @@ -0,0 +1,104 @@ +name: Check plugin version + +on: + pull_request: + branches: + - main + +permissions: + contents: read + +jobs: + version: + name: Plugin version incremented + runs-on: ubuntu-latest + + steps: + - name: Check out pull request + uses: actions/checkout@v7 + with: + fetch-depth: 0 + + - name: Compare plugin versions + env: + BASE_SHA: ${{ github.event.pull_request.base.sha }} + run: | + node <<'NODE' + const fs = require('node:fs'); + const { execFileSync } = require('node:child_process'); + + const semverPattern = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*)(?:\.(?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*))*))?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/; + + function parseVersion(value, source) { + if (typeof value !== 'string') { + throw new Error(`${source} plugin.json does not contain a string version.`); + } + + const match = semverPattern.exec(value); + if (!match) { + throw new Error(`${source} plugin version ${JSON.stringify(value)} is not valid semantic versioning.`); + } + + return { + value, + core: match.slice(1, 4).map(BigInt), + prerelease: match[4] ? match[4].split('.') : [], + }; + } + + function compareIdentifiers(left, right) { + const leftIsNumeric = /^\d+$/.test(left); + const rightIsNumeric = /^\d+$/.test(right); + + if (leftIsNumeric && rightIsNumeric) { + return Number(BigInt(left) > BigInt(right)) - Number(BigInt(left) < BigInt(right)); + } + if (leftIsNumeric !== rightIsNumeric) { + return leftIsNumeric ? -1 : 1; + } + return Number(left > right) - Number(left < right); + } + + function compareVersions(left, right) { + for (let index = 0; index < left.core.length; index += 1) { + if (left.core[index] !== right.core[index]) { + return left.core[index] > right.core[index] ? 1 : -1; + } + } + + if (left.prerelease.length === 0 || right.prerelease.length === 0) { + return Number(left.prerelease.length === 0) - Number(right.prerelease.length === 0); + } + + const length = Math.max(left.prerelease.length, right.prerelease.length); + for (let index = 0; index < length; index += 1) { + if (left.prerelease[index] === undefined) return -1; + if (right.prerelease[index] === undefined) return 1; + + const comparison = compareIdentifiers(left.prerelease[index], right.prerelease[index]); + if (comparison !== 0) return comparison; + } + + return 0; + } + + try { + const baseManifest = JSON.parse( + execFileSync('git', ['show', `${process.env.BASE_SHA}:plugin.json`], { encoding: 'utf8' }), + ); + const pullRequestManifest = JSON.parse(fs.readFileSync('plugin.json', 'utf8')); + const baseVersion = parseVersion(baseManifest.version, 'Base branch'); + const pullRequestVersion = parseVersion(pullRequestManifest.version, 'Pull request'); + + if (compareVersions(pullRequestVersion, baseVersion) <= 0) { + throw new Error( + `plugin.json version must be greater than ${baseVersion.value}; found ${pullRequestVersion.value}.`, + ); + } + + console.log(`Plugin version incremented from ${baseVersion.value} to ${pullRequestVersion.value}.`); + } catch (error) { + console.error(error instanceof Error ? error.message : error); + process.exit(1); + } + NODE
Full technical diff · 13 changed fields
changed /files/.app.json/sha256
"6816ffd4a6d70c05f58d0f7220c8e46c703dfbf024d6f4ea2ffad05d41365f3c"
"b02a0d335e852dd1e7a97b8e77c4c20d89a3a571b6d6391546432ad4fb6593e2"
changed /files/.app.json/size
127
105
removed /files/.codex-plugin~1plugin.json
{
"sha256": "0b6c62a907c3483d8b64a2f8ccf3ad36da7c1186911d91fbc2b8b720865c6004",
"size": 1224
}Field is absent
added /files/.github~1workflows~1check-plugin-version.yml
Field was absent
{
"sha256": "72e7d2904b3771c8b67a08d433842922690c4a56cc8bc44d01e0f2942553a0cc",
"size": 3845
}added /files/.github~1workflows~1package-plugin.yml
Field was absent
{
"sha256": "14afd4c3533635fe3493018eea3412f00ace0fc1e780fb9bbd5584d1ef2f43ac",
"size": 765
}added /files/.gitignore
Field was absent
{
"sha256": "cf237c7aff44efbe6e502e645c3e06da03a69d7bdeb43392108ef3348143417e",
"size": 10
}added /files/LICENSE
Field was absent
{
"sha256": "c0cd2e4248f6802cf7170a560663be3692a5f3cd509878412de98afffac6243b",
"size": 1097
}added /files/README.md
Field was absent
{
"sha256": "32c5746f67cae44bde477649a64626026ea89ef9a386cf55e5f2fdfd2bec8ce0",
"size": 2021
}added /files/assets~1stack-internal-logo.png
Field was absent
{
"sha256": "71b6aa5fd3e93f2b39a91a0190ea11616a1f5baab1bd9ad173eb08f30a88f6ce",
"size": 3499
}added /files/assets~1stack-internal-logo.svg
Field was absent
{
"sha256": "7e6216389dfc6ff196901fe1b4d326e11dfc4ae246dadd2e1aba955042250e26",
"size": 856
}added /files/mcp.json
Field was absent
{
"sha256": "4cd527668053fbe1ec7c6dfe31a188a87b047342e20419e46640b0ec4904df70",
"size": 205
}added /files/plugin.json
Field was absent
{
"sha256": "6099a4cf97090a36ba1b5affaad93c2ae98cfe44d18f72c49d968dab970be469",
"size": 8027
}added /files/skills~1search~1SKILL.md
Field was absent
{
"sha256": "71c319c0865077664938351b14defbe81cf8c6109d715d77eb6c5ebce284b84b",
"size": 1045
}Full snapshot data
{
"files": {
".app.json": {
"sha256": "b02a0d335e852dd1e7a97b8e77c4c20d89a3a571b6d6391546432ad4fb6593e2",
"size": 105
},
".github/workflows/check-plugin-version.yml": {
"sha256": "72e7d2904b3771c8b67a08d433842922690c4a56cc8bc44d01e0f2942553a0cc",
"size": 3845
},
".github/workflows/package-plugin.yml": {
"sha256": "14afd4c3533635fe3493018eea3412f00ace0fc1e780fb9bbd5584d1ef2f43ac",
"size": 765
},
".gitignore": {
"sha256": "cf237c7aff44efbe6e502e645c3e06da03a69d7bdeb43392108ef3348143417e",
"size": 10
},
"LICENSE": {
"sha256": "c0cd2e4248f6802cf7170a560663be3692a5f3cd509878412de98afffac6243b",
"size": 1097
},
"README.md": {
"sha256": "32c5746f67cae44bde477649a64626026ea89ef9a386cf55e5f2fdfd2bec8ce0",
"size": 2021
},
"assets/stack-internal-logo.png": {
"sha256": "71b6aa5fd3e93f2b39a91a0190ea11616a1f5baab1bd9ad173eb08f30a88f6ce",
"size": 3499
},
"assets/stack-internal-logo.svg": {
"sha256": "7e6216389dfc6ff196901fe1b4d326e11dfc4ae246dadd2e1aba955042250e26",
"size": 856
},
"mcp.json": {
"sha256": "4cd527668053fbe1ec7c6dfe31a188a87b047342e20419e46640b0ec4904df70",
"size": 205
},
"plugin.json": {
"sha256": "6099a4cf97090a36ba1b5affaad93c2ae98cfe44d18f72c49d968dab970be469",
"size": 8027
},
"skills/search/SKILL.md": {
"sha256": "71c319c0865077664938351b14defbe81cf8c6109d715d77eb6c5ebce284b84b",
"size": 1045
}
}
}SHA-256 of public snapshot: d340320609a3c39b6a3d305cd55019680e8a5dcc9b37a63592781455b403cefc