docs(research): just ci fails at mobile-test on a UTC+13 host (#322) - #424
Conversation
…local/CI parity gaps (#322) Signed-off-by: tucktuck101 <jeffreytaylorrobertson@gmail.com>
serina-mcfall
left a comment
There was a problem hiding this comment.
No blockers — two follow-up issues filed
The substantive result is verified and correct. just ci does fail at mobile-test on a UTC+13 host, and the mechanism is exactly what you say it is.
I checked the attribution rather than taking it, because "it's the timezone" is the kind of diagnosis that is right for the wrong reason surprisingly often:
mobile/lib/features/pulse/note_card.dart:318-319is exactlyString formatPulseRelativeTime(int createdAt) { final date = DateTime.fromMillisecondsSinceEpoch(createdAt * 1000);— no.toUtc(), noisUtc: true.- The fixtures and assertions match the cited lines exactly:
compose_note_page_test.dart:73=DateTime.utc(2025, 9, 30, 12)…,:86=find.text('Sep 30'),forum_widgets_test.dart:236=find.text('12/31/2025'). - The epoch arithmetic holds.
Your controlled A/B — same commit, same files, only TZ changed, 4 fail vs 0 fail — is the right experiment, and the source-level mechanism I verified predicts exactly those four failures.
Your "no fork divergence in mobile/" claim survives a stricter test than you ran. The command as written uses a bare -- mobile/ pathspec, which from inside launchpad/ would resolve to launchpad/mobile/ and return empty spuriously. Re-run root-anchored at the measured commit:
$ git diff --name-only f8692fa9b 678008ea -- mobile/ | wc -l
0
Holds. Worth tightening the pathspec in the note anyway, since a reader running it from the wrong directory gets the right answer for the wrong reason.
Everything else spot-checked is exact: Justfile:95 and :292 verbatim at those line numbers, the mobile-test recipe body at 683 matching the pasted Recipe mobile-test failed on line 683, package.json:4 "packageManager": "pnpm@11.4.0", and the ADR-0020 quotation verbatim against PR #291's diff.
Filed, not blocking
- #443 — the recipe counts. The Finding block says "three of the seven"; the §1 heading, the table and the summary all say five, and the quoted
ci:line names eight, not seven. The Finding block is the part that gets lifted into #290, so it should be the part that is right. Two smaller items are folded into that issue: the lowercasejustfilecitations, and the passing band being UTC−12 to UTC+11 rather than UTC−11. - #441 — ADR-0019 and ADR-0020 are cited as records. Both are open PRs (#281, #291) and neither is in
launchpad/decisions/. Your quotations are accurate; only the status is off. Shared with #427 and #437, which do the same thing.
Separately, #442 — your §2 quotation of the paths-filter list is accurate, and it exposed a real CI defect: the entry is lowercase justfile while the tracked file is Justfile, so dorny/paths-filter never matches it. That is a bug in ci.yml, not in your note, which is why it is filed against CI rather than against this PR.
What I could not check
The recipe exit codes and elapsed times, the hermit pnpm.hcl resolution failure, the TZ=UTC vs TZ=Pacific/Auckland runs, and the 99%-disk condition — all single-host observations on Intel macOS with a Flutter/hermit toolchain I do not have. I therefore cannot independently exclude disk pressure as a contributor to the four failures. Your A/B design is what makes that gap tolerable rather than fatal.
Reviewed at head 7250a7af8. This is a review, not an approval — approval is not mine to give.
🤖 Review drafted by Claude Code (claude-opus-5) for @serina-mcfall.
serina-mcfall
left a comment
There was a problem hiding this comment.
Approved. Independent review found no blockers; non-blocking findings are filed as follow-up issues.
Summary
Answers #322 by running the local gate at
launchpadtip and recording what happened:just cifails atmobile-test, and on Intel macOS five of its fourteen leaf recipes cannot execute at all. Neither cause is a Buzz defect — both are parity gaps betweenjust ciand CI, which matters because ADR-0020 adopts that command as "locally identical to CI".Related issue
Closes #322
Issue type
Task
Agent provenance
Objective
Add
launchpad/Research/322-just-ci-status.mdrecording whetherjust cipasses on this fork today, with a per-recipe verdict.Impacted components
launchpad/Research/322-just-ci-status.md
Approach and rejected alternatives
Ran each of the fourteen leaf recipes individually rather than invoking
just cionce. Rejected the single invocation becausejuststops at the first failing recipe, so one run yields one verdict; #322 asks for a per-recipe verdict, which needs the recipes run separately. The cost is that this is not literally the same invocation, which the document states.For the
mobile-testfailure, rejected reporting it as "4 tests fail" and stopping. The interesting question is whether a failure is fork-local, inherited, or environmental, so the diagnosis was pushed to a controlled experiment: same commit, same machine, same files, onlyTZchanged.Verification
Command run:
Raw output:
Not verified
The five pnpm-dependent recipes were never run, anywhere.
desktop-check,web-check,desktop-test,desktop-buildandweb-buildare unrunnable on this host because pnpm dropped macOS-Intel builds at v11.0.5 and the repo pinspnpm@11.4.0. Whether they pass at this commit is unestablished; I believe they do because CI's desktop and web jobs are green on recent runs, but that is belief.just ciwas never invoked as one command — fourteen leaf recipes were run individually, deliberately, for the reason given above.End-to-end
just cion linux/amd64 in UTC — the configuration where all three problems disappear — was not measured and needs a machine I did not have.Stability — each recipe ran once; nothing here says whether any is flaky.
Host was at 99% disk (4.3 GiB free) throughout, and a cargo test in a parallel lane died with "No space left on device". No failure reported here was traced to disk, but the environment was not clean, and the 66-minute full mobile run against the same suite's earlier 4:19 is unexplained.
Timezone band — UTC+13 failing and UTC passing were both observed. The UTC-13 boundary and the exact passing band were reasoned from the epoch arithmetic, not observed.
Security implications
None. Adds one markdown research document; no code, config, or workflow changes, and no change to exposure or blast radius. The document quotes no credentials and no private hostnames.
Escalations
mobile/carries no fork divergence, so this is inherited fromblock/buzzand would reproduce on upstreammain. It means any NZ-based contributor seesmobile-testfail on every branch via the pre-push hooks, for reasons unrelated to their change. Worth reporting upstream; I did not file it, since filing outside this repo was not part of the task.just ciis the contract. One command, locally identical to CI" is not accurate on Intel macOS or outside a UTC-ish timezone. Whether that record is amended, or the methodology document simply states the exception, is a human call.just test-unitsilently runs one of two different test sets depending on whethercargo-nextestis installed. Both exited 0 here; the run took thescripts/run-tests.shfallback. Whether that divergence is acceptable is not mine to decide.