From eaf818b35c4e624b97f765ac45e9ebb26940255d Mon Sep 17 00:00:00 2001 From: jan-kubica Date: Thu, 22 Oct 2026 14:37:49 +0200 Subject: [PATCH 1/5] chore: adopt Bun 1.4.4 and bun fmt Pin Bun 1.4.4 and replace oxfmt with bun fmt. Formatter configuration moves into bunfig.toml [fmt] with the shared style and generated-file and fixture ignores from the toolchain policy, CI checks the whole repository with bun fmt --check, and hooks format staged files with bun fmt --staged. The repository is reformatted once under the shared style. bun-types 1.4.4 carries a temporary quarantine exclusion that expires when the normal five-day window admits it. --- .changeset/config.json | 2 +- .github/workflows/ci.yml | 2 +- .oxfmtrc.json | 31 -------------------- CONTRIBUTING.md | 2 +- README.md | 2 +- bun.lock | 49 ++------------------------------ bunfig.toml | 42 +++++++++++++++++++++++++++ docs/release.md | 2 +- lefthook.yml | 6 ++-- package.json | 7 ++--- packages/cli/package.json | 1 - packages/cli/src/index.ts | 19 +++++++------ packages/core/package.json | 1 - packages/core/src/index.test.ts | 6 ++-- packages/rules/package.json | 1 - packages/rules/src/index.test.ts | 7 +++-- packages/rules/src/index.ts | 17 +++++------ packages/sarif/package.json | 1 - packages/sarif/src/index.test.ts | 3 +- scripts/tooling-adoption.test.ts | 11 +++---- turbo.json | 3 +- 21 files changed, 88 insertions(+), 127 deletions(-) delete mode 100644 .oxfmtrc.json diff --git a/.changeset/config.json b/.changeset/config.json index 3e1d4eb..b158f33 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -9,7 +9,7 @@ "linked": [], "access": "public", "baseBranch": "main", - "format": "oxfmt", + "format": false, "updateInternalDependencies": "patch", "ignore": [] } diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 51d417b..715acf6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -83,7 +83,7 @@ jobs: if: steps.toolchain.outputs.changed == 'true' - run: bun test scripts/tooling-adoption.test.ts - run: bun run lint - - run: bun run format:check + - run: bun fmt --check - run: bun run test - run: bun run knip - run: bun run build diff --git a/.oxfmtrc.json b/.oxfmtrc.json deleted file mode 100644 index 9aa840c..0000000 --- a/.oxfmtrc.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "$schema": "./node_modules/oxfmt/configuration_schema.json", - "ignorePatterns": [ - "**/*.gen.*", - "**/*.min.*", - "**/.cache/**", - "**/dist/**" - ], - "printWidth": 80, - "sortImports": { - "customGroups": [ - { - "groupName": "skillguard", - "elementNamePattern": ["@skillguard/**"] - } - ], - "groups": [ - ["value-builtin", "value-external", "type-builtin", "type-external"], - "skillguard", - [ - "value-parent", - "value-sibling", - "value-index", - "type-parent", - "type-sibling", - "type-index" - ] - ], - "newlinesBetween": true - } -} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4fdf883..ce458b6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -9,7 +9,7 @@ bun run lint:ws bun run typecheck bun run check:typecheck-parity bun run lint -bun run format:check +bun fmt --check bun run test bun run knip bun run build diff --git a/README.md b/README.md index a13a12f..d16dc68 100644 --- a/README.md +++ b/README.md @@ -215,7 +215,7 @@ bun run lint:ws bun run typecheck bun run check:typecheck-parity bun run lint -bun run format:check +bun fmt --check bun run test bun run knip bun run build diff --git a/bun.lock b/bun.lock index 76b8ff7..f893b96 100644 --- a/bun.lock +++ b/bun.lock @@ -12,11 +12,10 @@ "@stll/typescript-config": "0.8.0", "@types/node": "26.6.5", "@typescript/native": "npm:typescript@7.0.2", - "bun-types": "1.4.3", + "bun-types": "1.4.4", "eslint-plugin-sonarjs": "4.2.2", "knip": "6.41.0", "lefthook": "2.1.16", - "oxfmt": "0.72.0", "oxlint": "1.87.0", "oxlint-tsgolint": "7.0.2003", "sherif": "1.13.0", @@ -287,44 +286,6 @@ "@oxc-resolver/binding-win32-x64-msvc": ["@oxc-resolver/binding-win32-x64-msvc@11.24.2", "", { "os": "win32", "cpu": "x64" }, "sha512-UqGPmo56KDfLlfXFAFIrNflHT8tFxWGEivWg3Zeyp4Uy2NlKN1FGPr6/BxcLGG3+kZ6Wp14g5Uj+n71boqZfiw=="], - "@oxfmt/binding-android-arm-eabi": ["@oxfmt/binding-android-arm-eabi@0.72.0", "", { "os": "android", "cpu": "arm" }, "sha512-u4U1uaDOVBuorGNC/07NLm48nECHOiJJka002YGML16Md2DRvf38RGBt01lH60EOGvNlFVmbLoksQedNBoZHKw=="], - - "@oxfmt/binding-android-arm64": ["@oxfmt/binding-android-arm64@0.72.0", "", { "os": "android", "cpu": "arm64" }, "sha512-GCnM+Ae2mWOKC+92y3FOb6eZJeVnBAVz82e3lITUUg+kxukYKzBNAvJ/hhHIfa2A0md55SYYhdWPddSSy3KPVA=="], - - "@oxfmt/binding-darwin-arm64": ["@oxfmt/binding-darwin-arm64@0.72.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-LjQ8tlevdtwraFlWC6AnQ1Forzde0clRmnsP3QmK+ydSElDt/J+5Jc+m+//Ly1G97aP7WCNUw110QMIUw2K7xA=="], - - "@oxfmt/binding-darwin-x64": ["@oxfmt/binding-darwin-x64@0.72.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-+ZbcxhB1C34RQR5IldSyY6Z/yalJIxHXhP36PGE4sEq0f/lgL5jCLmOKoDeVm8dqd9gFGDsd1bNWHSGCAwdSkw=="], - - "@oxfmt/binding-freebsd-x64": ["@oxfmt/binding-freebsd-x64@0.72.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-yGPhA8sePEBFV9iGcprhyOk3Bz3fZshswMH3DpYIPZFLT1DG5LjiZ0j6AJQpSueaL6bUK0av1K+5+fe+ldy5EQ=="], - - "@oxfmt/binding-linux-arm-gnueabihf": ["@oxfmt/binding-linux-arm-gnueabihf@0.72.0", "", { "os": "linux", "cpu": "arm" }, "sha512-/g5axuqFMcAtoQrFLR5EJEMDjR5Ea4GuzpdDmMpPWAgrF1DmL4kD1NPNVlpXEOxpFJnD6lPvLKYj1lzdlrfifA=="], - - "@oxfmt/binding-linux-arm-musleabihf": ["@oxfmt/binding-linux-arm-musleabihf@0.72.0", "", { "os": "linux", "cpu": "arm" }, "sha512-InVitdHbS09PM+w+WinIiyX37rC9R3L7lUP9mKy9uKTEDSUFaLjWsLoreRIxKivnv7Ndqc6Trvi+K+b6ZzhiJg=="], - - "@oxfmt/binding-linux-arm64-gnu": ["@oxfmt/binding-linux-arm64-gnu@0.72.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-WKjlyRAxpPjXoqeuwFBim5LscgvY+RNEiZ971C9JlRQZONhJTsXDki/oHFYQE+fzzRpzXh3owZvOdT3kNL2g+g=="], - - "@oxfmt/binding-linux-arm64-musl": ["@oxfmt/binding-linux-arm64-musl@0.72.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-poafnbsPpJhR+5Mbwpf8CscugTyiRAzjTOxRVn8ra3X2jnURs2xL5Du2xl5g2iW85lICMglpmLf8jDjZEbNgzQ=="], - - "@oxfmt/binding-linux-ppc64-gnu": ["@oxfmt/binding-linux-ppc64-gnu@0.72.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-zNUi0gKRsO7S3IfPzsTbnm88OedPuX32hmZFWZRWHvWJlAoZRwVbeO6Nb3hng4vDgL7qUKp4TGqzPz1mhsycYg=="], - - "@oxfmt/binding-linux-riscv64-gnu": ["@oxfmt/binding-linux-riscv64-gnu@0.72.0", "", { "os": "linux", "cpu": "none" }, "sha512-qTY7z/iyF/rWI2HWwWMevXqZW5PZUOofUy2afK7v6rseXnpld3yjgyIk6pCux3DqWQ0lB+f5atvLJNBwzLvFsw=="], - - "@oxfmt/binding-linux-riscv64-musl": ["@oxfmt/binding-linux-riscv64-musl@0.72.0", "", { "os": "linux", "cpu": "none" }, "sha512-w18qfo8vEMD6EKEHtzTvjc6jH8yCyXIT1Bn7PFWJd0PpZyzH/VQDx4xvjCh0LGz6GRzqiezbisTdG9AoXtpkZQ=="], - - "@oxfmt/binding-linux-s390x-gnu": ["@oxfmt/binding-linux-s390x-gnu@0.72.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-grW8HwEir+vK7fCcq1ZgL3NHQCfZ1PidiERE9Hbf+24xGys+DoDaoqTht4ccfn0PcBwbViLkwkda/KNpJu2KRQ=="], - - "@oxfmt/binding-linux-x64-gnu": ["@oxfmt/binding-linux-x64-gnu@0.72.0", "", { "os": "linux", "cpu": "x64" }, "sha512-wQJRQfWBRIn88Pkr449EUViwRayrYUScg7ty+Ihiem21mQ9BUA6S9e/4RAgyNk9lMag0KBouyKskjq61rOC0WQ=="], - - "@oxfmt/binding-linux-x64-musl": ["@oxfmt/binding-linux-x64-musl@0.72.0", "", { "os": "linux", "cpu": "x64" }, "sha512-T1B0uQzafxuGPjjaPrZJ497nxoi1BiI65JfsYc56nNpmev3msfb/iaTmH2kQuNFqa8PKxpMlf3GhWrWBvBPORQ=="], - - "@oxfmt/binding-openharmony-arm64": ["@oxfmt/binding-openharmony-arm64@0.72.0", "", { "os": "none", "cpu": "arm64" }, "sha512-OKxxgTurl7+hypVplO8QRAbbQlwEs0j1Y6FZv+ZN2qNbdxQk2muMlzuJNBGTCWwxQ0rkkOD1uK/DW1fvzoUSJA=="], - - "@oxfmt/binding-win32-arm64-msvc": ["@oxfmt/binding-win32-arm64-msvc@0.72.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-L78TKzURqvjuZOCo88ixMbPXf/RP7u31Y0cmjJ/KEmrHmfYhmhEvsDaTYPiyTRne64jUgCbADfY0YeoQk4/Xyw=="], - - "@oxfmt/binding-win32-ia32-msvc": ["@oxfmt/binding-win32-ia32-msvc@0.72.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-gQtFW+Ii8BWgtJTAD17TY/WsdNS5gUfAPov8iI1jeq4r9lRRYImmxPL08UU00/RLaCfBJwh2UgINnDY0iOiZ+A=="], - - "@oxfmt/binding-win32-x64-msvc": ["@oxfmt/binding-win32-x64-msvc@0.72.0", "", { "os": "win32", "cpu": "x64" }, "sha512-uhooIN+DCzWX5uH7mQkSVCsODqsGluGJ4n3ch4+mITtWKpESMDjUJUSDBAVFuYQDwqY2McPDKdKJbM0oZVW/Qw=="], - "@oxlint-tsgolint/darwin-arm64": ["@oxlint-tsgolint/darwin-arm64@7.0.2003", "", { "os": "darwin", "cpu": "arm64" }, "sha512-TgV33rXr6ueXBwvc+0nssUkTBSXHJxv77I8p4RCjDjCnvexHtmoPiudVRDfj3S3puMDdeQdHW6jdUgUPy3nr/w=="], "@oxlint-tsgolint/darwin-x64": ["@oxlint-tsgolint/darwin-x64@7.0.2003", "", { "os": "darwin", "cpu": "x64" }, "sha512-hY3FMAjIaPDdK3FNxyRXRfHPOFeoBn6dmnLyKZgQ2IbTTD1adXhl6PfCIqHhCPvurigv7nf7mYuWZZ19MmJzmg=="], @@ -533,7 +494,7 @@ "builtin-modules": ["builtin-modules@3.3.0", "", {}, "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw=="], - "bun-types": ["bun-types@1.4.3", "", { "dependencies": { "@types/node": "*", "undici-types": "*" } }, "sha512-tinRJNGOmUN+tEAsn2y2e942n9JHRHR42iUYzDH75NmhJqVBokGSQkkfSFdNWwsANIdrK6ACH9t01M452YyTwg=="], + "bun-types": ["bun-types@1.4.4", "", { "dependencies": { "@types/node": "*", "undici-types": "*" } }, "sha512-yjrJh5oGX7mMPKGd19YXyIjmEuj4G4zNC30bs7PM9Az7NQ3ndF3j6hbeRdvJTRQEhJ/FYQwW0a2moweEi2hMxQ=="], "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], @@ -703,8 +664,6 @@ "oxc-resolver": ["oxc-resolver@11.24.2", "", { "optionalDependencies": { "@oxc-resolver/binding-android-arm-eabi": "11.24.2", "@oxc-resolver/binding-android-arm64": "11.24.2", "@oxc-resolver/binding-darwin-arm64": "11.24.2", "@oxc-resolver/binding-darwin-x64": "11.24.2", "@oxc-resolver/binding-freebsd-x64": "11.24.2", "@oxc-resolver/binding-linux-arm-gnueabihf": "11.24.2", "@oxc-resolver/binding-linux-arm-musleabihf": "11.24.2", "@oxc-resolver/binding-linux-arm64-gnu": "11.24.2", "@oxc-resolver/binding-linux-arm64-musl": "11.24.2", "@oxc-resolver/binding-linux-ppc64-gnu": "11.24.2", "@oxc-resolver/binding-linux-riscv64-gnu": "11.24.2", "@oxc-resolver/binding-linux-riscv64-musl": "11.24.2", "@oxc-resolver/binding-linux-s390x-gnu": "11.24.2", "@oxc-resolver/binding-linux-x64-gnu": "11.24.2", "@oxc-resolver/binding-linux-x64-musl": "11.24.2", "@oxc-resolver/binding-openharmony-arm64": "11.24.2", "@oxc-resolver/binding-wasm32-wasi": "11.24.2", "@oxc-resolver/binding-win32-arm64-msvc": "11.24.2", "@oxc-resolver/binding-win32-x64-msvc": "11.24.2" } }, "sha512-FY91FiDBj7ls5MsFS9jN3tjz2o0/zsdSsymlakySaBwVJZorHhkWyICLZMKxlu1R9vYo+sd3z1jwb4J8x7bNDw=="], - "oxfmt": ["oxfmt@0.72.0", "", { "dependencies": { "tinypool": "2.2.0" }, "optionalDependencies": { "@oxfmt/binding-android-arm-eabi": "0.72.0", "@oxfmt/binding-android-arm64": "0.72.0", "@oxfmt/binding-darwin-arm64": "0.72.0", "@oxfmt/binding-darwin-x64": "0.72.0", "@oxfmt/binding-freebsd-x64": "0.72.0", "@oxfmt/binding-linux-arm-gnueabihf": "0.72.0", "@oxfmt/binding-linux-arm-musleabihf": "0.72.0", "@oxfmt/binding-linux-arm64-gnu": "0.72.0", "@oxfmt/binding-linux-arm64-musl": "0.72.0", "@oxfmt/binding-linux-ppc64-gnu": "0.72.0", "@oxfmt/binding-linux-riscv64-gnu": "0.72.0", "@oxfmt/binding-linux-riscv64-musl": "0.72.0", "@oxfmt/binding-linux-s390x-gnu": "0.72.0", "@oxfmt/binding-linux-x64-gnu": "0.72.0", "@oxfmt/binding-linux-x64-musl": "0.72.0", "@oxfmt/binding-openharmony-arm64": "0.72.0", "@oxfmt/binding-win32-arm64-msvc": "0.72.0", "@oxfmt/binding-win32-ia32-msvc": "0.72.0", "@oxfmt/binding-win32-x64-msvc": "0.72.0" }, "peerDependencies": { "svelte": "^5.0.0", "vite-plus": "*" }, "optionalPeers": ["svelte", "vite-plus"], "bin": { "oxfmt": "bin/oxfmt" } }, "sha512-16OQeL0uhPZbfmT9S9WWM0Nv9+BmVi8Ra1uTYaSKj/qSCs6FB30KOhz9JoNYw6thT+K5bVxsk/tSEOu497i34g=="], - "oxlint": ["oxlint@1.87.0", "", { "optionalDependencies": { "@oxlint/binding-android-arm-eabi": "1.87.0", "@oxlint/binding-android-arm64": "1.87.0", "@oxlint/binding-darwin-arm64": "1.87.0", "@oxlint/binding-darwin-x64": "1.87.0", "@oxlint/binding-freebsd-x64": "1.87.0", "@oxlint/binding-linux-arm-gnueabihf": "1.87.0", "@oxlint/binding-linux-arm-musleabihf": "1.87.0", "@oxlint/binding-linux-arm64-gnu": "1.87.0", "@oxlint/binding-linux-arm64-musl": "1.87.0", "@oxlint/binding-linux-ppc64-gnu": "1.87.0", "@oxlint/binding-linux-riscv64-gnu": "1.87.0", "@oxlint/binding-linux-riscv64-musl": "1.87.0", "@oxlint/binding-linux-s390x-gnu": "1.87.0", "@oxlint/binding-linux-x64-gnu": "1.87.0", "@oxlint/binding-linux-x64-musl": "1.87.0", "@oxlint/binding-openharmony-arm64": "1.87.0", "@oxlint/binding-win32-arm64-msvc": "1.87.0", "@oxlint/binding-win32-ia32-msvc": "1.87.0", "@oxlint/binding-win32-x64-msvc": "1.87.0" }, "peerDependencies": { "oxlint-tsgolint": ">=7.0.2003", "vite-plus": "*" }, "optionalPeers": ["oxlint-tsgolint", "vite-plus"], "bin": { "oxlint": "bin/oxlint" } }, "sha512-drxVlaW7Oqq7wSy1CN25znRu00aRq8n57Q2wniJRxCmtYVz07ufCm7EVDPQFZURrTgQIjzKrVEHAD/HcvJXObg=="], "oxlint-tsgolint": ["oxlint-tsgolint@7.0.2003", "", { "optionalDependencies": { "@oxlint-tsgolint/darwin-arm64": "7.0.2003", "@oxlint-tsgolint/darwin-x64": "7.0.2003", "@oxlint-tsgolint/linux-arm64": "7.0.2003", "@oxlint-tsgolint/linux-x64": "7.0.2003", "@oxlint-tsgolint/win32-arm64": "7.0.2003", "@oxlint-tsgolint/win32-x64": "7.0.2003" }, "bin": { "tsgolint": "./bin/tsgolint.js" } }, "sha512-VnK4zlqgmgq/7ZcjzCk/WpN8kKFsYGcB85Io9qT3wL4K8Un3RKmJkp793crNETieMusPMKOA4a+Mw2wbteI6TQ=="], @@ -789,8 +748,6 @@ "tinyglobby": ["tinyglobby@0.2.17", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g=="], - "tinypool": ["tinypool@2.2.0", "", {}, "sha512-jBrmx4lYmaC9k/mgPbylxs7kBUxHtD8256up+HjLaDFfXScKJQyil+SWXSvhAtT7XHo+yTVlpB81PGmHP8oLSQ=="], - "tree-kill": ["tree-kill@1.2.2", "", { "bin": { "tree-kill": "cli.js" } }, "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="], "ts-api-utils": ["ts-api-utils@2.5.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA=="], @@ -849,8 +806,6 @@ "@manypkg/tools/yaml": ["yaml@2.9.0", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA=="], - "bun-types/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], - "eslint/minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], "espree/acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="], diff --git a/bunfig.toml b/bunfig.toml index 875d5cb..afc4784 100644 --- a/bunfig.toml +++ b/bunfig.toml @@ -3,7 +3,49 @@ linker = "isolated" # 5-day quarantine: reject package versions published less than 5 days ago. minimumReleaseAge = 432_000 minimumReleaseAgeExcludes = [ + # bun-types ships only declarations and must match the pinned Bun runtime. + "bun-types", # quarantine-expires: 2026-10-27T10:17:50.170Z "@stll/oxlint-config", # quarantine-excluded-since: 2026-10-17T00:00:00.000Z "@stll/oxlint-plugin", # quarantine-excluded-since: 2026-10-17T00:00:00.000Z "@stll/typescript-config", # quarantine-excluded-since: 2026-10-17T00:00:00.000Z ] + +[fmt] +printWidth = 80 +ignorePatterns = [ + # Shared generated files (stll-toolchain formatter policy). + ".ai/shared/**", + ".agents/skills/**", + ".claude/skills/**", + "**/AGENTS.md", + "**/GEMINI.md", + "**/CLAUDE.md", + ".github/dependabot.yml", + "**/fixtures/**", + "**/__fixtures__/**", + "**/testdata/**", + "**/__snapshots__/**", + "**/*.gen.*", + "**/*.min.*", + "**/.cache/**", + "**/dist/**", +] + +[fmt.sortImports] +customGroups = [ + { groupName = "react", elementNamePattern = [ + "react", + "react-dom", + "react-dom/**", + ] }, + { groupName = "stella", elementNamePattern = ["@stll/**"] }, + { groupName = "aliases", elementNamePattern = ["@/**"] }, +] +groups = [ + "react", + ["builtin", "external", "type-builtin", "type-external"], + "stella", + "aliases", + ["parent", "sibling", "index", "type-parent", "type-sibling", "type-index"], +] +newlinesBetween = true diff --git a/docs/release.md b/docs/release.md index 092bbfa..8243afb 100644 --- a/docs/release.md +++ b/docs/release.md @@ -35,7 +35,7 @@ bun install --frozen-lockfile bun run lint:ws bun run typecheck bun run lint -bun run format:check +bun fmt --check bun run test bun run knip bun --filter @stll/skillguard intent:validate diff --git a/lefthook.yml b/lefthook.yml index f639320..baf96f3 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -16,9 +16,7 @@ pre-commit: run: bun --bun oxlint -c oxlint.config.ts --deny-warnings --no-error-on-unmatched-pattern --fix {staged_files} stage_fixed: true format: - glob: "**/*.{ts,tsx,js,jsx,json,css,md}" - run: bun --bun oxfmt -c .oxfmtrc.json --no-error-on-unmatched-pattern {staged_files} "!.ai/**" "!.agents/**" "!.claude/**" "!AGENTS.md" "!CLAUDE.md" "!GEMINI.md" - stage_fixed: true + run: bun fmt --staged pre-push: parallel: false @@ -32,4 +30,4 @@ pre-push: test: run: bun run test format: - run: bun run format:check + run: bun fmt --check diff --git a/package.json b/package.json index 11b9899..a4a6a26 100644 --- a/package.json +++ b/package.json @@ -23,8 +23,6 @@ "changeset:version": "changeset version && bun scripts/check-lockfile-workspace-versions.ts --write && bun install --frozen-lockfile", "check:lockfile-versions": "bun scripts/check-lockfile-workspace-versions.ts", "clean": "turbo run clean && git clean -xdf node_modules", - "format": "turbo run format", - "format:check": "turbo run format -- --check", "hooks:install": "lefthook install", "hooks:uninstall": "lefthook uninstall", "knip": "knip", @@ -47,11 +45,10 @@ "@stll/typescript-config": "0.8.0", "@types/node": "26.6.5", "@typescript/native": "npm:typescript@7.0.2", - "bun-types": "1.4.3", + "bun-types": "1.4.4", "eslint-plugin-sonarjs": "4.2.2", "knip": "6.41.0", "lefthook": "2.1.16", - "oxfmt": "0.72.0", "oxlint": "1.87.0", "oxlint-tsgolint": "7.0.2003", "sherif": "1.13.0", @@ -63,5 +60,5 @@ "bun": ">=1.4.1", "node": ">=20" }, - "packageManager": "bun@1.4.3" + "packageManager": "bun@1.4.4" } diff --git a/packages/cli/package.json b/packages/cli/package.json index c548868..1f534aa 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -46,7 +46,6 @@ "scripts": { "build": "tsdown --entry src/index.ts --format esm --dts", "clean": "git clean -xdf .cache dist node_modules", - "format": "oxfmt -c ../../.oxfmtrc.json .", "lint": "oxlint -c ../../oxlint.config.ts .", "lint:fix": "oxlint -c ../../oxlint.config.ts --fix .", "intent:validate": "intent validate skills", diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 68f4e1c..740f54b 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -1,28 +1,29 @@ #!/usr/bin/env bun +import { readFileSync } from "node:fs"; +import { writeFile } from "node:fs/promises"; + import { - PolicyName, - ScanStatus, - Severity, evaluatePolicy, - scanPath, type Finding, + PolicyName, type PolicyName as PolicyNameValue, + scanPath, type ScanReport, + ScanStatus, + Severity, type Severity as SeverityValue, } from "@stll/skillguard-core"; import { - ScanPreset, - SemanticProviderName, createRuleSet, createSemanticReviewRule, + ScanPreset, type ScanPreset as ScanPresetValue, + SemanticProviderName, type SemanticProviderName as SemanticProviderNameValue, } from "@stll/skillguard-rules"; import { toSarif } from "@stll/skillguard-sarif"; -import { readFileSync } from "node:fs"; -import { writeFile } from "node:fs/promises"; -import { resolveInput, type ResolvedInput } from "./input"; +import { type ResolvedInput, resolveInput } from "./input"; type PackageManifest = { version: string; diff --git a/packages/core/package.json b/packages/core/package.json index 3fe658e..71766d6 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -39,7 +39,6 @@ "scripts": { "build": "tsdown --entry src/index.ts --format esm --dts", "clean": "git clean -xdf .cache dist node_modules", - "format": "oxfmt -c ../../.oxfmtrc.json .", "lint": "oxlint -c ../../oxlint.config.ts .", "lint:fix": "oxlint -c ../../oxlint.config.ts --fix .", "test": "bun test src", diff --git a/packages/core/src/index.test.ts b/packages/core/src/index.test.ts index 6f1bf8b..944994c 100644 --- a/packages/core/src/index.test.ts +++ b/packages/core/src/index.test.ts @@ -4,12 +4,12 @@ import { tmpdir } from "node:os"; import nodePath from "node:path"; import { - FindingCategory, - Severity, createFinding, evaluatePolicy, - scanPath, + FindingCategory, type Rule, + scanPath, + Severity, } from "./index"; test("scanPath scans text files without including file contents in report files", async () => { diff --git a/packages/rules/package.json b/packages/rules/package.json index 28b2953..20d16a8 100644 --- a/packages/rules/package.json +++ b/packages/rules/package.json @@ -39,7 +39,6 @@ "scripts": { "build": "tsdown --entry src/index.ts --format esm --dts", "clean": "git clean -xdf .cache dist node_modules", - "format": "oxfmt -c ../../.oxfmtrc.json .", "lint": "oxlint -c ../../oxlint.config.ts .", "lint:fix": "oxlint -c ../../oxlint.config.ts --fix .", "test": "bun test src", diff --git a/packages/rules/src/index.test.ts b/packages/rules/src/index.test.ts index bc3f4b3..c7a2bb4 100644 --- a/packages/rules/src/index.test.ts +++ b/packages/rules/src/index.test.ts @@ -1,15 +1,16 @@ -import { Severity, scanPath } from "@stll/skillguard-core"; import { expect, test } from "bun:test"; import { mkdtemp, writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; import nodePath from "node:path"; +import { scanPath, Severity } from "@stll/skillguard-core"; + import { + createRecommendedRuleSet, + createSemanticReviewRule, RULE_CATALOG, ScanPreset, SemanticProviderName, - createRecommendedRuleSet, - createSemanticReviewRule, type SemanticReviewInput, } from "./index"; diff --git a/packages/rules/src/index.ts b/packages/rules/src/index.ts index 139a38a..73abc96 100644 --- a/packages/rules/src/index.ts +++ b/packages/rules/src/index.ts @@ -1,22 +1,23 @@ import { parser as pythonParser } from "@lezer/python"; +import * as ts from "typescript"; + import { - FindingCategory, - Severity, createFinding, - isRecord, - isTextLikeFile, - scanPath, - severityAtLeast, type Finding, + FindingCategory, type FindingInput, - type JsonScanFile, + isRecord, + isTextLikeFile, type JsonScalar, + type JsonScanFile, type Rule, type RuleContext, type ScanOptions, + scanPath, + Severity, + severityAtLeast, type TextScanFile, } from "@stll/skillguard-core"; -import * as ts from "typescript"; export { RULE_CATALOG, diff --git a/packages/sarif/package.json b/packages/sarif/package.json index d9c3176..a0b3086 100644 --- a/packages/sarif/package.json +++ b/packages/sarif/package.json @@ -39,7 +39,6 @@ "scripts": { "build": "tsdown --entry src/index.ts --format esm --dts", "clean": "git clean -xdf .cache dist node_modules", - "format": "oxfmt -c ../../.oxfmtrc.json .", "lint": "oxlint -c ../../oxlint.config.ts .", "lint:fix": "oxlint -c ../../oxlint.config.ts --fix .", "test": "bun test src", diff --git a/packages/sarif/src/index.test.ts b/packages/sarif/src/index.test.ts index a696c4a..041abba 100644 --- a/packages/sarif/src/index.test.ts +++ b/packages/sarif/src/index.test.ts @@ -1,6 +1,7 @@ -import type { ScanReport } from "@stll/skillguard-core"; import { expect, test } from "bun:test"; +import type { ScanReport } from "@stll/skillguard-core"; + import { toSarif } from "./index"; test("converts findings to SARIF results", () => { diff --git a/scripts/tooling-adoption.test.ts b/scripts/tooling-adoption.test.ts index c37d2aa..2e613c5 100644 --- a/scripts/tooling-adoption.test.ts +++ b/scripts/tooling-adoption.test.ts @@ -1,14 +1,15 @@ -import { library } from "@stll/oxlint-config"; -import { - portableSafetyPluginSpecifiers, - portableSafetyRules, -} from "@stll/oxlint-plugin"; import { describe, expect, test } from "bun:test"; import { execFileSync, spawnSync } from "node:child_process"; import { mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs"; import { join } from "node:path"; import { fileURLToPath } from "node:url"; +import { library } from "@stll/oxlint-config"; +import { + portableSafetyPluginSpecifiers, + portableSafetyRules, +} from "@stll/oxlint-plugin"; + import config from "../oxlint.config"; const root = fileURLToPath(new URL("../", import.meta.url)); diff --git a/turbo.json b/turbo.json index d52370e..cad5224 100644 --- a/turbo.json +++ b/turbo.json @@ -1,6 +1,6 @@ { "$schema": "https://turborepo.com/schema.json", - "globalDependencies": ["oxlint.config.ts", ".oxfmtrc.json"], + "globalDependencies": ["oxlint.config.ts", "bunfig.toml"], "tasks": { "build": { "dependsOn": ["^build"], @@ -9,7 +9,6 @@ "clean": { "cache": false }, - "format": {}, "lint": {}, "lint:fix": { "cache": false From dab9d1e8bbead6ce8276788e06fdaccb51bc397b Mon Sep 17 00:00:00 2001 From: jan-kubica Date: Thu, 22 Oct 2026 16:50:00 +0200 Subject: [PATCH 2/5] chore: take @stll/oxlint-config 1.7.0 and the shared pins @stll/oxlint-plugin moves to the shared 0.6.0, and Dependabot and the cloud setup are regenerated by the shared tooling. --- .agents/cloud-setup.sh | 137 +++++++++++++++++++++++++++++++++++++---- .claude/settings.json | 2 +- .github/dependabot.yml | 5 -- bun.lock | 8 +-- package.json | 4 +- 5 files changed, 131 insertions(+), 25 deletions(-) diff --git a/.agents/cloud-setup.sh b/.agents/cloud-setup.sh index 66945a5..0504f54 100755 --- a/.agents/cloud-setup.sh +++ b/.agents/cloud-setup.sh @@ -5,9 +5,9 @@ # Supported platform: Ubuntu 24.04 (noble), amd64/arm64, root or passwordless sudo. set -euo pipefail -usage() { echo 'Usage: cloud-setup.sh install|start' >&2; exit 2; } +usage() { echo 'Usage: cloud-setup.sh install|start|session' >&2; exit 2; } [[ "$#" == 1 ]] || usage -case "$1" in install|start) MODE="$1" ;; *) usage ;; esac +case "$1" in install|start|session) MODE="$1" ;; *) usage ;; esac fail() { echo "cloud-setup: $*" >&2; exit 1; } trap 'echo "cloud-setup: command failed at line $LINENO" >&2' ERR # Each phase logs its start and duration so a stalled phase is visible in the task log. @@ -45,12 +45,14 @@ service_run() ( done exec runuser -u stll-cloud -- "$@" ) -BUN_VERSION='1.4.3' +BUN_VERSION='1.4.4' NODE_VERSION='26.10.0' NODE_DIR="/opt/stll-cloud/node/$NODE_VERSION" BUN_DIR="/opt/stll-cloud/bun/$BUN_VERSION" export PATH="$NODE_DIR/bin:$BUN_DIR:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" BUN_CACHE="/var/cache/stll-cloud/bun/$OUTPUT_UID" +DEPENDENCY_STATE_ROOT=/var/lib/stll-cloud +DEPENDENCY_STAMP="$DEPENDENCY_STATE_ROOT/dependencies-$(printf '%s' "$REPO_ROOT" | sha256sum | cut -d' ' -f1).sha256" [[ -f "$REPO_ROOT/.node-version" && ! -L "$REPO_ROOT/.node-version" ]] || fail 'A regular root .node-version is required' [[ "$(awk 'NF { if (++count > 1 || NF != 1) exit 1; value=$1 } END { if (count != 1) exit 1; print value }' "$REPO_ROOT/.node-version")" == "$NODE_VERSION" ]] || fail 'Node selector changed; regenerate cloud-setup.sh' @@ -135,6 +137,60 @@ runtime_ready() { node_ready || fail 'Pinned Node, npm or npx is unavailable; run install' [[ -x "$BUN_DIR/bun" && "$($BUN_DIR/bun --version)" == "$BUN_VERSION" ]] || fail 'Pinned Bun is unavailable; run install' } +bun_route() { + local label="$1" resolved version + shift + resolved="$("$@" -c 'command -v bun')" || fail "Bun is unavailable through $label" + version="$("$@" -c 'bun --version')" || fail "Bun at $resolved failed through $label" + [[ "$version" == "$BUN_VERSION" ]] || fail "Bun at $resolved resolves version $version through $label; expected $BUN_VERSION" +} +verify_bun_routes() { + local configured_mise login_shell minimal_path mise_root root_mise shims + # Test-only overrides keep route executables and image locations inside fixtures. + login_shell="$(printenv STLL_CLOUD_TEST_LOGIN_SHELL || true)" + [[ -n "$login_shell" ]] || login_shell=bash + minimal_path="$(printenv STLL_CLOUD_TEST_MINIMAL_PATH || true)" + [[ -n "$minimal_path" ]] || minimal_path=/usr/local/bin:/usr/bin:/bin + root_mise="$(printenv STLL_CLOUD_TEST_ROOT_MISE || true)" + [[ -n "$root_mise" ]] || root_mise=/root/.local/share/mise + bun_route 'the setup PATH' env PATH="$PATH" sh + bun_route 'sh -c' sh + bun_route 'bash -lc' "$login_shell" -l + bun_route 'the minimal system PATH' env -i PATH="$minimal_path" sh + configured_mise="$(printenv MISE_DATA_DIR || true)" + for mise_root in "$configured_mise" "$OUTPUT_HOME/.local/share/mise" "$root_mise"; do + [[ -n "$mise_root" ]] || continue + shims="$mise_root/shims" + [[ -d "$shims" ]] || continue + bun_route "mise shims PATH $shims" env PATH="$shims:$PATH" sh + done +} +replace_image_buns() { + local candidate configured_mise directory mise_root root_mise + configured_mise="$(printenv MISE_DATA_DIR || true)" + root_mise="$(printenv STLL_CLOUD_TEST_ROOT_MISE || true)" + [[ -n "$root_mise" ]] || root_mise=/root/.local/share/mise + for mise_root in "$configured_mise" "$OUTPUT_HOME/.local/share/mise" "$root_mise"; do + [[ -n "$mise_root" ]] || continue + if [[ -d "$mise_root/installs/bun" ]]; then + while IFS= read -r -d '' candidate; do + [[ -d "$candidate" ]] || ln -sfnT -- "$BUN_DIR/bun" "$candidate" + done < <(find "$mise_root/installs/bun" \( -type f -o -type l \) \( -name bun -o -name bunx \) -print0) + fi + for candidate in "$mise_root/shims/bun" "$mise_root/shims/bunx"; do + [[ -e "$candidate" || -L "$candidate" ]] || continue + [[ -d "$candidate" ]] || ln -sfnT -- "$BUN_DIR/bun" "$candidate" + done + done + while IFS= read -r directory; do + [[ -n "$directory" ]] || directory=. + for candidate in "$directory/bun" "$directory/bunx"; do + [[ -e "$candidate" || -L "$candidate" ]] || continue + [[ -d "$candidate" ]] && continue + [[ "$(readlink -f -- "$candidate")" == "$(readlink -f -- "$BUN_DIR/bun")" ]] || ln -sfnT -- "$BUN_DIR/bun" "$candidate" + done + done < <(printf '%s' "$PATH" | tr : '\n') +} install_runtimes() ( if [[ ! -s /etc/ssl/certs/ca-certificates.crt ]]; then command -v update-ca-certificates >/dev/null || fail 'System CA certificate bundle is missing; restore ca-certificates in the base image offline before install' @@ -172,6 +228,8 @@ install_runtimes() ( ln -sfnT -- "$NODE_DIR/bin/npm" /usr/local/bin/npm ln -sfnT -- "$NODE_DIR/bin/npx" /usr/local/bin/npx ln -sfnT -- "$BUN_DIR/bun" /usr/local/bin/bun + replace_image_buns + verify_bun_routes ) dependency_install() { @@ -210,6 +268,47 @@ process.stdout.write([...hosts].sort().join(",")); network_run "$download_hosts" 240 runuser -u "$OUTPUT_USER" -- env HOME="$OUTPUT_HOME" BUN_INSTALL_CACHE_DIR="$BUN_CACHE" PATH="$PATH" BUN_CONFIG_HTTP_IDLE_TIMEOUT=20 "$BUN_DIR/bun" install --frozen-lockfile } +dependency_hash() { + [[ -f bun.lock && ! -L bun.lock ]] || fail 'A regular root bun.lock is required' + sha256sum -- bun.lock | cut -d ' ' -f1 +} +prepare_dependency_state() { + [[ ! -L "$DEPENDENCY_STATE_ROOT" ]] || fail 'Dependency state root must not be a symlink' + if [[ -e "$DEPENDENCY_STATE_ROOT" ]]; then + [[ -d "$DEPENDENCY_STATE_ROOT" && "$(stat -c '%u:%a' "$DEPENDENCY_STATE_ROOT")" == 0:755 ]] || fail 'Invalid dependency state root' + else + install -d -m 755 -o root -g root "$DEPENDENCY_STATE_ROOT" + fi + [[ ! -L "$DEPENDENCY_STAMP" ]] || fail 'Dependency stamp must not be a symlink' + if [[ -e "$DEPENDENCY_STAMP" ]]; then + [[ -f "$DEPENDENCY_STAMP" && "$(stat -c '%u:%a' "$DEPENDENCY_STAMP")" == 0:644 ]] || fail 'Invalid dependency stamp' + fi +} +write_dependency_stamp() { + local temporary + prepare_dependency_state + temporary="$(mktemp "$DEPENDENCY_STATE_ROOT/.dependencies.XXXXXX")" + chmod 644 "$temporary" + dependency_hash > "$temporary" + mv -f -- "$temporary" "$DEPENDENCY_STAMP" +} +install_dependencies() { + prepare_dependency_state + rm -f -- "$DEPENDENCY_STAMP" + dependency_install + write_dependency_stamp +} +sync_dependencies() { + local expected installed='' + prepare_dependency_state + expected="$(dependency_hash)" + if [[ -f "$DEPENDENCY_STAMP" ]]; then IFS= read -r installed < "$DEPENDENCY_STAMP" || true; fi + [[ "$installed" == "$expected" ]] && return + rm -f -- "$DEPENDENCY_STAMP" + dependency_install || fail 'bun.lock mismatch; dependency installation failed' + write_dependency_stamp +} + # Prevent package maintainer scripts from starting unmanaged system services. apt_install() ( @@ -307,12 +406,12 @@ while :; do *) _stll_cloud_part="$_stll_cloud_remaining"; _stll_cloud_more=no ;; esac case "$_stll_cloud_part" in - '/opt/stll-cloud/node/26.10.0/bin'|'/opt/stll-cloud/bun/1.4.3'|/usr/local/bin) ;; + '/opt/stll-cloud/node/26.10.0/bin'|'/opt/stll-cloud/bun/1.4.4'|/usr/local/bin) ;; *) _stll_cloud_result="$_stll_cloud_result$_stll_cloud_separator$_stll_cloud_part"; _stll_cloud_separator=: ;; esac [ "$_stll_cloud_more" = yes ] || break done -export PATH='/opt/stll-cloud/node/26.10.0/bin:/opt/stll-cloud/bun/1.4.3:/usr/local/bin'"${_stll_cloud_separator:+:}$_stll_cloud_result" +export PATH='/opt/stll-cloud/node/26.10.0/bin:/opt/stll-cloud/bun/1.4.4:/usr/local/bin'"${_stll_cloud_separator:+:}$_stll_cloud_result" unset _stll_cloud_remaining _stll_cloud_result _stll_cloud_separator _stll_cloud_part _stll_cloud_more STLL_CLOUD_PROFILE if ! cmp -s "$temporary" '/etc/profile.d/stll-cloud.sh'; then install -m 644 "$temporary" '/etc/profile.d/stll-cloud.sh'; fi @@ -349,7 +448,7 @@ done ) verify_shell_environment() { [[ -f '/etc/profile.d/stll-cloud.sh' && ! -L '/etc/profile.d/stll-cloud.sh' && "$(stat -c '%h:%u' '/etc/profile.d/stll-cloud.sh')" == 1:0 ]] || fail 'Managed shell environment is unavailable; run install' - [[ "$(sha256sum -- '/etc/profile.d/stll-cloud.sh' | cut -d ' ' -f1)" == 'a7dedf20b0380fb3ac726140bd85f0324ca3b99a499adcb850809292f82cfc7f' ]] || fail 'Managed shell environment differs; run install' + [[ "$(sha256sum -- '/etc/profile.d/stll-cloud.sh' | cut -d ' ' -f1)" == '1f0232ed3fb3271c674e32f63666d769eea47d0a1110ab3f1a05302b0435718c' ]] || fail 'Managed shell environment differs; run install' } @@ -360,19 +459,31 @@ verify_shell_environment() { + + if [[ "$MODE" == install ]]; then step runtimes install_runtimes step services install_services step tools install_tools step shell install_shell_environment - step dependencies dependency_install + step dependencies install_dependencies exit 0 fi -step runtime-check runtime_ready -step tool-check verify_tools -step shell install_shell_environment -step shell-check verify_shell_environment -step state prepare_state -step service-start start_services +start_environment() { + step runtime-check runtime_ready + step dependencies sync_dependencies + step tool-check verify_tools + step shell install_shell_environment + step shell-check verify_shell_environment + + step state prepare_state + step service-start start_services + +} +if [[ "$MODE" == session ]]; then + start_environment >&2 +else + start_environment +fi diff --git a/.claude/settings.json b/.claude/settings.json index fe7a931..a0bdeff 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -10,7 +10,7 @@ "hooks": [ { "type": "command", - "command": "if [ \"${CLAUDE_CODE_REMOTE:-}\" = \"true\" ]; then\n cloud_setup_incomplete() {\n printf '%s\\n' 'Cloud setup could not establish a verified session environment. From the repository root, run bash .agents/cloud-setup.sh install and then bash .agents/cloud-setup.sh start. Do not assume pinned tools or services are ready until start succeeds.'\n printf '%s\\n' \"cloud-setup: $1\" >&2\n exit 0\n }\n bash \"$CLAUDE_PROJECT_DIR/.agents/cloud-setup.sh\" start >&2 || cloud_setup_incomplete 'startup failed; run install'\n if [ -n \"${CLAUDE_ENV_FILE:-}\" ]; then\n if [ ! -s /etc/profile.d/stll-cloud.sh ]; then\n cloud_setup_incomplete 'cloud shell profile is unavailable; run install'\n fi\n cloud_shell_exports=\"$(cat /etc/profile.d/stll-cloud.sh)\" || cloud_setup_incomplete 'cloud shell profile could not be read; run install'\n [ -n \"$cloud_shell_exports\" ] || cloud_setup_incomplete 'cloud shell profile is unavailable; run install'\n printf '\\n%s\\n' \"$cloud_shell_exports\" >> \"$CLAUDE_ENV_FILE\" || cloud_setup_incomplete 'session environment could not be persisted; check its write access and rerun start'\n fi\nfi" + "command": "if [ \"${CLAUDE_CODE_REMOTE:-}\" = \"true\" ]; then\n cloud_setup_incomplete() {\n printf '%s\\n' 'Cloud setup could not establish a verified session environment. From the repository root, run bash .agents/cloud-setup.sh install and then bash .agents/cloud-setup.sh start. Do not assume pinned tools or services are ready until start succeeds.'\n printf '%s\\n' \"cloud-setup: $1\" >&2\n exit 0\n }\n if [ -n \"${CLAUDE_ENV_FILE:-}\" ]; then\n cloud_session_exports=\"$(bash \"$CLAUDE_PROJECT_DIR/.agents/cloud-setup.sh\" session)\" || cloud_setup_incomplete 'startup failed; run install'\n else\n bash \"$CLAUDE_PROJECT_DIR/.agents/cloud-setup.sh\" start >&2 || cloud_setup_incomplete 'startup failed; run install'\n exit 0\n fi\n if [ -n \"${CLAUDE_ENV_FILE:-}\" ]; then\n if [ ! -s /etc/profile.d/stll-cloud.sh ]; then\n cloud_setup_incomplete 'cloud shell profile is unavailable; run install'\n fi\n cloud_shell_exports=\"$(cat /etc/profile.d/stll-cloud.sh)\" || cloud_setup_incomplete 'cloud shell profile could not be read; run install'\n [ -n \"$cloud_shell_exports\" ] || cloud_setup_incomplete 'cloud shell profile is unavailable; run install'\n if [ -e \"$CLAUDE_ENV_FILE\" ] || [ -L \"$CLAUDE_ENV_FILE\" ]; then\n [ -f \"$CLAUDE_ENV_FILE\" ] && [ ! -L \"$CLAUDE_ENV_FILE\" ] || cloud_setup_incomplete 'session environment must be a regular file; check its path and rerun start'\n fi\n cloud_env_temporary=\"$(umask 077; mktemp \"${CLAUDE_ENV_FILE}.XXXXXX\")\" || cloud_setup_incomplete 'session environment could not be prepared; check its write access and rerun start'\n if [ -e \"$CLAUDE_ENV_FILE\" ] || [ -L \"$CLAUDE_ENV_FILE\" ]; then\n cat \"$CLAUDE_ENV_FILE\" > \"$cloud_env_temporary\" || { rm -f -- \"$cloud_env_temporary\"; cloud_setup_incomplete 'session environment could not be read; check its access and rerun start'; }\n fi\n if [ -n \"$cloud_session_exports\" ]; then\n cloud_session_exports=\"$cloud_session_exports\n$cloud_shell_exports\"\n else\n cloud_session_exports=\"$cloud_shell_exports\"\n fi\n printf '\\n%s\\n' \"$cloud_session_exports\" >> \"$cloud_env_temporary\" || { rm -f -- \"$cloud_env_temporary\"; cloud_setup_incomplete 'session environment could not be prepared; check its write access and rerun start'; }\n mv -f -- \"$cloud_env_temporary\" \"$CLAUDE_ENV_FILE\" || { rm -f -- \"$cloud_env_temporary\"; cloud_setup_incomplete 'session environment could not be persisted; check its write access and rerun start'; }\n fi\nfi" } ] } diff --git a/.github/dependabot.yml b/.github/dependabot.yml index ce250a9..0f1f19c 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -40,11 +40,6 @@ updates: - version-update:semver-major - version-update:semver-minor - version-update:semver-patch - - dependency-name: oxfmt - update-types: - - version-update:semver-major - - version-update:semver-minor - - version-update:semver-patch - dependency-name: lefthook update-types: - version-update:semver-major diff --git a/bun.lock b/bun.lock index f893b96..055da15 100644 --- a/bun.lock +++ b/bun.lock @@ -7,8 +7,8 @@ "devDependencies": { "@changesets/changelog-github": "1.0.1", "@changesets/cli": "3.0.3", - "@stll/oxlint-config": "1.4.0", - "@stll/oxlint-plugin": "0.2.2", + "@stll/oxlint-config": "1.7.0", + "@stll/oxlint-plugin": "0.6.0", "@stll/typescript-config": "0.8.0", "@types/node": "26.6.5", "@typescript/native": "npm:typescript@7.0.2", @@ -376,9 +376,9 @@ "@sonarsource/analyzer-commons-configurations": ["@sonarsource/analyzer-commons-configurations@2.31.0-5284", "", {}, "sha512-ruk3blMs9BE9RNSp9LPpWZAIjxJmq4Cp00E3cELIHz7Kym3WxdWGRlKOMYLRQ5tJg/de7jN5AtEElY3bGIfTcw=="], - "@stll/oxlint-config": ["@stll/oxlint-config@1.4.0", "", { "dependencies": { "acorn": "8.19.0", "esbuild": "0.28.2", "picomatch": "4.0.7", "semver": "7.8.5", "smol-toml": "1.9.1", "tsx": "4.23.15", "yaml": "2.9.1" }, "peerDependencies": { "oxlint": ">=1.87.0 <2", "oxlint-tsgolint": ">=7.0.2003 <8", "vite": "8.1.5" }, "optionalPeers": ["vite"], "bin": { "stll-dependabot": "dist/dependabot-cli.mjs", "stll-cloud-setup": "dist/cloud-setup-cli.mjs", "stll-consumer-compat": "dist/consumer-compat-cli.mjs", "stll-toolchain-check": "dist/toolchain-check-cli.mjs", "stll-typecheck-probe": "dist/typecheck-probe-cli.mjs", "stll-publish-contract": "dist/publish-contract-cli.mjs", "stll-typecheck-parity": "dist/typecheck-parity-cli.mjs", "stll-toolchain-changed": "dist/toolchain-changed-cli.mjs" } }, "sha512-F5E4Jsq8LfIivOn5ssv8j3QaGnApg6CM9x3PKBpS3S+3FJexbJJcTdka2sZpCGfQwOxlLkIQ1J4RgIH81o9v7w=="], + "@stll/oxlint-config": ["@stll/oxlint-config@1.7.0", "", { "dependencies": { "@changesets/assemble-release-plan": "7.0.0", "@changesets/config": "4.0.1", "@changesets/read": "1.0.1", "@manypkg/get-packages": "3.1.0", "acorn": "8.19.0", "esbuild": "0.28.2", "picomatch": "4.0.7", "semver": "7.8.5", "smol-toml": "1.9.1", "tsx": "4.23.15", "yaml": "2.9.1" }, "peerDependencies": { "oxlint": ">=1.87.0 <2", "oxlint-tsgolint": ">=7.0.2003 <8", "vite": "8.1.5" }, "optionalPeers": ["vite"], "bin": { "stll-dependabot": "dist/dependabot-cli.mjs", "stll-quarantine": "dist/quarantine-cli.mjs", "stll-cloud-setup": "dist/cloud-setup-cli.mjs", "stll-engine-support": "dist/engine-support-cli.mjs", "stll-consumer-compat": "dist/consumer-compat-cli.mjs", "stll-toolchain-check": "dist/toolchain-check-cli.mjs", "stll-typecheck-probe": "dist/typecheck-probe-cli.mjs", "stll-publish-contract": "dist/publish-contract-cli.mjs", "stll-typecheck-parity": "dist/typecheck-parity-cli.mjs", "stll-toolchain-changed": "dist/toolchain-changed-cli.mjs", "stll-normalize-wasi-loaders": "dist/wasi-loader-normalizer-cli.mjs" } }, "sha512-Oj2br0ZBypOKf7dBCIwusKPqzyXEt/YH4gBTbpAQy/nhwh1ZThyChbcy3ZpRyxOsOI3VDcl/mbVFcF044GK1/w=="], - "@stll/oxlint-plugin": ["@stll/oxlint-plugin@0.2.2", "", { "peerDependencies": { "@oxlint/plugins": ">=1.75.0 <2", "oxlint": ">=1.75.0 <2" } }, "sha512-ZhE55byN2+Y+S/0734kckX8cC5IKb9ulCEg296ww9psTUEzhwHiBF0/WdFx9q8tclkhpbEQ17mgO0WWb91ZHYw=="], + "@stll/oxlint-plugin": ["@stll/oxlint-plugin@0.6.0", "", { "peerDependencies": { "@oxlint/plugins": ">=1.75.0 <2", "oxlint": ">=1.75.0 <2" } }, "sha512-oqP71zYBXB8WnLF/TDDGLSPdZ00Mod8ksW8kmdiFyJdwShJqsaOf9wDAy5jUF9czu+R0vPYUpvi8P6e3ncgikA=="], "@stll/skillguard": ["@stll/skillguard@workspace:packages/cli"], diff --git a/package.json b/package.json index a4a6a26..d82ee1b 100644 --- a/package.json +++ b/package.json @@ -40,8 +40,8 @@ "devDependencies": { "@changesets/changelog-github": "1.0.1", "@changesets/cli": "3.0.3", - "@stll/oxlint-config": "1.4.0", - "@stll/oxlint-plugin": "0.2.2", + "@stll/oxlint-config": "1.7.0", + "@stll/oxlint-plugin": "0.6.0", "@stll/typescript-config": "0.8.0", "@types/node": "26.6.5", "@typescript/native": "npm:typescript@7.0.2", From beceaf36b6a4691ddd257e2ab0201664852e529b Mon Sep 17 00:00:00 2001 From: jan-kubica Date: Thu, 22 Oct 2026 17:13:01 +0200 Subject: [PATCH 3/5] chore: declare the tooling change and allow temporary quarantine exclusions An empty changeset marks the change as tooling only. The quarantine test follows the shared policy: the first-party exemptions stay exact, and a third-party exclusion names the instant the normal quarantine admits it. --- .changeset/bun-fmt-tooling.md | 4 ++++ scripts/tooling-adoption.test.ts | 10 +++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 .changeset/bun-fmt-tooling.md diff --git a/.changeset/bun-fmt-tooling.md b/.changeset/bun-fmt-tooling.md new file mode 100644 index 0000000..b1095a2 --- /dev/null +++ b/.changeset/bun-fmt-tooling.md @@ -0,0 +1,4 @@ +--- +--- + +Tooling only: Bun 1.4.4, the shared bun fmt style and the shared tooling pins. No published behavior changes. diff --git a/scripts/tooling-adoption.test.ts b/scripts/tooling-adoption.test.ts index 2e613c5..62fdfb3 100644 --- a/scripts/tooling-adoption.test.ts +++ b/scripts/tooling-adoption.test.ts @@ -151,11 +151,19 @@ describe("shared tooling adoption", () => { expect(paths.map(read)).toEqual(before); const bunfig = Bun.TOML.parse(read("bunfig.toml")); expect(bunfig.install.minimumReleaseAge).toBe(432_000); - expect(bunfig.install.minimumReleaseAgeExcludes.toSorted()).toEqual([ + const excludes: string[] = bunfig.install.minimumReleaseAgeExcludes; + expect( + excludes.filter((name) => name.startsWith("@stll/")).toSorted(), + ).toEqual([ "@stll/oxlint-config", "@stll/oxlint-plugin", "@stll/typescript-config", ]); + // A third-party exclusion names the instant the normal quarantine admits it. + for (const name of excludes.filter((entry) => !entry.startsWith("@stll/"))) + expect(read("bunfig.toml")).toMatch( + new RegExp(`"${name}",\\s*# quarantine-expires: \\S+`, "u"), + ); for (const workflow of ["quarantine-policy", "quarantine-prune"]) { expect(read(`.github/workflows/${workflow}.yml`)).toContain( `uses: stella/.github/.github/workflows/${workflow}.yml@`, From faa5aa06534ae609921f0409df11d828fb7da999 Mon Sep 17 00:00:00 2001 From: jan-kubica Date: Thu, 22 Oct 2026 17:55:12 +0200 Subject: [PATCH 4/5] chore: tell knip that bun fmt is a Bun built-in --- knip.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/knip.json b/knip.json index d4ce023..b4a5df2 100644 --- a/knip.json +++ b/knip.json @@ -1,7 +1,7 @@ { "$schema": "https://unpkg.com/knip@6/schema.json", "ignore": ["fixtures/**"], - "ignoreBinaries": ["check"], + "ignoreBinaries": ["check", "fmt"], "ignoreDependencies": ["@typescript/native", "bun-types"], "workspaces": { ".": { From 113befa40a70a682ec9e309a148b7f2331c426b6 Mon Sep 17 00:00:00 2001 From: jan-kubica Date: Mon, 26 Oct 2026 09:08:50 +0100 Subject: [PATCH 5/5] chore: take @stll/oxlint-config 1.9.0 and regenerate the cloud setup --- .agents/cloud-setup.sh | 19 ++++++++++++------- .claude/settings.json | 2 +- .github/dependabot.yml | 13 +++++++++++++ .github/workflows/publish.yml | 2 +- bun.lock | 8 ++++---- package.json | 4 ++-- 6 files changed, 33 insertions(+), 15 deletions(-) diff --git a/.agents/cloud-setup.sh b/.agents/cloud-setup.sh index 0504f54..995cb2c 100755 --- a/.agents/cloud-setup.sh +++ b/.agents/cloud-setup.sh @@ -153,16 +153,18 @@ verify_bun_routes() { [[ -n "$minimal_path" ]] || minimal_path=/usr/local/bin:/usr/bin:/bin root_mise="$(printenv STLL_CLOUD_TEST_ROOT_MISE || true)" [[ -n "$root_mise" ]] || root_mise=/root/.local/share/mise - bun_route 'the setup PATH' env PATH="$PATH" sh - bun_route 'sh -c' sh + # An absolute shell: a PATH entry such as a user-writable mise shims + # directory must never supply the program that root runs. + bun_route 'the setup PATH' env PATH="$PATH" /bin/sh + bun_route 'sh -c' /bin/sh bun_route 'bash -lc' "$login_shell" -l - bun_route 'the minimal system PATH' env -i PATH="$minimal_path" sh + bun_route 'the minimal system PATH' env -i PATH="$minimal_path" /bin/sh configured_mise="$(printenv MISE_DATA_DIR || true)" for mise_root in "$configured_mise" "$OUTPUT_HOME/.local/share/mise" "$root_mise"; do [[ -n "$mise_root" ]] || continue shims="$mise_root/shims" [[ -d "$shims" ]] || continue - bun_route "mise shims PATH $shims" env PATH="$shims:$PATH" sh + bun_route "mise shims PATH $shims" env PATH="$shims:$PATH" /bin/sh done } replace_image_buns() { @@ -189,7 +191,8 @@ replace_image_buns() { [[ -d "$candidate" ]] && continue [[ "$(readlink -f -- "$candidate")" == "$(readlink -f -- "$BUN_DIR/bun")" ]] || ln -sfnT -- "$BUN_DIR/bun" "$candidate" done - done < <(printf '%s' "$PATH" | tr : '\n') + # The trailing newline lets read return the last PATH entry too. + done < <(printf '%s\n' "$PATH" | tr : '\n') } install_runtimes() ( if [[ ! -s /etc/ssl/certs/ca-certificates.crt ]]; then @@ -229,7 +232,6 @@ install_runtimes() ( ln -sfnT -- "$NODE_DIR/bin/npx" /usr/local/bin/npx ln -sfnT -- "$BUN_DIR/bun" /usr/local/bin/bun replace_image_buns - verify_bun_routes ) dependency_install() { @@ -303,7 +305,8 @@ sync_dependencies() { prepare_dependency_state expected="$(dependency_hash)" if [[ -f "$DEPENDENCY_STAMP" ]]; then IFS= read -r installed < "$DEPENDENCY_STAMP" || true; fi - [[ "$installed" == "$expected" ]] && return + # The stamp describes an installation; without node_modules there is none. + [[ "$installed" == "$expected" && -d "$REPO_ROOT/node_modules" ]] && return rm -f -- "$DEPENDENCY_STAMP" dependency_install || fail 'bun.lock mismatch; dependency installation failed' write_dependency_stamp @@ -466,6 +469,8 @@ if [[ "$MODE" == install ]]; then step services install_services step tools install_tools step shell install_shell_environment + # Login routes read the installed profile, so they are checked after it. + step routes verify_bun_routes step dependencies install_dependencies exit 0 diff --git a/.claude/settings.json b/.claude/settings.json index a0bdeff..4339aa6 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -10,7 +10,7 @@ "hooks": [ { "type": "command", - "command": "if [ \"${CLAUDE_CODE_REMOTE:-}\" = \"true\" ]; then\n cloud_setup_incomplete() {\n printf '%s\\n' 'Cloud setup could not establish a verified session environment. From the repository root, run bash .agents/cloud-setup.sh install and then bash .agents/cloud-setup.sh start. Do not assume pinned tools or services are ready until start succeeds.'\n printf '%s\\n' \"cloud-setup: $1\" >&2\n exit 0\n }\n if [ -n \"${CLAUDE_ENV_FILE:-}\" ]; then\n cloud_session_exports=\"$(bash \"$CLAUDE_PROJECT_DIR/.agents/cloud-setup.sh\" session)\" || cloud_setup_incomplete 'startup failed; run install'\n else\n bash \"$CLAUDE_PROJECT_DIR/.agents/cloud-setup.sh\" start >&2 || cloud_setup_incomplete 'startup failed; run install'\n exit 0\n fi\n if [ -n \"${CLAUDE_ENV_FILE:-}\" ]; then\n if [ ! -s /etc/profile.d/stll-cloud.sh ]; then\n cloud_setup_incomplete 'cloud shell profile is unavailable; run install'\n fi\n cloud_shell_exports=\"$(cat /etc/profile.d/stll-cloud.sh)\" || cloud_setup_incomplete 'cloud shell profile could not be read; run install'\n [ -n \"$cloud_shell_exports\" ] || cloud_setup_incomplete 'cloud shell profile is unavailable; run install'\n if [ -e \"$CLAUDE_ENV_FILE\" ] || [ -L \"$CLAUDE_ENV_FILE\" ]; then\n [ -f \"$CLAUDE_ENV_FILE\" ] && [ ! -L \"$CLAUDE_ENV_FILE\" ] || cloud_setup_incomplete 'session environment must be a regular file; check its path and rerun start'\n fi\n cloud_env_temporary=\"$(umask 077; mktemp \"${CLAUDE_ENV_FILE}.XXXXXX\")\" || cloud_setup_incomplete 'session environment could not be prepared; check its write access and rerun start'\n if [ -e \"$CLAUDE_ENV_FILE\" ] || [ -L \"$CLAUDE_ENV_FILE\" ]; then\n cat \"$CLAUDE_ENV_FILE\" > \"$cloud_env_temporary\" || { rm -f -- \"$cloud_env_temporary\"; cloud_setup_incomplete 'session environment could not be read; check its access and rerun start'; }\n fi\n if [ -n \"$cloud_session_exports\" ]; then\n cloud_session_exports=\"$cloud_session_exports\n$cloud_shell_exports\"\n else\n cloud_session_exports=\"$cloud_shell_exports\"\n fi\n printf '\\n%s\\n' \"$cloud_session_exports\" >> \"$cloud_env_temporary\" || { rm -f -- \"$cloud_env_temporary\"; cloud_setup_incomplete 'session environment could not be prepared; check its write access and rerun start'; }\n mv -f -- \"$cloud_env_temporary\" \"$CLAUDE_ENV_FILE\" || { rm -f -- \"$cloud_env_temporary\"; cloud_setup_incomplete 'session environment could not be persisted; check its write access and rerun start'; }\n fi\nfi" + "command": "if [ \"${CLAUDE_CODE_REMOTE:-}\" = \"true\" ]; then\n cloud_setup_incomplete() {\n printf '%s\\n' 'Cloud setup could not establish a verified session environment. From the repository root, run bash .agents/cloud-setup.sh install and then bash .agents/cloud-setup.sh start. Do not assume pinned tools or services are ready until start succeeds.'\n printf '%s\\n' \"cloud-setup: $1\" >&2\n exit 0\n }\n if [ -n \"${CLAUDE_ENV_FILE:-}\" ]; then\n cloud_session_exports=\"$(bash \"$CLAUDE_PROJECT_DIR/.agents/cloud-setup.sh\" session)\" || cloud_setup_incomplete 'startup failed; run install'\n else\n bash \"$CLAUDE_PROJECT_DIR/.agents/cloud-setup.sh\" start >&2 || cloud_setup_incomplete 'startup failed; run install'\n exit 0\n fi\n if [ -n \"${CLAUDE_ENV_FILE:-}\" ]; then\n if [ ! -s /etc/profile.d/stll-cloud.sh ]; then\n cloud_setup_incomplete 'cloud shell profile is unavailable; run install'\n fi\n cloud_shell_exports=\"$(cat /etc/profile.d/stll-cloud.sh)\" || cloud_setup_incomplete 'cloud shell profile could not be read; run install'\n [ -n \"$cloud_shell_exports\" ] || cloud_setup_incomplete 'cloud shell profile is unavailable; run install'\n if [ -e \"$CLAUDE_ENV_FILE\" ] || [ -L \"$CLAUDE_ENV_FILE\" ]; then\n [ -f \"$CLAUDE_ENV_FILE\" ] && [ ! -L \"$CLAUDE_ENV_FILE\" ] || cloud_setup_incomplete 'session environment must be a regular file; check its path and rerun start'\n fi\n cloud_env_snapshot=\"${CLAUDE_ENV_FILE}.stll-cloud\"\n case \"$cloud_env_snapshot\" in\n *\"'\"*) cloud_setup_incomplete 'session environment path must not contain a single quote; check its path and rerun start' ;;\n esac\n if [ -n \"$cloud_session_exports\" ]; then\n cloud_session_exports=\"$cloud_session_exports\n$cloud_shell_exports\"\n else\n cloud_session_exports=\"$cloud_shell_exports\"\n fi\n cloud_env_temporary=\"$(umask 077; mktemp \"${cloud_env_snapshot}.XXXXXX\")\" || cloud_setup_incomplete 'session environment could not be prepared; check its write access and rerun start'\n printf '%s\\n' \"$cloud_session_exports\" > \"$cloud_env_temporary\" || { rm -f -- \"$cloud_env_temporary\"; cloud_setup_incomplete 'session environment could not be prepared; check its write access and rerun start'; }\n mv -f -- \"$cloud_env_temporary\" \"$cloud_env_snapshot\" || { rm -f -- \"$cloud_env_temporary\"; cloud_setup_incomplete 'session environment could not be persisted; check its write access and rerun start'; }\n cloud_env_source=\". '$cloud_env_snapshot'\"\n if [ ! -f \"$CLAUDE_ENV_FILE\" ] || ! grep -Fqx -- \"$cloud_env_source\" \"$CLAUDE_ENV_FILE\"; then\n printf '\\n%s\\n' \"$cloud_env_source\" >> \"$CLAUDE_ENV_FILE\" || cloud_setup_incomplete 'session environment could not be persisted; check its write access and rerun start'\n fi\n fi\nfi" } ] } diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 0f1f19c..b66c316 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -45,6 +45,16 @@ updates: - version-update:semver-major - version-update:semver-minor - version-update:semver-patch + - dependency-name: npm + update-types: + - version-update:semver-major + - version-update:semver-minor + - version-update:semver-patch + - dependency-name: pnpm + update-types: + - version-update:semver-major + - version-update:semver-minor + - version-update:semver-patch - dependency-name: typescript update-types: - version-update:semver-major @@ -75,6 +85,9 @@ updates: cooldown: default-days: 5 groups: + stella-shared: + patterns: + - stella/.github/* dependencies: patterns: - "*" diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 3daa216..52d7c34 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -53,7 +53,7 @@ jobs: ) - name: Upload tarball - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 with: name: npm-tarball-${{ matrix.package }} path: release-artifacts/*.tgz diff --git a/bun.lock b/bun.lock index 055da15..7cfbe72 100644 --- a/bun.lock +++ b/bun.lock @@ -7,8 +7,8 @@ "devDependencies": { "@changesets/changelog-github": "1.0.1", "@changesets/cli": "3.0.3", - "@stll/oxlint-config": "1.7.0", - "@stll/oxlint-plugin": "0.6.0", + "@stll/oxlint-config": "1.9.0", + "@stll/oxlint-plugin": "0.6.2", "@stll/typescript-config": "0.8.0", "@types/node": "26.6.5", "@typescript/native": "npm:typescript@7.0.2", @@ -376,9 +376,9 @@ "@sonarsource/analyzer-commons-configurations": ["@sonarsource/analyzer-commons-configurations@2.31.0-5284", "", {}, "sha512-ruk3blMs9BE9RNSp9LPpWZAIjxJmq4Cp00E3cELIHz7Kym3WxdWGRlKOMYLRQ5tJg/de7jN5AtEElY3bGIfTcw=="], - "@stll/oxlint-config": ["@stll/oxlint-config@1.7.0", "", { "dependencies": { "@changesets/assemble-release-plan": "7.0.0", "@changesets/config": "4.0.1", "@changesets/read": "1.0.1", "@manypkg/get-packages": "3.1.0", "acorn": "8.19.0", "esbuild": "0.28.2", "picomatch": "4.0.7", "semver": "7.8.5", "smol-toml": "1.9.1", "tsx": "4.23.15", "yaml": "2.9.1" }, "peerDependencies": { "oxlint": ">=1.87.0 <2", "oxlint-tsgolint": ">=7.0.2003 <8", "vite": "8.1.5" }, "optionalPeers": ["vite"], "bin": { "stll-dependabot": "dist/dependabot-cli.mjs", "stll-quarantine": "dist/quarantine-cli.mjs", "stll-cloud-setup": "dist/cloud-setup-cli.mjs", "stll-engine-support": "dist/engine-support-cli.mjs", "stll-consumer-compat": "dist/consumer-compat-cli.mjs", "stll-toolchain-check": "dist/toolchain-check-cli.mjs", "stll-typecheck-probe": "dist/typecheck-probe-cli.mjs", "stll-publish-contract": "dist/publish-contract-cli.mjs", "stll-typecheck-parity": "dist/typecheck-parity-cli.mjs", "stll-toolchain-changed": "dist/toolchain-changed-cli.mjs", "stll-normalize-wasi-loaders": "dist/wasi-loader-normalizer-cli.mjs" } }, "sha512-Oj2br0ZBypOKf7dBCIwusKPqzyXEt/YH4gBTbpAQy/nhwh1ZThyChbcy3ZpRyxOsOI3VDcl/mbVFcF044GK1/w=="], + "@stll/oxlint-config": ["@stll/oxlint-config@1.9.0", "", { "dependencies": { "@changesets/assemble-release-plan": "7.0.0", "@changesets/config": "4.0.1", "@changesets/read": "1.0.1", "@manypkg/get-packages": "3.1.0", "acorn": "8.19.0", "esbuild": "0.28.2", "picomatch": "4.0.7", "semver": "7.8.5", "smol-toml": "1.9.1", "tsx": "4.23.15", "yaml": "2.9.1" }, "peerDependencies": { "oxlint": ">=1.87.0 <2", "oxlint-tsgolint": ">=7.0.2003 <8", "vite": "8.3.4" }, "optionalPeers": ["vite"], "bin": { "stll-dependabot": "dist/dependabot-cli.mjs", "stll-quarantine": "dist/quarantine-cli.mjs", "stll-cloud-setup": "dist/cloud-setup-cli.mjs", "stll-engine-support": "dist/engine-support-cli.mjs", "stll-consumer-compat": "dist/consumer-compat-cli.mjs", "stll-toolchain-check": "dist/toolchain-check-cli.mjs", "stll-typecheck-probe": "dist/typecheck-probe-cli.mjs", "stll-publish-contract": "dist/publish-contract-cli.mjs", "stll-typecheck-parity": "dist/typecheck-parity-cli.mjs", "stll-toolchain-changed": "dist/toolchain-changed-cli.mjs", "stll-normalize-wasi-loaders": "dist/wasi-loader-normalizer-cli.mjs" } }, "sha512-AOVko6q7j+3rH+QB+W4bL10MvhGiEhRm6eQ9LKKaJ1eUDkMyOOnvX/7bk6lZ86rFcsHIb4Cs40zbIqKI56C9Zw=="], - "@stll/oxlint-plugin": ["@stll/oxlint-plugin@0.6.0", "", { "peerDependencies": { "@oxlint/plugins": ">=1.75.0 <2", "oxlint": ">=1.75.0 <2" } }, "sha512-oqP71zYBXB8WnLF/TDDGLSPdZ00Mod8ksW8kmdiFyJdwShJqsaOf9wDAy5jUF9czu+R0vPYUpvi8P6e3ncgikA=="], + "@stll/oxlint-plugin": ["@stll/oxlint-plugin@0.6.2", "", { "peerDependencies": { "@oxlint/plugins": ">=1.75.0 <2", "oxlint": ">=1.75.0 <2" } }, "sha512-ZChIFmw4D998wxQYVIFYgrvm/j4xQA1T8uFVVGhjiHkm5xBlYvZaQ6vA7Q3rpKfWblAQ7rUopKd/OtsUViYqDg=="], "@stll/skillguard": ["@stll/skillguard@workspace:packages/cli"], diff --git a/package.json b/package.json index d82ee1b..4f66ca8 100644 --- a/package.json +++ b/package.json @@ -40,8 +40,8 @@ "devDependencies": { "@changesets/changelog-github": "1.0.1", "@changesets/cli": "3.0.3", - "@stll/oxlint-config": "1.7.0", - "@stll/oxlint-plugin": "0.6.0", + "@stll/oxlint-config": "1.9.0", + "@stll/oxlint-plugin": "0.6.2", "@stll/typescript-config": "0.8.0", "@types/node": "26.6.5", "@typescript/native": "npm:typescript@7.0.2",