WEB board

всеканоны и докиворкеры↗ iOS↗ Легаси
WEB-032 · Задача · — · web

[INFRA] Oracle A1 — дев-сервер миграции: доступ, защита, правила

Закрыт P2 ведёт: backup-opus
Суть
## 21.08 — A1 Codex: два независимых блокера, точный запуск и дрейф паспорта

Проверено на живом `a1-payg-01`:

- Прямой `codex` не должен использоваться: `chatgpt.com/backend-api/codex/*` с A1 напрямую даёт transport `000`, из-за чего CLI останавливается на `timed out waiting for cloud config bundle after 15s`.
- Канонический launcher: `~/codex-a1.sh`; он выставляет `HTTP_PROXY`/`HTTPS_PROXY=http://127.0.0.1:3129`.
- Локальный `127.0.0.1:3129` слушает sshd; через него запрос до ChatGPT доходит до HTTP 401. На M1 жив `tinyproxy 127.0.0.1:3128`; `tmux a1relay` существует, но его pane хранит старые connection-refused строки — liveness доказывается фактическим A1 proxy-запросом.
- `~/codex-a1.sh doctor --summary`: 16 ok, 0 fail, provider endpoints reachable; WebSocket warn, HTTPS fallback доступен.
- После починки сетевого пути остаётся отдельный auth-blocker: `refresh_token_reused` / `token_expired`. `codex login status` ошибочно выглядит как “Logged in using ChatGPT”, но реальный exec rc=1.
- Восстановление выполняет владелец интерактивно на A1: `~/codex-a1.sh logout`, затем `~/codex-a1.sh login --device-auth` (или обычный login через браузерный callback), затем `~/codex-a1.sh doctor --summary` и короткий exec-smoke. Координатор logout/login не выполнял.

Дрейф документации:

- Живой `/passport/CANON.json` уже содержит правильный `codexNote` про proxy launcher.
- `/passport/ZERO-AGENT-ONBOARDING-PROMPT.md` устарел: предлагает прямой `~/.local/bin/codex`, не упоминает A1 proxy; реальный бинарник A1 — `/usr/bin/codex`.
- `/passport/03-TOPOLOGY-INFRA.md` — июльская топология без A1.

Источник контура: M1 `board/BACKUP-OPUS-HANDOFF.md:43-50`, `board/CONTOUR-RUNBOOK.md:151-159`, генератор `board/stamp-canon.sh:54`. Публичные документы требуют регенерации из канона; livepush git не мутирован вручную.

## 21.08 — A1 Codex восстановлен владельцем и проверен живым запросом
Владелец выполнил повторную device-auth через `~/codex-a1.sh`. Координатор после этого проверил без вывода токенов:
- `~/codex-a1.sh login status` → Logged in using ChatGPT, rc=0;
- `~/codex-a1.sh doctor --summary` → **17 ok / 0 warn / 0 fail**, WebSocket HTTP 101, provider endpoints reachable;
- реальный `codex exec` на gpt-5.5 low → **A1_CODEX_OK**.
Сетевой и auth-блокеры закрыты. Канонический запуск на A1 остаётся только через `~/codex-a1.sh`; прямой `codex` не использовать.

## 21.08 — публичный Passport исправлен и проверен снаружи
Канонический docs-коммит на A1: `15803869` (2 файла, +62/-16). Patch: `/home/ubuntu/waves/PASSPORT-A1-CODEX-20260821.patch`, SHA256 `c2ff87d4723f1183eae15219a7f94d00ea801b37e0004391a8926a1c0ff98e4d`; копия у owner: `~/Downloads/PASSPORT-A1-CODEX-UPDATE/`.

Публично обновлены и curl-проверены:
- `/passport/ZERO-AGENT-ONBOARDING-PROMPT.md`: A1 только `~/codex-a1.sh`, recovery через device-auth, правильный web-ticket API;
- `/passport/03-TOPOLOGY-INFRA.md`: A1/M4, живой relay A1:3129 → M1:3128, проверка doctor+exec вместо PID;
- `/passport/CANON.json` и generator `board/stamp-canon.sh`: старый 3128 launcher исправлен на канонический A1 endpoint 3129, чтобы следующая посадка не вернула ошибку.

M1 livepush имел 43 чужих изменения: checkout/stash/clean/cherry-pick не выполнялись; синхронизированы только три Passport-файла, а восстановимый docs-коммит хранится в отдельной A1-ветке `passport-a1-codex-20260821`.

## 22.08 00:23 UTC — A1 recovered and outage evidence preserved
OCI soft reset completed; A1 booted at 00:00 UTC. ssh.socket enabled active/running and ssh.service socket-activated active/running, NRestarts=0. Disk 193G total, 173G used, 21G free (90%); inodes 17%. Previous boot journal shows clean shutdown boundary at 23:59:57–00:00, not OOM/ext4/no-space at the reboot boundary. Exact pre-reboot cause of the earlier TCP/22 refusal remains unproven; do not relabel it full disk. Temporary OCI serial-console connection and temporary console key were deleted after recovery. Codex launcher is working again; live worker web308-gate-deadlock proves box occupancy.

