^task and <NONEXISTENT> nodes: negative Vercel hash repro; what graph state is hashed? #13590
Replies: 3 comments
Correction and final deferred-JIT follow-upI need to correct one implication in the original report: in the non-public observation, the changed application hash was not localized to a change in the application's own effective input set. The first changed real task visible in the available logs was an intermediate dependency task. Because a parent task hash includes dependency-task hashes, the changed application hash was downstream propagation, not direct evidence that the unused application source marker entered the application's own hash. I extended the public repro to cover the two largest missing conditions:
Public implementation and evidence:
Results
Local final JIT hashes were also stable: In every within-graph comparison:
Some broad runs logged HTTP 429 responses for intermediate remote-cache artifact requests. That did not change the result under test: both target application tasks kept their baseline hashes and produced verified remote hits from the baseline commits. Remaining observability questionThe dry run shows all 85 ConclusionThe substantially larger deferred-JIT public control still does not reproduce the suspected invalidation. I am closing this discussion as inconclusive/project-specific and will not open a bug issue. The evidence is now more consistent with a missing condition in the original project or an unobserved intermediate dependency input than with broad |
Resolved: it was
|
|
Closing this as resolved — the mechanism is understood (see the comment above: The forward-looking part is better tracked elsewhere, so as not to keep a resolved thread alive:
Thanks to anyone who read through the earlier reports here. |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Summary
Can maintainers clarify the cache-hash semantics of a broad
^taskedge when it expands through packages that do not implement the task?I suspected that a source-only change outside an affected task's explicit
inputscould change its hash on Vercel whendependsOncontained^codegen:buf, and that replacing the caret with explicit real prerequisites would stabilize it. I built a public, Git-integrated, two-project Vercel reproduction, but the suspected invalidation did not reproduce.Because the claimed bug criteria failed, I am opening a Help discussion rather than a bug issue.
Environment
2.10.610.24.0v24.15.0(project setting24.x)58.1.0Task under test
{ "dependsOn": ["^codegen:buf", "//#codegen:prepare:buf"], "inputs": [ "./buf.gen.ts", "$TURBO_ROOT$/scripts/fake-generator.mjs", "$TURBO_ROOT$/fake-schema-pin.txt" ], "outputs": ["./src/gen/**"], "env": ["!VITE_*", "!NEXT_PUBLIC_*"] }The Vercel dry runs report
configured: []andinferred: []. The affected tasks'hashOfExternalDependenciesis459c029558afe716throughout.The broad app task has seven direct dependencies. Two are:
@repro/demo-app-package#codegen:buf—<NONEXISTENT>, stable hash1923ead99452d765@repro/dependency-without-task#codegen:buf—<NONEXISTENT>, stable hasha376a8dafab31b48The explicit package-local override replaces the app's broad edge with five real prerequisites. Its baseline miss is expected because the new package-local
turbo.jsonbecomes an effective input; subsequent marker-only commits hit cache.Control results
1dc42cf857ea798f/ miss08bf754d7525a57d/ miss1dc42cf857ea798f/ hit08bf754d7525a57d/ hit1dc42cf857ea798f/ hit08bf754d7525a57d/ hit19635477346426a7/ missd3e8b7e45853d9e0/ miss19635477346426a7/ hitd3e8b7e45853d9e0/ hit19635477346426a7/ hitd3e8b7e45853d9e0/ hitValidity checks
apps/app-a/src/cache-control.tsandapps/app-b/src/cache-control.ts.--dry-run=jsontask inputs.71041ea...e42for app-a and96d846e...738for app-b across all controls.Questions
<NONEXISTENT>transit/direct task nodes intentionally included in the dependency-hash chain using their effective package/task configuration?inputschanges?Reproduction and evidence
One direct CLI source-upload pilot was deliberately excluded: without a Git-backed checkout, Turbo omitted
buf.gen.tsfrom effective inputs, so it failed the validity gate.Related: #10109 and merged documentation correction #10865 clarify that
^selects the matching task in direct package dependencies, with further traversal coming from those tasks' own dependencies. This repro follows that model and records the resulting task graph.All reactions