Skip to content

docs(research): just ci fails at mobile-test on a UTC+13 host (#322) - #424

Merged
serina-mcfall merged 1 commit into
launchpadfrom
research/322-just-ci-status
Aug 22, 2026
Merged

docs(research): just ci fails at mobile-test on a UTC+13 host (#322)#424
serina-mcfall merged 1 commit into
launchpadfrom
research/322-just-ci-status

Conversation

@tucktuck101

Copy link
Copy Markdown
Collaborator

Summary

Answers #322 by running the local gate at launchpad tip and recording what happened: just ci fails at mobile-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 between just ci and CI, which matters because ADR-0020 adopts that command as "locally identical to CI".

Related issue

Closes #322

Issue type

Task


Agent provenance

Field Value
Harness / provider Claude Code
Model claude-opus-5[1m]
Session reference N/A - the harness exposes no shareable run id
Initiating human @tucktuck101

Objective

Add launchpad/Research/322-just-ci-status.md recording whether just ci passes 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 ci once. Rejected the single invocation because just stops 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-test failure, 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, only TZ changed.

Verification

Command run:

# each of the 14 leaf recipes, individually, with hermit sourced
just fmt-check ; just clippy ; just desktop-tauri-fmt-check ; just desktop-tauri-clippy
just test-unit ; just desktop-tauri-check ; just desktop-tauri-test ; just mobile-check ; just mobile-test
# then, isolating the mobile failure:
cd mobile && TZ=Pacific/Auckland flutter test test/features/pulse/compose_note_page_test.dart \
  test/features/pulse/note_card_test.dart test/features/forum/forum_widgets_test.dart
cd mobile && TZ=UTC flutter test test/features/pulse/compose_note_page_test.dart \
  test/features/pulse/note_card_test.dart test/features/forum/forum_widgets_test.dart
cd mobile && TZ=UTC flutter test
bin/pnpm --version
git diff --numstat f8692fa9b52ddcfeb4b95fb4862109983509f131 launchpad/launchpad -- mobile/

Raw output:

RECIPE fmt-check EXIT 0 ELAPSED 5s
RECIPE clippy EXIT 0 ELAPSED 593s
RECIPE desktop-tauri-fmt-check EXIT 0 ELAPSED 8s
RECIPE desktop-tauri-clippy EXIT 0 ELAPSED 340s
RECIPE test-unit EXIT 0 ELAPSED 538s
RECIPE desktop-tauri-check EXIT 0 ELAPSED 99s
RECIPE desktop-tauri-test EXIT 0 ELAPSED 666s
RECIPE mobile-check EXIT 0 ELAPSED 77s
RECIPE mobile-test EXIT 1 ELAPSED 291s

00:19 +1461 -4: Some tests failed.
error: Recipe `mobile-test` failed on line 683 with exit code 1

$ TZ=Pacific/Auckland flutter test <the 3 affected files>
00:12 +32 -4: Some tests failed.

$ TZ=UTC flutter test <the 3 affected files>
00:10 +36: All tests passed!

$ TZ=UTC flutter test          # full suite
66:47 +1445: All tests passed!

$ bin/pnpm --version
fatal:hermit: https://github.com/cashapp/hermit-packages.git/pnpm.hcl: pnpm-11.4.0: no source provided

$ git diff --numstat <merge-base> launchpad/launchpad -- mobile/
(no output)
  • Tests or checks were run and the raw output is pasted above
  • The diff is confined to the scope of the linked issue
  • No secrets, keys, tokens or hostnames were added to tracked files

Not verified

The five pnpm-dependent recipes were never run, anywhere. desktop-check, web-check, desktop-test, desktop-build and web-build are unrunnable on this host because pnpm dropped macOS-Intel builds at v11.0.5 and the repo pins pnpm@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 ci was never invoked as one command — fourteen leaf recipes were run individually, deliberately, for the reason given above.

End-to-end just ci on 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

  1. Four upstream mobile tests are timezone-dependent and this cohort is in a timezone that breaks them. mobile/ carries no fork divergence, so this is inherited from block/buzz and would reproduce on upstream main. It means any NZ-based contributor sees mobile-test fail 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.
  2. ADR-0020 ruling 7's wording is now contradicted by measurement. "just ci is 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.
  3. just test-unit silently runs one of two different test sets depending on whether cargo-nextest is installed. Both exited 0 here; the run took the scripts/run-tests.sh fallback. Whether that divergence is acceptable is not mine to decide.

…local/CI parity gaps (#322)

Signed-off-by: tucktuck101 <jeffreytaylorrobertson@gmail.com>

@serina-mcfall serina-mcfall left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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-319 is exactly String formatPulseRelativeTime(int createdAt) { final date = DateTime.fromMillisecondsSinceEpoch(createdAt * 1000);no .toUtc(), no isUtc: 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 lowercase justfile citations, 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 serina-mcfall left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved. Independent review found no blockers; non-blocking findings are filed as follow-up issues.

@serina-mcfall
serina-mcfall merged commit ccd4fac into launchpad Aug 22, 2026
24 checks passed
@serina-mcfall
serina-mcfall deleted the research/322-just-ci-status branch August 22, 2026 02:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

by:agent Filed or authored by an AI agent, not a human

Projects

None yet

Development

Successfully merging this pull request may close these issues.

task: find out whether just ci passes on this fork today

2 participants