fix: smoke journeys never run because export-ignored core files are expected in the release snapshot - #367
Open
davidorban wants to merge 4 commits into
Conversation
The trusted release snapshot is built with `git archive`, which honours the `export-ignore` entries in `.gitattributes`. The release comparison built its expected-path set from `git ls-tree` filtered by `_is_runner_runtime_path`, which excludes three test directories but not the 14 export-ignored files under `core/integrations/connection-manager/`. Those paths were therefore expected in the snapshot and absent from it, so `task_lifecycle` and every `mcp_startup` probe reported UNKNOWN with "Dex-owned core differs" against any release ref, on a clean checkout. Adds a regression test asserting that every runtime path in the `core` tree survives `git archive`, which also catches future `.gitattributes` drift.
davekilleen
force-pushed
the
fix/smoke-runtime-paths-match-release-archive
branch
from
August 12, 2026 00:24
d1ed3e6 to
589a8a7
Compare
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.
What was wrong
On a clean checkout, the smoke suite cannot run any journey that depends on a verified
release snapshot.
task_lifecycleand everymcp_startupprobe report:even though
corehas not been touched. It happens against any release ref, including onepointed at the checkout's own HEAD commit, which is what rules out ref misconfiguration as
the cause.
The suite still exits successfully and prints
OKfor the journeys that do run, so a nightlyrun reports success while covering a fraction of what it appears to. On my install that was
2 of 6 journeys, plus every MCP startup probe, silently not executing. I only noticed because
I went looking for why the nightly report seemed too clean.
Why
Two filters disagree about which files belong to the runtime
coretree._materialize_release_core()builds the trusted snapshot withgit archive --format=tar <ref> -- core, which honoursexport-ignorefrom.gitattributes:_release_execution_reason()builds the set of paths it expects to find in that snapshot fromgit ls-tree, filtered by_is_runner_runtime_path(), which knows only about the threedirectories. The last two entries cover 14 files that are therefore classified as runtime,
expected in the snapshot, and never present in it.
snapshot.is_file()is false for each, sothe comparison returns
Dex-owned core differsand every dependent journey skips.Current
mainstill shows the mismatch:The change
Two files, 39 added lines.
_is_runner_runtime_path()now also excludes*.test.cjsandconnection-manager/hardening.child.cjs, bringing it in step with.gitattributes. Those twoentries cover a test suite and a helper child process spawned by those tests, so excluding
them matches the intent already expressed by the three directories.
The regression test asserts that every path the runtime filter accepts actually survives
git archive. That keeps the two lists from drifting apart again, which seemed worth havinggiven the failure mode is a silent skip rather than a visible error.
Testing
core/tests/test_smoke.py: 65 passed on this branch.mainwithout the fix, naming all 14 files, and passes with it.task_lifecyclenow passes, and the MCP startup probesexecute and report real verdicts instead of skipping. The journey count went from 4 OK / 2
UNKNOWN to 5 OK / 1 UNKNOWN / 0 BROKEN, with the remaining UNKNOWN entries being servers that
are genuinely out of scope (Node-based rather than Python stdio, or targeting a file outside
core/mcp/) rather than the skip this fixes.One alternative I considered
The exclusions could be derived at runtime from
git check-attr export-ignoreinstead of beinglisted, which would never need updating when
.gitattributeschanges. I went with the explicitlist because it costs no subprocess call per run and does not let a future
.gitattributeseditquietly widen what the trusted comparison accepts. Happy to switch if you would rather have the
derived version.