Linux 컷오버 및 브리핑 에코

작성자

카테고리:

← 피드로
DEV Community · Matthew Gladding · 2026-07-24 개발(SW)

Matthew Gladding

What we shipped on 2026-07-24

The “Simplifying Your Observability Stack” draft opened with roughly 4,000 characters of the reviser’s echoed revision briefing–complete with “Task: Revise a draft article…” and a self-audit that ended in “Done.” We had to strip the qa.rewrite briefing echo because the rescue path was skipping normalize_draft (PR #2761). The root cause was a gap in our planning-scaffold strip; the QA-rescue loop re-enters at qa.programmatic, meaning revised drafts never passed back through the normalization layer. We fixed this by moving the strip and tell regex into a shared library in atoms/_scaffold_helpers.py and adding briefing vocabulary to the tells, turning any residue into a hard veto on the post-rescue QA pass.

While wrestling with content leaks, we found our operator console was silently mocking data on fresh browser profiles (PR #2760). Because an empty localStorage defaulted cfg.live=false, new users saw convincing fake posts and spend metrics styled as live data–a direct violation of our no-dummy-data rule. We updated the logic so cfg.live defaults to LIVE when served from the worker (http(s) + /console/*), ensuring panels render honest error states rather than hallucinations until a connection is configured.

The bulk of today was dedicated to the functional audit following our Pop!_OS migration. We finally ported deploy-checkout-sync to Linux (PR #2759), restoring the pull+bounce loop that ensures merged code actually runs on the stack. We added a diff→rebuild map so that changes to brain/ or pyproject/poetry.lock trigger specific container rebuilds, while keeping compose-apply at --no-build.

The audit also exposed several “Windows-isms” that died during cutover. Our GA4/GSC singer taps were hitting PermissionError because they tried to run through a legacy /root/.poindexter mount which docker-ce enforces as 0700 (PR #2758). We resolved this by using a host-persisted bind at /home/appuser/.poindexter/singer-venv. Similarly, the MCP HTTP server was dead because fastapi and uvicorn were never declared in our pyproject, relying instead on an environment that happened to have them on Windows (PR #2758).

We also had to restore Shelly wall power metrics (PR #2757). The exporter couldn’t find the shelly_psu_url because it was looking for a bootstrap file inside the container where it didn’t exist. We implemented _resolve_shelly_url() to prioritize the SHELLY_PSU_URL environment variable, bringing “Wall Power” back to the dashboard. This coincided with re-sourcing 13 dead Windows targets in Grafana–swapping windows_memory_* for node_memory_* and moving AIDA64 panels to node_exporter hwmon label-joins (PR #2756).

The day wasn’t without a scare. We recorded a post-mortem on the containerd-root move where a v1-form config line caused containerd to silently fall back to its default root (PR #2754). We ended up deleting the old store while containerd was still serving from it, leading to 15 minutes of degradation where docker exec broke and healthchecks flipped. Recovery was clean with zero data loss, but it served as a stark reminder: always verify the effective root via containerd config dump, not just the config file.

Despite the friction, all 7 cutover gates passed (PR #2755). We saw the queue run an end-to-end task unprompted on Linux–including 70 atom_runs across 42 distinct atoms with GPU placement observed live on the 3090 and 5090. The 14-day evaluation clock started on July 23rd. We’re finally breathing, but we’ll be watching the logs closely for any more “silent” failures.

Auto-compiled by Poindexter from today’s commits and PRs. See the work: github.com/Glad-Labs/poindexter.

Sources

원문에서 계속 ↗

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다