Skip to content

Phase A: cellular modem control stack + bench runbooks (pre-v0.1.0)#2

Merged
andrescera merged 18 commits into
mainfrom
feat/upstream-pin-manifest
Jul 15, 2026
Merged

Phase A: cellular modem control stack + bench runbooks (pre-v0.1.0)#2
andrescera merged 18 commits into
mainfrom
feat/upstream-pin-manifest

Conversation

@andrescera

Copy link
Copy Markdown
Member

What

The Phase-A integration branch for modem-stack — the complete cellular modem control stack
landed as wave-ordered coherent commits (bootstrap → A2 domain/transport/ports → A3 backend
→ A4 NM/USB-mode/usage → A5 bookworm packaging → A6 bench CLI/certify/runbooks). This single
PR brings all of it onto main ahead of the first release, v0.1.0.

Final commit adds docs/BENCH.md: agent-executable, non-interactive, machine-checkable
runbooks for every hardware-gated item (system-bus probe, slot-UID stability across replug,
MM-1.24-from-artifacts install, PIN/PUK on a real SIM, a certified USB-mode transition, and a
numeric usage-meter accuracy check), plus the Phase-A iteration loop.

Why

The plan's commit strategy cuts Phase A as ONE integration branch/PR (R2), merged just before
the first 0.x release. main currently holds only the repo bootstrap; this PR lands the
engine, packaging, CLI, and bench docs together so a single v0.1.0 tag can release both the
npm package (@ceralive/modem-control) and the ModemManager-stack .deb set from the same
commit.

How to verify

  • bun install --frozen-lockfile && bun run lint && bun run typecheck
  • dbus-run-session -- bun test — full suite (355 pass at A6.2)
  • bash packaging/ci/contract.sh — packaging contract lane (bookworm containers)
  • cli/smoke/run.sh — compiled cross-arch D-Bus probe smoke (amd64 native + arm64 QEMU)
  • Read docs/BENCH.md: every hardware-gated runbook is [PARTIAL] with an exact
    non-interactive command, a greppable expected line, and a repo-local evidence path.

Risks

  • Hardware-gated paths are [PARTIAL] by design — their CI proxies are green (compiled probe
    smoke both arches, packaging contract + daemon smoke, full unit suite), but on-hardware
    evidence is captured later on real bench devices. No product consumes this repo in Phase A.
  • No source patches to the packaged upstreams (packaging metadata only); no bearer APIs; no
    autonomous switching; recovery ladder disabled by default.

A stalled auth handshake (a bus that returns after a crash but is slow to accept, or a stale socket left by a SIGKILLed daemon) left the reconnect loop's await on establish() hanging forever, so the reconnected event never fired. This surfaced as an intermittent full-suite-load failure of the transport reconnect reliability test on slower CI runners. Bound each connect attempt with a 2s timeout and close+swallow the abandoned connection so the loop always makes progress and retries with backoff.
@andrescera
andrescera merged commit 285878d into main Jul 15, 2026
2 checks passed
@andrescera
andrescera deleted the feat/upstream-pin-manifest branch July 23, 2026 06:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant