fix: resolve 25 pre-publish blockers

- postinstall.mjs: fix alias package detection
- migrate-legacy-plugin-entry: dedupe + regression tests
- task_system: default consistency across runtime paths
- task() contract: consistent tool behavior
- runtime model selection, tool cap, stale-task cancellation
- recovery sanitization, context-limit gating
- Ralph semantic DONE hardening, Atlas fallback persistence
- native-skill description/content, skill path traversal guard
- publish workflow: platform awaited via reusable workflow job
- release: version edits reapplied before commit/tag
- JSONC plugin migration: top-level plugin key safety
- cold-cache: user fallback models skip disconnected providers
- docs/version/release framing updates

Verified: bun test (4599 pass), tsc --noEmit clean, bun run build clean
This commit is contained in:
YeonGyu-Kim
2026-03-28 15:24:18 +09:00
parent 44b039bef6
commit d2c576c510
62 changed files with 1264 additions and 292 deletions
+39
View File
@@ -1,6 +1,7 @@
const { describe, expect, test } = require("bun:test")
const { createToolExecuteBeforeHandler } = require("./tool-execute-before")
const { createToolRegistry } = require("./tool-registry")
const { builtinTools } = require("../tools")
describe("createToolExecuteBeforeHandler", () => {
test("does not execute subagent question blocker hook for question tool", async () => {
@@ -268,6 +269,44 @@ describe("createToolRegistry", () => {
})
})
})
describe("#given max_tools is lower than or equal to builtin tool count", () => {
describe("#when creating the tool registry", () => {
test("#then it trims to the exact configured cap", () => {
const result = createToolRegistry(
createRegistryInput({
experimental: { max_tools: Object.keys(builtinTools).length },
}),
)
expect(Object.keys(result.filteredTools)).toHaveLength(Object.keys(builtinTools).length)
})
})
})
describe("#given max_tools is set below the full plugin tool count", () => {
describe("#when creating the tool registry", () => {
test("#then it enforces the exact cap deterministically", () => {
const result = createToolRegistry(
createRegistryInput({
experimental: { max_tools: 10 },
}),
)
expect(Object.keys(result.filteredTools)).toHaveLength(10)
})
test("#then it keeps the task tool when lower-priority tools can satisfy the cap", () => {
const result = createToolRegistry(
createRegistryInput({
experimental: { max_tools: 10 },
}),
)
expect(result.filteredTools.task).toBeDefined()
})
})
})
})
export {}