Repository navigation
release v0.1.180 - #1910
release v0.1.180#1910
Conversation
📦 Built Package ArtifactBranch: Option A — Install this exact build (recommended)npm install -g billion-context@0.0.1902-pr.1910.647d04bThis exact version is immutable and reproducible. The rolling Option B — Download artifact
tar xzf billion-context-pr1910.tgz
npm install -g packageInstall instructions are refreshed on each push. |
[bot] 🏷 收到。这是 one-click release 的 fallback PR(直推 master 被分支保护拦下),按规范进入发版本审计:核对 PR 本身 diff(应仅版本行)+ v0.1.179→v0.1.180 全窗口回归审阅 + CI 状态。先报进度,完整结论随后补一条结构化回复。 |
[bot] 🏷 ## Review 结论:release v0.1.180 — 可合(CI 全绿 + 版本区间回归审计通过) 按发版本类 PR 规则(②b),审查窗口从 PR 自身 diff 扩到 v0.1.179..head 全部 42 个 commit(51 文件,+4090/−242),所有分支/提交的变更合并为一个整体综合审阅。PR 自身 diff 仅 结构化七问:
验证证据:
顺手小修(独立标注 commit):AGENTS.md 两处窗口内事实过期——kernel pin 写 0.0.99(本分支实际 pin 0.0.100)、test count 写 385(实际 .test.ts 399)。原因是 docs-refresh commit(d45d00c)落在窗口中段,早于后续 pin bump 和测试新增。已以 判定:可合。 合并后 CI 自动发布 v0.1.180 并打 tag。合并操作保留给人类。 |
…e rmSync (ranxianglei#1646 follow-up, ranxianglei#1910) The ubuntu-22 release-gate leg of ranxianglei#1910 hit the ranxianglei#1646 ENOTEMPTY teardown race again: side-request-isolation ranxianglei#1129's finally-block rmrf exhausted the flat 10x50ms retry budget while a late debounced session flush (5ms debounce recreating <tmp>/<provider>/) kept the tree alive past every retry under full-suite load. All of the test's assertions had already passed — the gate was killed by its own cleanup. - tmp-rm.ts: escalate to a bounded exponential-backoff loop (25->1600ms, ~3.2s total, only paid on an actual race) around the same transient-error set Node's rimraf retries (ENOTEMPTY/EBUSY/EPERM/EACCES/EMFILE). Sync sleep via Atomics.wait — legal on any thread, and teardown wants the loop blocked, not interleaved. - tests/tmp-rm.test.ts: pin the contract — rmrf must outlive a writer that recreates the tree every 10ms for ~250ms, force swallows ENOENT, non-transient errors still throw. - sweep the 36 leftover bare rmSync(..., { recursive: true, force: true }) calls across 11 suites onto rmrf; codex-overlay-env's local rmrf wrapper is replaced by the shared import. Local: tmp-rm 3/3, launcher+fix-decompress-tofile 261/261, side-request- isolation green, the other swept suites green; dsh-settings-ui (5) and dsh-native fail identically on clean master locally (stale dist — CI legs green); typecheck clean. Refs ranxianglei#1646, ranxianglei#1194 (same signature on an earlier release gate).
…ei#3147) A: fork-nudge-deadzone lane proof read bili.log once via readFileSync right after the response returned, racing the logger's async append stream (src/logger.ts createWriteStream) — under a loaded Windows runner the nudge line had not flushed yet and the assertion false-red'd. Bounded poll (5s, 50ms ticks) until the session's nudge line lands; write-order keeps the negative assertion sound. Teeth unchanged (timeout fails the same way). B: golden-storage driveWire scratch moved out of os.tmpdir() into the gitignored workspace-local tmp/golden-drive/ — on Windows hosted runners %TEMP% is an AV/indexer hot path shared by all c=4 legs, and external locks there repeatedly outlasted the ~9.8s rmrf ladder (ranxianglei#2908 family). Teardown cleanup is now best-effort (warn + inert leftover, swept >6h old on next import) since every assertion precedes it. Root-cause part: the tee logger (configured unconditionally by startServer) held a file stream into the deleted tree — any later log line made getStream() reopen the orphaned path and resurrect the tree mid-rmrf (ranxianglei#1646/ranxianglei#1910 race class); closeLogger()+configureLogger("off")+store.cancelAll() now run before rmrf so no in-process writer can recreate it. C: preflight-hold asserted an absolute wall-clock bound (tHeaderMs < SLOW_MS = 1500ms) — a loaded runner stalls the event loop and eats the fixed margin while the behavior stays correct (observed 1724ms). Both stream and non-stream legs now assert the relative invariant the message always claimed: headers arrived BEFORE the mock's actual summarization completion (timestamped in-mock, same clock). A ranxianglei#568 regression (no early commit) lands headers at stream end, i.e. after summarization finished — still caught. Lower bound tEndMs >= SLOW_MS untouched. Targeted local: fork-nudge-deadzone 3/3, preflight-hold 4/4, storage-engine-proofs 12/12, golden-storage-render 5/5, tmp-rm 6/6, typecheck clean. Full-suite verdict: remote CI.
…the Windows AV-lock race at file level Two consecutive CI runs (windows-22) show the SUBTEST green (3.4s) with the FILE marked red: the after() hook's bare rmSync threw on the transient EBUSY/EPERM that tests/tmp-rm.ts exists to absorb (#1646/#1910/#2908 ladder). Same class as the plugin-fork bounded-wait fixes in the #4599 sweep.
Auto-fallback from the one-click release workflow: direct push to master was blocked by branch protection. Merging this PR publishes via the standard release.yml flow.
Changes since v0.1.179