Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,10 @@ jobs:
steps:
- uses: actions/checkout@v5

- name: Sample desktop runner memory
# Reuse the paired-test sampler; retain resource evidence even when E2E fails.
run: nohup apps/ios/ModexCompanion/Scripts/sample-memory.sh "$RUNNER_TEMP/modex-desktop-memory.log" > /dev/null 2>&1 &

- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v5
with:
Expand Down Expand Up @@ -139,6 +143,19 @@ jobs:
- name: Landing page release and responsive tests
run: pnpm --filter @modex/site test:e2e

- name: Desktop runner memory low point
if: always()
run: apps/ios/ModexCompanion/Scripts/sample-memory.sh --summary "$RUNNER_TEMP/modex-desktop-memory.log"

- name: Upload desktop runner memory
if: always()
uses: actions/upload-artifact@v5
with:
name: desktop-runner-memory
path: ${{ runner.temp }}/modex-desktop-memory.log
if-no-files-found: error
retention-days: 7

- name: Upload e2e artifacts
if: always()
uses: actions/upload-artifact@v5
Expand Down
9 changes: 9 additions & 0 deletions docs/reviews/2026-10-30-desktop-ci-memory.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Desktop CI resource evidence

The #456 merge-queue run 41056164788 failed the approved 500 ms cold transcript gate with a 781.9 ms median across five fresh launches. Its trace records long renderer tasks but no contemporaneous runner memory or swap samples. Local CPU profiling did not reproduce the hosted slowdown, and reusing Markdown parser configuration produced no observed end-to-end improvement. Neither result clears the failed gate.

This change starts the existing iPhone CI memory sampler in the desktop job after checkout, prints its low-memory summary, and retains the timestamped log in a separate desktop-runner-memory artifact even when tests fail. It records free memory, swap usage, and the eight largest processes by resident memory using process names without command arguments. Sampling runs every ten seconds and has observer overhead; a correlation would be evidence for investigation, not proof of causation.

The change leaves the five fresh-launch measurements, 500 ms threshold, test assertions, retry behavior, and job timeout unchanged. It does not retry #456 or claim to repair performance. Hosted collection must be verified on this revision before relying on the new artifact.

Local `pnpm build && pnpm test` passed: 2,271 tests passed, 26 skipped, zero failures. The existing sampler produced a timestamped memory/swap/process sample and a nonempty summary in a local smoke check. Actionlint passed after excluding its pre-existing unsupported `code-quality` permission; the initial lint result is retained. Independent static review found no actionable findings. Hosted collection and protected validation remain pending.
2 changes: 2 additions & 0 deletions docs/status.md
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,8 @@ The published application source is `2eda138` (v0.4.0). Later source deliveries

## In flight

Desktop CI memory diagnostics are in preparation after #456’s cold transcript budget failure. The proposed change reuses the existing resource sampler and retains its log as a separate CI artifact; it does not resolve the failure or change the 500 ms gate. See [the diagnostic review](reviews/2026-10-30-desktop-ci-memory.md).

- **LM-5 auxiliary dispatch regressions.** Candidate tests exercise deterministic local approvals, human approval fallback and four local failure outcomes with a recording Jev transport and cloud positive control. Thirteen focused cases passed; removing the local approval guard made both local approval cases fail on unexpected dispatch. Build and full unit validation passed (2,251 passes, 26 skips); independent review found no actionable findings. Protected delivery remains pending; native offline acceptance and the remaining #380 criteria stay open. [Evidence](reviews/2026-10-30-lm5-auxiliary-dispatch.md).

- **Canvas Escape harness readiness.** Repeated hosted failures showed the main pane still hidden after guest Escape. A controlled delayed-IPC diagnostic proved that renderer full-view state can precede native readiness. The test-only candidate waits for the native guest to become visible at the expanded preview bounds before sending one Escape, retaining all security and lifecycle assertions. Five candidate repetitions and full local validation passed; the implementation also passed hosted macOS validation. The Windows first failure, passing retry and original CodeQL upload failure remain recorded. Protected delivery remains pending. [Evidence](reviews/2026-10-30-canvas-native-readiness.md).
Expand Down
Loading