Decisions, environment quirks and pitfalls learned while working on AgentHub (docs/claude-memory/, indexed by MEMORY.md). Notes holding personal account details are left out. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
6.3 KiB
name, description, metadata
| name | description | metadata | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| agenthub-flaky-codex-ingest-tests | Client suite needs NODE_ENV=test in this shell; rtk wrapper hides prettier/grep output; old flaky codex-ingest tests removed 09-25 |
|
This shell exports NODE_ENV=production, which breaks the whole client suite
with "act(...) is not supported in production builds" (567 failures). Run client
tests as cd client && NODE_ENV=test npx vitest run. The pre-commit hook (.husky/pre-commit) runs the client suite too, so commit as NODE_ENV=test git commit … or it aborts with ~570 act() failures.
server/__tests__/codex-ingest.test.js used to be flaky (1–4 failures per run on
a clean tree, stage-detection cases). On 2026-09-25 codex lanes lost their
pipeline and the file was rewritten to cover only the idle↔running mirror; the
suite ran 1974/1974 green afterwards.
Why: a red client run here is usually the env, not the change.
How to apply: always set NODE_ENV=test for client tests; if codex-ingest
turns flaky again, treat it as a new issue — the old cause is gone.
2026-09-28: codex-ingest.test.js "a second pass with nothing new changes nothing" failed once in a full npm run test:server (1 !== 0), passed 3/3 alone and on the full rerun — still timing-flaky under load; rerun before chasing it.
2026-09-29: the shell's rtk wrapper hides/mangles output of npx prettier --check, grep (regex with \| or ( errors) and git diff. Use node node_modules/prettier/bin/prettier.cjs --list-different, command grep -F -e … -e …, and python subprocess.run(["git","diff",…]) instead.
2026-10-01: npm install under the shell's NODE_ENV=production PRUNES dev deps (vitest, @types → tsc breaks). Install as NODE_ENV=development npm install --include=dev.
2026-10-02: a preview server started from the checkout with DASHBOARD_DATA_DIR=<tmp> REWRITES the real ~/.claude/settings.json hooks at startup (installHooks sees no <data dir>/runtime/state.json, so thinks no plugin). That time it only reordered existing checkout entries, but check settings.json.agenthub-bak after any such preview. Also never pkill -f "<pattern>" with a pattern typed in the same command line — it kills the calling shell (exit 144); kill the preview by its port's pid.
2026-10-02: SAFE preview recipe — run the checkout's server with HOME=/home (plus temp DASHBOARD_DB_PATH/DATA_DIR/SETTINGS_FILE, DASHBOARD_PORT other than 4820/4899, DASHBOARD_RUN_HEAL_MS=0, AGENTHUB_PRICING_SYNC=0, AGENTHUB_AI_TOOLS_SYNC=0) so installHooks/refreshScript write into the fake home, never ~/.claude or ~/.codex. Build first: cd client && NODE_ENV=production npx vite build. No playwright here: screenshot with google-chrome --headless=new --screenshot=... or a small CDP script (Node has WebSocket) to set localStorage / click. A leftover smoke server from an earlier session listens on :4899 (DB /tmp/ahsmoke) — not the user's. Write memory files with a QUOTED heredoc (<<'EOF'): an unquoted one executed the backticks in the text.
2026-10-02: the pre-commit hook exports GIT_INDEX_FILE (and possibly GIT_DIR) into the test suites. A test git helper that inherits them acts on AgentHub's own repo, so strip every GIT_* variable from its env.
Runaway vitest workers (2026-10-03): killing a hung vitest run parent left its node (vitest N) workers spinning (load avg 60), which made the pre-commit hook fail on unrelated 5 s timeouts and made the user's dashboard lag. After any killed/timed-out vitest, pgrep -af "node (vitest" and kill the workers too. Run the full client suite BEFORE committing — the hook aborts on a snapshot change (Settings snapshot caught me once).
2026-10-05: git commit -- <paths> (partial commit) gives the hook a temp ABSOLUTE GIT_INDEX_FILE, so the two POST /api/lanes/worktree tool tests fail with "invalid object … .agents/skills/release-guard" — stage with git add and commit plainly. The hook also tests the WORKING TREE, not the index: with another session's WIP in the tree it fails on their files. Then verify the exact snapshot in a temp worktree (git worktree add --detach /tmp/x HEAD, git apply --index the staged patch, symlink root + client node_modules, NODE_ENV=test vitest + tsc), re-check the index is unchanged (git diff --cached --binary | cmp - patch), commit --no-verify, and say so to the user.
2026-10-07: NEVER let .husky/pre-commit run inside a LINKED worktree (git worktree add). There git exports an absolute GIT_DIR to the hook; lanes-api.test.js's bare execSync("git init") then reinitialises the SHARED repo and sets core.bare = true in the main checkout's .git/config — every status/commit/pull breaks ("must be run in a work tree"). It also left stray "init" commits on the worktree HEAD. Commit in a scratch worktree only with --no-verify, or repro in a plain git clone --local (safe: GIT_INDEX_FILE is relative there).
2026-10-06: .husky/pre-commit now runs only RELATED tests for a small commit (≤ 10 code files, no package/config/hook/deleted file): vitest related for client/, server tests naming the staged module; docs-only runs nothing; AGENTHUB_FULL_TESTS=1 forces both full suites (use it for a release commit). Its frontend run sets NODE_ENV=test itself. A locale JSON change still pulls ~50 client test files (everything imports i18n).
- Something on this host listens on :3000 (seen 2026-10-07), so 3 lane-profile tests (checkProfile, "end to end: init -> check -> real boot") fail with EADDRINUSE — environmental, not a regression. AlertsNotifications.spend.test can flake under full-suite load; passes alone.
2026-10-09: a session started from a server-mode AgentHub pane inherits AGENTHUB_MODE=server (+ AGENTHUB_LANE_ID/PANE_TOKEN/RUN_ID/USERS_ROOT/FILE_KEYS). Server tests then answer 401 everywhere (lanes-api: ~200 failures, log says "Server mode: every page and API call needs a login"). Run as env -u TMUX -u AGENTHUB_MODE -u AGENTHUB_LANE_ID -u AGENTHUB_PANE_TOKEN -u AGENTHUB_RUN_ID -u AGENTHUB_USERS_ROOT -u AGENTHUB_FILE_KEYS npm run test:server. The full server suite can exceed 15 min when other sessions test in parallel — don't wrap it in timeout 900. Client full-suite under that load failed 16 tests in CcConfig/AddLaneModal/DiffEditor/AiProxyConfig; all 80 passed alone.