← Stack InternalCONTENT HISTORY

Update to Stack Internal

Snapshot Oct 24, 2026 · 13:17 UTC · version 1.0.2

WHAT CHANGED

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.

Save Stack Internal and check future changes in Following.

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

Before

Sep 30, 2026 · 23:12 UTC

6816ffd4a6d70c05f58d0f7220c8e46c703dfbf024d6f4ea2ffad05d41365f3c

After

Oct 24, 2026 · 13:17 UTC

b02a0d335e852dd1e7a97b8e77c4c20d89a3a571b6d6391546432ad4fb6593e2

Package file

Before

Sep 30, 2026 · 23:12 UTC

127

After

Oct 24, 2026 · 13:17 UTC

105

Package file

Before

Sep 30, 2026 · 23:12 UTC

{"sha256":"0b6c62a907c3483d8b64a2f8ccf3ad36da7c1186911d91fbc2b8b720865c6004","size":1224}

After

Oct 24, 2026 · 13:17 UTC

Not present

Package file

Before

Sep 30, 2026 · 23:12 UTC

Not present

After

Oct 24, 2026 · 13:17 UTC

{"sha256":"72e7d2904b3771c8b67a08d433842922690c4a56cc8bc44d01e0f2942553a0cc","size":3845}

Compare saved observations

Download comparison 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

BEFORE
"6816ffd4a6d70c05f58d0f7220c8e46c703dfbf024d6f4ea2ffad05d41365f3c"
AFTER
"b02a0d335e852dd1e7a97b8e77c4c20d89a3a571b6d6391546432ad4fb6593e2"

changed /files/.app.json/size

BEFORE
127
AFTER
105

removed /files/.codex-plugin~1plugin.json

BEFORE
{
  "sha256": "0b6c62a907c3483d8b64a2f8ccf3ad36da7c1186911d91fbc2b8b720865c6004",
  "size": 1224
}
AFTER
Field is absent

added /files/.github~1workflows~1check-plugin-version.yml

BEFORE
Field was absent
AFTER
{
  "sha256": "72e7d2904b3771c8b67a08d433842922690c4a56cc8bc44d01e0f2942553a0cc",
  "size": 3845
}

added /files/.github~1workflows~1package-plugin.yml

BEFORE
Field was absent
AFTER
{
  "sha256": "14afd4c3533635fe3493018eea3412f00ace0fc1e780fb9bbd5584d1ef2f43ac",
  "size": 765
}

added /files/.gitignore

BEFORE
Field was absent
AFTER
{
  "sha256": "cf237c7aff44efbe6e502e645c3e06da03a69d7bdeb43392108ef3348143417e",
  "size": 10
}

added /files/LICENSE

BEFORE
Field was absent
AFTER
{
  "sha256": "c0cd2e4248f6802cf7170a560663be3692a5f3cd509878412de98afffac6243b",
  "size": 1097
}

added /files/README.md

BEFORE
Field was absent
AFTER
{
  "sha256": "32c5746f67cae44bde477649a64626026ea89ef9a386cf55e5f2fdfd2bec8ce0",
  "size": 2021
}

added /files/assets~1stack-internal-logo.png

BEFORE
Field was absent
AFTER
{
  "sha256": "71b6aa5fd3e93f2b39a91a0190ea11616a1f5baab1bd9ad173eb08f30a88f6ce",
  "size": 3499
}

added /files/assets~1stack-internal-logo.svg

BEFORE
Field was absent
AFTER
{
  "sha256": "7e6216389dfc6ff196901fe1b4d326e11dfc4ae246dadd2e1aba955042250e26",
  "size": 856
}

added /files/mcp.json

BEFORE
Field was absent
AFTER
{
  "sha256": "4cd527668053fbe1ec7c6dfe31a188a87b047342e20419e46640b0ec4904df70",
  "size": 205
}

added /files/plugin.json

BEFORE
Field was absent
AFTER
{
  "sha256": "6099a4cf97090a36ba1b5affaad93c2ae98cfe44d18f72c49d968dab970be469",
  "size": 8027
}

added /files/skills~1search~1SKILL.md

BEFORE
Field was absent
AFTER
{
  "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