## 22.08 — A1 storage inventory after recovery
Read-only du: /home=169.1GB of 185.3GB accounted. Two roots dominate: /home/ubuntu/waves=62.1GB and /home/ubuntu/r13pack=54.6GB; then landing10-tree=9.7GB, b2prod=8.2GB, .local=8.0GB, pdfw3=6.4GB. r13pack is dated 17.08 and consists largely of final-20b799d=17.9GB, clean-build-main=8.9GB, clean-build-repeat=8.2GB, repro-clean-run1=6.1GB, repro-clean=5.3GB plus pnpm stores. waves largest: wt-l30b=7.2GB, wt-acctfix=6.9GB ACTIVE, wt-landing30=6.2GB, videofix6-tree=4.0GB, voicefix-tree=3.8GB, r21-quarantine=3.2GB, r16-out=2.9GB, scratch=2.8GB, r20-work=2.8GB. No deletion performed. Recommendation: first archive r13pack and inactive build/worktree roots to M4Ext with manifest+SHA and verify, then delete only explicit proven-independent paths after alternates/worktree checks; never wildcard ~/.codex/.claude/.local/bin.

## 2026-08-23 PDFPOSTQA: N-A — A1 infrastructure issue, not PDF browser scenario.

PDFPOSTQA: бесплатные сценарии только; новые paid generation/export/import не запускались. Полный реестр и evidence: /Users/milamarty/work/PDFPOSTQA-REPORT.md; screenshots: /Users/milamarty/work/PDFPOSTQA-SHOTS/.

## 2026-08-23 BOARDSWEEP: IN_PROGRESS-LIVE
- Evidence: updatedAt=2026-08-22T00:25:11.804Z, within 24h at cutoff; A1 migration/access body has current recovery evidence. No status change.
- buildFixed: <empty>; canonical: v4-081ff4fb5 / 081ff4fb5f6110f8001daec7ed910ccef2e395dc.
- Status preserved by sweep: in_progress.
Доказательства
ТРЕЙЛ доп (ступень 2 Gate0). 13.08 ~05:00-05:15 накат gate0-step2 на A1: bootstrap PASS (Node22/pg16/pgvector), железный забор PASS (прокси+ufw uid-match, секрет pg.env только ncproof=SECRET-SAFE), pg-provision PASS, клон PASS, pnpm install PASS (native собрались с локальными node-заголовками). ЗАБОР+Oracle-IP 403-ят CDN — бинари стейджены локально с Интела: /opt/node-headers, /opt/prisma-engines (arm64), env внедрён в migration-chain-run.sh (.bak). НАХОДКА P0: цепочка не деплоилась с нуля (20260705160000 ALTER TokenUsage до создания в 20260720000000). ФИКС ce868184 (миграция 20260705155900_prebaseline_token_usage, audit 0 forward-refs, финальная схема не изменена). ПОВТОРНЫЙ ПРОГОН: «Database schema is up to date!» 167 таблиц начисто + DB-контрпримеры W3.11 на реальной базе: 5×SQLSTATE 23514 rejection (терминальная неизменяемость+lease-монотонность) + lease 7→8 accepted. EVIDENCE: ~/Downloads/GATE0-STEP2-EVIDENCE-A1-20260813.zip (sha 736601610eaf...). СТУПЕНЬ 2 суть-доказана; остаток: .ts contract-proof нужен prisma generate (мелочь), artifact-build по запросу. Далее ступень 3.

[2026-08-27 связь] A1 как дев-сервер миграции: за день дважды ловил перегрузку (4 одновременных полных repo-tsc -> 19/23 ГБ, swap, load 93, SSH не отвечал). Лечение и профилактика записаны: убивать дублирующие tsc, PAUSE диспетчеру, в брифы волн — «tsc только затронутых файлов», не более 2 тяжёлых волн одновременно. Диск: 23 -> 83 GiB свободно за день.

[BOARDTRIAGE] Последнее движение около 27.08 19:03Z: A1 перегружался от четырёх полных repo-tsc; правило — только scoped tsc и не более двух тяжёлых волн. Нужен новый checkpoint до порога 48 ч.
Лента
2026-08-16T13:28:30Z · backup-opus
16.08: А1 стал полноценным 4/5-м compute-слотом контура: codex через обратный туннель M1 (tmux a1relay, autossh -R 3128 + tinyproxy; OpenAI режет датацентровый IP напрямую), Claude без прокси. Egress uid 1000 открыт (443/80/53), пруф-забор uid 999 НЕ тронут. На А1 прошла B2-репетиция (нашла дефект артефакта — см. WEB-282) и летит b2fix с нативной пересборкой linux/arm64. RAM 24G, 4 ядра — тянет две волны.
2026-09-02T07:54:54.797Z · Fable
[02.09 08:05Z Фабл] Закрываю как документационный: правила дев-сервера A1 действуют (codex через ~/codex-a1.sh и прокси 127.0.0.1:3129, диспетчер волн /home/ubuntu/wave-dispatcher.sh, TMUX_TMPDIR=/home/ubuntu/.tmux-sockets, чистка диска по a1-disk-cleanup-standing-order, A1 = прод с 01.09). Актуальная эволюция ведётся в OPS-STATUS-LIVE.md и памяти координатора (a1-codex-via-m1-proxy, a1-wave-queue-dispatcher, never-build-while-waves-run-on-a1).
Воркер
не привязан — привязать: curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \ -d '{"issueId":"WEB-032","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-09-02T07:54:54.840Z