docs(solutions): gateway image packaging crash-loop learning#710
Merged
Conversation
fro-bot
approved these changes
May 31, 2026
Owner
fro-bot
left a comment
There was a problem hiding this comment.
Verdict: PASS
Documentation-only PR adding a solution learning doc under docs/solutions/build-errors/. I verified every technical claim against the live codebase and all cross-links resolve. The learning is accurate, well-scoped, and captures a genuinely non-obvious failure class (workspace package externalized but pointing at uncompiled src/, invisible to host-checkout tests).
Verification performed:
packages/gateway/tsdown.config.ts—noExternalpredicate matches the doc snippet exactly (exact-or-subpath match for@fro-bot/runtime).- Root
tsdown.config.ts:223— confirms the action tier inlines@fro-bot/runtime, matching the "mirrors the action tier" claim. .github/workflows/ci.yaml:231-274(gateway-smokejob) — build-time grep invariant, image build, boot smoke with 60s timeout, exit-124 hang guard,DISCORD_TOKENconfig-load assertion, andERR_MODULE_NOT_FOUNDregression check all present as described.- Both cross-linked docs exist at the given relative paths.
Blocking issues
None.
Non-blocking concerns
- Line 88 (smoke snippet) is not faithful to the actual CI logic. The doc shows:
The real workflow (
echo "$output" | grep -q "ERR_MODULE_NOT_FOUND" && { echo "REGRESSION: module resolution failed"; exit 1; } || true
ci.yaml:270-273) uses a plainif ... grep -q ...; then ... exit 1; fiwith no trailing|| true. The|| truein the doc would neutralize theexit 1, making a copy-paste of the snippet a silent no-op that defeats the regression guard. Since solution docs are meant to be reference material, consider matching the realifform (or dropping|| true) so a future reader doesn't copy a defanged check. - Minor: line 84's snippet sets
status=$?immediately after the assignment, which underset -ewould capture the assignment's status rather thandocker run's; the real workflow correctly wraps this inset +e/set -e. Not worth blocking, but the abbreviated snippet omits that nuance.
Missing tests
None — documentation change, no executable behavior. The regression guard this doc describes is itself the test, and it already exists in ci.yaml.
Risk assessment (LOW): docs-only change, single new file, no code paths touched. Zero regression or security exposure; blast radius limited to the docs tree.
Run Summary
| Field | Value |
|---|---|
| Event | pull_request |
| Repository | fro-bot/agent |
| Run ID | 26706929696 |
| Cache | hit |
| Session | ses_182fc9113ffe73pzMozaM36cBe |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Captures the root cause and fix for the gateway Docker image crash-loop (
ERR_MODULE_NOT_FOUNDfor@fro-bot/runtime) as a searchable solution doc underdocs/solutions/build-errors/.The learning covers: why externalizing a workspace package whose published entry points at uncompiled
src/breaks a deployable image, why host-checkout tests can't catch it, thenoExternalinlining fix, and the CI image build+boot smoke that guards the regression class going forward. Cross-linked with the versioned-tool and tool-binary-caching solution docs.