Second calibration pass after the cli-runner reliability whale fix (#109772) and the stripe-wall correction (#109899): the compact group hints drifted below loaded-fleet reality, so FFD packed the heaviest groups into ~300s bins (checks-node-compact-large-2 at 242-314s shard wall, up to 389s job wall) while tail bins idled. Method: parsed [shard:*] begin/end timestamps from all 147 compact job logs across seven green CI runs whose head SHAs carry the whale-fix hints (runs 29605136624, 29605203485, 29605983019, 29606701461, 29611308972, 29611457693, 29611500865; 7 samples per group). Each hint is the per-group mean after dropping cache-warm/contention outliers outside [median/1.5, median*1.5]. Packing cap: with honest loaded walls a 220s cap no longer fits either pool (adds one job to each); 235s keeps the same job count (6 large + 15 small + dist) and flattens the ceiling. Median job setup overhead measured 60s (p90 87s), so a 235s bin stays near the 5-minute PR budget. Predicted bin shard walls (sum of measured group means): before: large 220/301/200/219/257/112, small heavies 251/235/218/217/215, max 301 after: large 235/232/229/228/228/156, small heavies 236/234/234/234/233, max 236 large-pool max/mean 1.38 -> 1.08 Biggest hint deltas (old -> new): startup-core 98->156, core-tooling-4 71->125, core-unit-fast-isolated 50->90, core-tooling-3 82->108, runtime-server 14->29, storage-state 55->70, media-ui 113->124, tui-pty 103->116, runner-cli-1 18->8, unit-src-security 108->95. Exclusive bins keep their 150s cap and 5-bin count: tui-pty (116) no longer shares a bin with tooling-isolated (166s combined measured); FFD now pairs tooling-2 with tooling-isolated at 144s. STRIPE_FILE_SECONDS_HINTS left unchanged: measured stripe walls sit in exclusive bins far below the packing ceiling (tooling stripes 94-125s), and refitting per-file hints would reshuffle stripe membership and invalidate the measured group means above.
summary, read_when, title
| summary | read_when | title | |||
|---|---|---|---|---|---|
| Repository script entry points and compatibility notes |
|
Scripts Directory |
Scripts Directory
The scripts/ directory contains repository tooling used by local development,
CI, docs publishing, releases, Docker proof, and maintainer operations. Prefer
the package-script entry points in package.json when one exists, then read the
underlying script before running it directly.
Compatibility
Many scripts are stable paths referenced by package.json, GitHub Actions,
docs, and maintainer runbooks. Do not move, rename, or regroup scripts only to
improve taxonomy. A directory migration needs an explicit maintainer-approved
compatibility plan for package scripts, workflows, docs snippets, and any raw
script paths users may have copied.
This index is a discovery aid for the current flat layout. It does not define a new directory taxonomy.
Common Entry Points
| Area | Prefer | Notes |
|---|---|---|
| Build | pnpm build |
Runs scripts/build-all.mjs; use specific build scripts only when debugging a build stage. |
| Changed checks | pnpm changed:lanes --json, pnpm check:changed |
Lane classification lives in scripts/changed-lanes.mjs; changed-file checks live in scripts/check-changed.mjs. |
| Docs | pnpm docs:list, pnpm docs:check-mdx, pnpm docs:check-links |
Backed by scripts/docs-list.js, scripts/check-docs-mdx.mjs, and scripts/docs-link-audit.mjs. |
| Formatting docs | pnpm format:docs:check |
Uses scripts/format-docs.mjs; use write mode only when intentionally formatting docs. |
| Lint | pnpm lint, pnpm lint:core, pnpm lint:all |
Wrapper scripts keep oxlint behavior aligned with repo config. |
| Targeted tests | pnpm test <path-or-filter> or node scripts/run-vitest.mjs <path-or-filter> |
Avoid bare vitest; it can start watch mode. |
| Changed tests | pnpm test:changed |
Uses the repo's changed-test resolver instead of a broad Vitest run. |
| Docker proof | pnpm test:docker:all, pnpm test:docker:rerun, pnpm test:docker:timings |
Use the planner/rerun helpers before launching broad Docker work. |
| Live proof | pnpm test:live |
Live checks require the matching environment and credentials. |
| Release checks | pnpm release:check, pnpm release:beta, pnpm release:candidate |
Release scripts are maintainer workflows; read release docs before use. |
| GitHub reads | scripts/gh-read |
Uses a GitHub App read token when configured, leaving normal gh login for writes. |
| Commits | scripts/committer "<message>" <files...> |
Preferred scoped commit helper for OpenClaw changes. |
| Remote proof | node scripts/crabbox-wrapper.mjs ... |
Agent default for tests and heavy work; pre-warm by source trust, sync each run, reuse the lease. |
Script Families
check-*.mjs/check-*.ts: guardrails for architecture, docs, package contents, boundaries, workflows, and generated artifacts.run-*.mjs: wrappers around repo runtimes or tools, such as Node, Vitest, oxlint, tsgo, and environment setup.test-*.mjs/test-*.sh/test-*.ts: test planners, Docker lanes, live checks, and focused validation helpers.docs-*andcheck-docs-*: docs listing, link auditing, MDX checks, spellcheck, sync, and i18n glossary checks.release-*,openclaw-npm-*, andplugin-*-release-*: release preparation, package verification, and publishing helpers.docker-*,test-docker-*, andtest-live-*-docker.sh: Docker E2E planning, rerun, timing, and live/package lane helpers.gh-read*,label-*,sync-labels.ts, and PR helpers: GitHub read, labeling, and maintainer workflow support.generate-*,write-*,copy-*, andsync-*: generated docs, metadata, package surfaces, and build artifact support.lib/: shared helpers imported by script entry points.
Maintenance Rules
- Read
scripts/AGENTS.mdbefore changing scripts. - Keep package scripts, generators, generated-artifact checks, docs references, and workflow references aligned when touching a script path.
- Prefer existing wrappers instead of introducing a raw tool invocation.
- Add or update focused tests under
test/scripts/when changing script behavior.
See also Scripts for public-facing script guidance.