Repository navigation
Description
What fails
The installed-journey steps in the source-home-linux (ubuntu-24.04) job fail on some runs and pass on others. The same product code gives both results. Four failures so far:
| Run / job | Head | Step | Error |
|---|---|---|---|
| 39022710033 / 117404156258 | develop 9be009b (push) | ci-installed-journeys.sh home |
RuntimeError: finite installed UI journey failed |
| 38899842659 / 116995610376 | #394 (older head) | same | same; the 4 GiB resource-lifecycle journey: actions holds only engine_running, peak memory 694 MB of 4 GiB, no OOM events |
| 39019721681 / 117389514977 | #415 4728164 | ci-installed-journeys.sh model-repair |
stage=model_interrupted_get_retry code=timeout check=restarted_home (the Runtime restarted, 2 episodes, but one of the 60 s waits after subcheck = "restarted_home" timed out) |
| 38932131083 | #67 (older head) | installed journey | installed Runtime exited before health about 16 s after launch, peak memory 148 MB of 1 GiB, no OOM |
The #415 head's elastos/ and capsules/ trees are byte-identical to #413 at 69e2bae. That head passed the same job (run 39019718818). So these failures come from the journeys or the runner, not from the PRs where they showed up.
Why the cause is unknown
On develop, the finite observer keeps only the code finite_resource_observation_failed and drops the exception text (scripts/ci-installed-journeys.py). The private runtime log is not uploaded. A code-backed guess for the finite case: on engine_stopped, the observer raises "engine group exit is unconfirmed" the first time it sees the engine gone while a member of its process group is still alive, and it does not retry (develop ci-installed-journeys.py around 477-479). Stop kills the guard and llama-server with one SIGKILL to the group (capsules/model-provider/src/local_llama.rs:904). This guess is not proven.
Next step
Draft #413 records the observer's phase, exception type, redacted message and runtime_exited in the receipt. Once it lands, the next failure will name its check. Until then, a red run of these steps on a PR is not evidence against that PR.
Acceptance record
- Candidate: see 0.8.0: Release 0.8.0 #93. Train fixes:
ff2cb64c9,34b2d44d8,088fa8bb8. - Completed source evidence: the restore-ready correction and source review are recorded. Exact historical
f674ff63738d0e2c8724ede16bb785bef58511cbpassed its configured Linux source gate, exit 0 in 1,743 seconds withFull=False; installed, native-provider, Browser, IPFS and real network journeys remain separate. - Remaining acceptance: OMP owns combined-candidate qualification and signed installed Retry/resume proof. The hidden-Marketplace CI failure remained unreproduced in 110 local trials, so its cause stays an inference. Preserve each failed source/run/attempt and the separate startup-observer case.
- Remaining gate: exact-candidate CI qualification on alpha.25, including x86 model-repair, and the signed installed Retry/resume proof above; each failed run and attempt is recorded here with its disposition. The ~17-run estimate is a conditional statistical heuristic and its waiver a proposal; neither is an accepted gate. Earlier Keep capability admission bounded and grant retirement consistent #412/Retire superseded Browser observations and verify lifecycle recovery #420/Keep deferred Browser input with its owning page #421 runs and reviews are on those PRs.
Activity
andersalm commentedon Oct 17, 2026
Independent check: develop 9be run 39022710033 failed the finite installed UI journey. Artifact 12103805982 matches its GitHub SHA-256; its 4 GiB receipt records engine_running → engine_stopped → engine_running before failure.
Peak memory was 728,760,320 bytes with zero OOM events; final cleanup records an empty cgroup, reaped Runtime and closed Browser. The receipt omits the observer exception, so the failed check remains unresolved.
The reviewed two-file observer correction is now integrated at cd620ab (tree081a6d009a56ad2f22e98af014bd203f10c9847e; sole parent6ee5fa7f). Independent exact-object review confirms both files match patch SHA-256 c13058ad85c4b600a1770703bef3e57317ba534134e0b316d186be53f765cf3e byte for byte. Existing synthetic proof preserves the20/95s deadlines,50s idle minimum and full retained-group checks; the old CI cause and exact-candidate installed acceptance remain open.
andersalm commentedon Oct 17, 2026
OMP agrees with the source review (comment 6235138982). The cause is still a hypothesis: the retained receipt holds no observer exception, so it cannot show which check failed.
What the run proves: the receipt reached
idleafter busy, explicit Stop and stop-recovery all passed. The product's own closure waits for the guard and then checks that the group is gone (local_llama.rs:876-932).What can fail at the
idle_stoppedstage:ci-installed-journeys.py:477-479. It runs while the guard or adapter is still alive afterllama-serveris killed. Normal cleanup can reach this state (hypothesis above).Both finite failures so far (38899842659 at
engine_stopped, 39022710033 atidle) happened in a stage where the engine group is being torn down.Rule for qualifying the 0.8.0-alpha.23 candidate
6ee5fa7f2, without changing the candidate now:6ee5fa7f2passes every finite stage: qualification proceeds and Installed journeys in source-home-linux (ubuntu-24.04) fail intermittently, on develop too #433 stays open. Confirmation comes after 0.8.0 from a narrow diagnostics change that records the observer's phase, exception type and message, split from ci: installed journeys name the observer failure, and the SmolLM2 proof uses a vendored license #413 so it does not bring the held ZIP9 migration. The fix that follows is bounded observation up to the existing deadline, with every exit check kept.Owners: Codex prepares the inert diagnostics and observation patch and reviews it. OMP integrates it only under the second branch above, or after 0.8.0. The failed run's evidence is kept: artifact
source-home-journeys-ubuntu-24.04of run 39022710033, copied at/tmp/j433-art.andersalm commentedon Oct 17, 2026
Amending comment 6235170786: a green develop CI on
6ee5fa7f2lets alpha.23 preparation continue and adds current journey evidence. It does not classify the earlier failure as a harness defect, and it does not defer #433 until after 0.8.0. #433's release disposition stays open until Codex's inert diagnostics and observation proposal (original fails, patched passes; persistent-group timeout and unrelated-error checks) and the installed results on the exact candidate are reviewed. Every cleanup assertion is kept. No whole #413 merge.andersalm commentedon Oct 17, 2026
Cross-family review of the inert observer proposal: PASS. Claude reviewer; patch sha256
c13058ad…3cf3e, applied on6ee5fa7f2in a /tmp copy.Exit and cleanup checks: every one remains.
finish()andfinite_receipt_validare unchanged apart from two inserted lines.Synthetic timing cases: the reviewer ran the real
action()from both versions with a fake clock.Non-blocking: a guard that exits before its engine, where the engine then exits between 50 and 95 s, now passes. No process is alive when that stage passes.
Receipt privacy: the receipt adds only
observer_failure: a phase from a fixed set, one of 14 built-in exception type names, and one of 42 static messages. Anything else becomesredacted. No exception text, repr or traceback is formatted, and the reviewer's 13-case redaction probe kept only fixed values.Tests:
ci-release-policy-test.py: 102 tests OK before the patch, 109 OK after.Integration: after the running
6ee5fa7f2push gate finishes, the patch goes in as one commit onrelease/train-0.8.0-rc8. That head gets one gated push, a musl precheck and one qualification run.a23-qualify.shwas stopped before it moved develop or dispatched anything for6ee5fa7f2. #433 stays open until the installed results on the exact candidate are reviewed.test(journeys): finite observer waits for the engine group to exit wi…
SashaMIT commentedon Oct 17, 2026
Fifth failure: #417 at 5873d2f, run 39040338532, job 117453636062, step
ci-installed-journeys.sh model-repair. It failed withstage=model_interrupted_get_retry code=timeout check=restarted_home, the same as #415 (run 39019721681).So the model-repair
restarted_hometimeout has now happened on two unrelated PRs: #415 changes only a Clipboard test, #417 only zip and the Library extract guard. After the Runtime restart, one of the 60 s waits undersubcheck = "restarted_home"inscripts/ci-installed-home-journey.mjstimes out: Home ready, signed authority,#desktop, or the "The download stopped before it finished. Retry." text. The receipt does not record which one, so a first step would be to record the wait that timed out.Generated by Claude Code
andersalm commentedon Oct 17, 2026
Read-only corroboration of Sasha's new report: GitHub records job117453636062 failed at source5873d2f7c89c258a229a8ffe338712d173338e6d, in installed model Stop/switch/interrupted Get recovery. The reported receipt names model_interrupted_get_retry/restarted_home; this check inspected job metadata and source, rather than the receipt or private Runtime log.
The journey harness blob at5873d2f7 is byte-identical to8ea4aac; four60-second waits at scripts/ci-installed-home-journey.mjs:319-328 share restarted_home. The commit is outside8ea history. The next diagnostic should name the failed wait with a fixed phase label; its cause and behavior on8ea remain open.
The existingcd620 observer correction remains part of8ea and addresses a separate finite-UI observer case. Preserve healthy jobs and the recorded failures; exact-candidate installed model recovery and the full#93 acceptance gate still require proof.
SashaMIT commentedon Oct 17, 2026
Sixth failure: #397 at 56a8084, run 39049059654, job 117474965169. The failing step is
ci-installed-journeys.sh home("installed Marketplace Get and Assistant reply"), and the error isAssertionError: installed Runtime exited before health(ci-installed-journeys.py:868wait_healthy). That is the same class as #67's run 38932131083.In the same run,
source-home-linux (ubuntu-24.04-arm)andsource-home-macospassed the installed journeys. So far every one of these failures has been on the x86_64ubuntu-24.04runner.Generated by Claude Code
andersalm commentedon Oct 17, 2026
Independent job metadata confirms job 117474965169 failed the Marketplace Get/Assistant step at
56a8084fc82d55f266f71b64a992c9d10fa62888; the overall run concluded cancelled. ARM and Mac jobs succeeded at that SHA, with different journey flags.The reported startup assertion checks
FiniteRuntime.poll(), which reports either an observer error or a Runtime exit. The exception alone leaves that distinction open; the reviewedd495a8058has later observer changes, while its startup call remains.Keep separate, redacted observer and child-exit causes for startup readiness, with the existing deadlines and cleanup. This older PR result leaves exact-candidate installed startup and model-recovery acceptance open.
SashaMIT commentedon Oct 17, 2026
Seventh failure: #435 at a143e14 (an installer-script change only), run 39049411613, job 117479780091. The model-repair step failed with a new variant:
stage=model_stop_get_different code=assertion_failed check=stop_real_stream. It again ran on the x86_64ubuntu-24.04runner. The model-repair journey has now failed at two different stages (restarted_homeandstop_real_stream) on PRs that don't touch the model provider.Generated by Claude Code
andersalm commentedon Oct 17, 2026
Completed metadata confirms x86 job 117479780091 failed steps 31 and 32 at
a143e145a5726141f524a11787dd92f06c7fa204; the run concluded cancelled. CI tests the full inherited source, so attribution to #435’s installer delta remains open.stop_real_streamcovers starting a live model run, text and engine checks, Stop/cancellation, terminalcancelled, whole-engine exit and Runtime continuity, including helper assertions. The reportedassertion_failedidentifies this phase; the exact assertion and cause remain unverified.The browser harness and shell wrapper match reviewed
d495a8058; its Python observer code differs. Preserve the existing evidence and deadlines. The release candidate still needs its own successful installed model-recovery receipt.SashaMIT commentedon Oct 17, 2026
One more: #67 baaf15c, run 39051786892, job 117508216882,
model_interrupted_get_retry/restarted_hometimeout. That is the third hit, after #415 and #417. In the artifact,home-failure.pngshows Home ready with the desktop visible after the runtime restart and Marketplace opening. So the wait that times out is inapp("marketplace"),showModelDetail, or the "download stopped… Retry." text (ci-installed-home-journey.mjs~:326-328), not Home itself.Generated by Claude Code
SashaMIT commentedon Oct 17, 2026
One more: #395 12fc78b, run 39049051156, job 117514231178, "finite installed UI journey failed". This is the same pattern as develop 9be009b and #394's old run 38899842659.
finite_memory.actions = [engine_running]only,status=failed, with no OOM events (peak 725 MB of 4 GiB), andcgroup_empty,runtime_reapedandwhole_process_exitall true. So the observer stopped afterengine_runningwithout recordingengine_stopped, and its error text is not kept. #413's cause recording would show why.Generated by Claude Code
Merge origin/develop into fix/ci-journey-failure-causes
SashaMIT commentedon Oct 18, 2026
4th
restarted_homehit: #413 04b621d, run 39088847791, job 117562372696. This branch records observer failures, and it narrows the cause:model_repair.runtime_episodesshows two clean runtime runs (same exe sha256). The actions areengine_running,engine_stopped,restart_get. Cleanup passed, and there is nocontrol_failure, so the observer and Runtime side were healthy.home-failure.pngis identical to Wallpaper from Library: CORP + shell-token wallpaper path, image thumbnails, Set as Desktop Background #67's: Home isready, and the dock shows Marketplace running (the dot under its icon), but no Marketplace window is on screen.So the 60 s wait that runs out is in the browser-side Marketplace step after the restart (
ci-installed-home-journey.mjs~:326-328:app("marketplace")/showModelDetail/ the "download stopped… Retry." text). The window is launched but never shown or focused. It looks like a Home window-restore issue after a runtime restart, not the model path.Generated by Claude Code
7 remaining items
andersalm commentedon Oct 19, 2026
Completed train run 39254991789, attempt 1 binds ci.yml workflow_dispatch on release/train-0.8.0-rc9 to source 3beb816, tree 5bc1173ec18ec947c40516f76917891f55301145. Metadata shows 15 successful jobs, one failure and one skipped job.
The Ubuntu 24.04 installed Stop, switch and interrupted Get step failed from 14:04:13 to 14:10:13 UTC. OMP read stage=model_interrupted_get_retry, code=timeout, check=restarted_home; my independent check covers the completed run and step metadata. The cause remains open.
Keep this occurrence with the successful develop push and earlier failed attempts. OMP owns the exact wait, Runtime state and safe diagnostics before the final candidate disposition.
andersalm commentedon Oct 20, 2026
Diagnosis (OMP, 20 Oct): a Home window-restore race, not a model or interrupted-Get bug.
home-gui-shell.js:137-150), so a second summary marks the desktop ready early.shell-windows.js:1718-1728).restarted_home(about 16%). The step runs only on ubuntu-24.04, so "x86 only" is a selection effect.fix/433-restore-ready; Codex review next):restarted_homesplit into one label per wait.andersalm commentedon Oct 20, 2026
Home waits for its saved windows to reopen, while a failed window still permits Home use. Review
fix433apassed source2b8dbbfcc3ed5a6c48a21f96e6adeff1feb44d21(treee1555eac8529c9aa5266a0b2a57e0dd65f80c52a, approved basea615769b59efa909efbee081ee2bb897d4a62df7); its receipt SHA-256 isa6287d3cd190fb15b4dd60f2b218594f93a8f607b0705db5208e6fd36bf3948d.OMP integrated the three normal commits into local train
088fa8bb869bc5738153428e8892f0895c6edf0f(tree5a5dd44433f80ad9e674b0c460ccba2ac4e096eb). Independent comparison found all three full patches and messages byte-identical. The source candidate's completed gate passed exit 0 in 1,897 seconds, with 4,549 Rust passes and 26 ignored; log SHA-256:ee202c373c84a51cead28f106a66d9abee9c5fadf815e4d796b8fc95d9957ca7.The combined train still needs its own checks and signed installed Retry/resume proof. The hidden Marketplace CI failure stayed unreproduced in 110 local trials, so that cause remains an inference; the existing acceptance requirements remain in force.
andersalm commentedon Oct 21, 2026
Status (20 Oct): source fixed and reviewed:
ff2cb64c9,34b2d44d8and088fa8bb8are on the alpha.25 train (release/train-0.8.0-rc10, current headf674ff637); Codex review fix433a PASS. Remaining: the CI x86 model-repair runs and the installed check on signed alpha.25. Stays open until then.andersalm commentedon Oct 29, 2026
New failure signature in the same job, 29 Oct. Develop push CI 40889720032 on
57627f88cfailedsource-home-linux (ubuntu-24.04)at "installed Marketplace Get and Assistant reply" withfinite installed UI journey failed (census: RuntimeError: finite journey live child left its unit census)(scripts/ci-installed-journeys.pylines 589-590). The train CI run 40889512306 on the same SHA passed this job, so the product code gives both results.Likely cause (inference, not reproduced): the observer lists the unit's processes from
cgroup.procs, and Linux drops a process from that list when its last thread starts to exit. Its pidfd becomes readable only later, at exit notification. A child that exits between the two reads then looks like a live process outside the unit. A bounded wait on the pidfd before the check would close this window. The log keeps only the message, without the PID or role.For 0.8.0-alpha.26,
alpha-qualify.shreruns a failedsource-home-linuxjob once, which covers this case. The harness change waits until after the release.andersalm commentedon Oct 29, 2026
Diagnosis of the census failures in
source-home-linux (ubuntu-24.04): the evidence supports the CI harness, not the product, as the cause. CI 40915572998 on8a74b669c("live child identity is unavailable") and push CI 40889720032 on57627f88c("live child left its unit census") both recordobserver_failurewithruntime_exited: falsein installed-journeys.json; memory peaks 146 MB and 635 MB of 4 GiB, no OOM. The finite-journey observer in scripts/ci-installed-journeys.py checks a child's pidfd once; a multi-threaded child that is exiting (most likely the short-livedkubo init) has already lost/proc/PID/exeand leftcgroup.procsbefore its pidfd becomes readable, so the census raises andwait_healthy(line 1065) reports it as "installed Runtime exited". The same message appears in runs 39102682843 (18 Oct) and 39240606353 (19 Oct), before the Kubo-offline and seed-holder changes; the observer runs only on ubuntu-24.04 (ci.yml:920-921, 934-935). The same commit passed on push (40916013126). Limit: the log does not record the exiting child, so the child named above is inferred and an abnormal capsule exit is not fully excluded; nothing in either receipt points to one. Both failed runs stay on record as evidence. Fix (CI script only, 0.8.1): a bounded pidfd wait (2 s) at the census checks, a correct failure label whenruntime_exitedis false, and two cases in ci-release-policy-test.py.andersalm commentedon Nov 4, 2026
Seen again on 3 Nov (develop) and 4 Nov (PR #526, run 41754568343, source-home-linux ubuntu-24.04: "finite journey live child left its unit census"); the arm64 job passed on the same commit. Each occurrence costs a 30 to 60 minute rerun and cancels the Mac and update-hop jobs. Moved to 2.1.0 with the pipeline work in #527.
Merge pull request #533 from elastos/fix/433-census-flake
andersalm commentedon Nov 5, 2026
#533 merged (27ea103): the census now records the missing child's pid, start tick, state, role, executable hash, pidfd state and current cgroup (systemd unit names kept), plus its parent and a re-read of the expected unit, in the uploaded receipt. Same family seen again on PR #531 (5 Nov 02:32Z, stage_idle_stopped: "finite journey live child identity is unavailable") before #533 was on that branch. The next occurrence on a branch with develop merged gives the evidence.
andersalm commentedon Nov 6, 2026
The census diagnostics from #533 caught the next occurrence and name the cause.
PR #547, CI run 42188746234, source-home-linux (ubuntu-24.04), "installed Marketplace Get and Assistant reply":
finite journey live child left its unit census.installed-journeys.jsonfinite_memory.census_gap:llama-server, ppid 60005, stateS, cgroup/system.slice/elastos-ci-model-59715-bdefb9fa3e3baeec.service, start_ticks 152912;Z, empty cmdline;expected_cgroup_procs(31 pids) no longer lists 60006; parent 60005 still alive and in the unit (pidfd_exited: false).So the process did not leave the unit: llama-server had exited and was a zombie waiting for its parent to reap it. Linux removes an exited task from
cgroup.procsbefore the parent reaps it, while/proc/<pid>still shows it asZ. The census counts that zombie as a live child outside the unit.Fix: the census treats state
Zas exited (not escaped), and keeps the existing whole-unit exit check that proves it is reaped when the unit ends. Briefed on a separate branch.Merge pull request #549 from elastos/fix/433-census-zombie