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
@@ -1,7 +1,13 @@
import { describe, expect, it } from "bun:test"
import { readMessagesFromSDK, readPartsFromSDK } from "../storage"
import { readMessages } from "./messages-reader"
import { readParts } from "./parts-reader"
async function importFreshReaders() {
const token = `${Date.now()}-${Math.random()}`
const [{ readMessagesFromSDK, readMessages }, { readPartsFromSDK, readParts }] = await Promise.all([
import(`./messages-reader?test=${token}`),
import(`./parts-reader?test=${token}`),
])
return { readMessagesFromSDK, readPartsFromSDK, readMessages, readParts }
}
function createMockClient(handlers: {
messages?: (sessionID: string) => unknown[]
@@ -28,6 +34,7 @@ function createMockClient(handlers: {
describe("session-recovery storage SDK readers", () => {
it("readPartsFromSDK returns empty array when fetch fails", async () => {
//#given a client that throws on request
const { readPartsFromSDK } = await importFreshReaders()
const client = createMockClient({}) as Parameters<typeof readPartsFromSDK>[0]
//#when readPartsFromSDK is called
@@ -39,6 +46,7 @@ describe("session-recovery storage SDK readers", () => {
it("readPartsFromSDK returns stored parts from SDK response", async () => {
//#given a client that returns a message with parts
const { readPartsFromSDK } = await importFreshReaders()
const sessionID = "ses_test"
const messageID = "msg_test"
const storedParts = [
@@ -58,6 +66,7 @@ describe("session-recovery storage SDK readers", () => {
it("readMessagesFromSDK normalizes and sorts messages", async () => {
//#given a client that returns messages list
const { readMessagesFromSDK } = await importFreshReaders()
const sessionID = "ses_test"
const client = createMockClient({
messages: () => [
@@ -78,8 +87,9 @@ describe("session-recovery storage SDK readers", () => {
])
})
it("readParts returns empty array for nonexistent message", () => {
it("readParts returns empty array for nonexistent message", async () => {
//#given a message ID that has no stored parts
const { readParts } = await importFreshReaders()
//#when readParts is called
const parts = readParts("msg_nonexistent")
@@ -87,8 +97,9 @@ describe("session-recovery storage SDK readers", () => {
expect(parts).toEqual([])
})
it("readMessages returns empty array for nonexistent session", () => {
it("readMessages returns empty array for nonexistent session", async () => {
//#given a session ID that has no stored messages
const { readMessages } = await importFreshReaders()
//#when readMessages is called
const messages = readMessages("ses_nonexistent")