mirror of
https://github.com/multica-ai/multica.git
synced 2026-06-17 03:38:32 +02:00
* fix(landing): scope landing route to always-light palette The landing page sections use hardcoded light colors (bg-white / #0a0d12), but shared components rendered inside — notably CloudWaitlistExpand on /download — use semantic tokens that flip to dark values under next-themes' `.dark` class, producing a mismatched dark card on an otherwise light page when the user's OS is in dark mode. Add a `.landing-light` class on the landing layout wrapper that re-declares all color tokens to their light values for the subtree, so nested token-driven components stay in lockstep with the hardcoded palette. * test(agent): serialize fake-executable writes to avoid ETXTBSY on CI TestKimiBackendInvokesACPSubcommand (and its Kimi/Codex siblings) write a shell script to a per-test TempDir and then fork/exec it. With t.Parallel() enabled across the package, a concurrent goroutine's fork can inherit the still-open write fd to another test's new executable; Linux then rejects the subsequent exec with ETXTBSY (seen as fork/exec /tmp/.../kimi: text file busy on GitHub Actions). Introduce writeTestExecutable, which holds syscall.ForkLock.RLock across OpenFile→Write→Close. Fork (which takes ForkLock.Lock) cannot run while we hold RLock, so no sibling fork inherits our write fd. Ran the three callers with -count=10 under -p=1 and the full package with no failures.
33 lines
1.0 KiB
Go
33 lines
1.0 KiB
Go
//go:build unix
|
|
|
|
package agent
|
|
|
|
import (
|
|
"os"
|
|
"syscall"
|
|
"testing"
|
|
)
|
|
|
|
// writeTestExecutable writes content to path with exec perms while holding
|
|
// syscall.ForkLock.RLock, so no concurrent t.Parallel() sibling can fork
|
|
// between our OpenFile and Close. Without this, Linux ETXTBSY fires when
|
|
// the sibling's fork child inherits our still-open write fd and the
|
|
// subsequent exec of the file sees "text file busy" (seen on CI as
|
|
// TestKimiBackendInvokesACPSubcommand: fork/exec ... text file busy).
|
|
func writeTestExecutable(tb testing.TB, path string, content []byte) {
|
|
tb.Helper()
|
|
syscall.ForkLock.RLock()
|
|
defer syscall.ForkLock.RUnlock()
|
|
f, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0o755)
|
|
if err != nil {
|
|
tb.Fatalf("write test executable %s: open: %v", path, err)
|
|
}
|
|
if _, err := f.Write(content); err != nil {
|
|
_ = f.Close()
|
|
tb.Fatalf("write test executable %s: write: %v", path, err)
|
|
}
|
|
if err := f.Close(); err != nil {
|
|
tb.Fatalf("write test executable %s: close: %v", path, err)
|
|
}
|
|
}
|