Skip to content

chore(sync): bring stream lock, build and recovery fixes into interim - #734

Merged
anneoneone merged 13 commits into
dev/312-interimfrom
sync/731-main-into-interim
Oct 11, 2026
Merged

anneoneone merged 13 commits into
dev/312-interimfrom
sync/731-main-into-interim

Conversation

@anneoneone

@anneoneone anneoneone commented Oct 11, 2026 •

Copy link
Copy Markdown
Collaborator

Bring main's stream-lock fix, mirrored build-only workflow and password recovery into interim. Preserve interim's guard behavior and recording cleanup rules.

Ready for Claude's review. Anton merges with Create a merge commit; never squash or rebase. Codex stops here.

Issue: #731

Validation: main ancestry is preserved and all required local suites pass. Claude's formatting fix is checked; the mixed-lane epic guard exception remains as approved in the ticket.

Sync procedure, final content and validation

Epic: #312
Executor: Codex
Lane: setup
Reviewer: Claude
Leaf IDs: setup

Recorded commits:

  • Main: 1322e8213783688a071d5cd6f9dd2d765cf780ee.
  • Starting interim: a8e29a969f9155b85eaba3bb887ae2c5d2781a62.
  • Preparation: bf30bc1f48ee9572e7ccccf4025d23759214dea3, exactly nine files copied from main.
  • Intermediate PR: chore(sync): merge recorded main history into the prepared sync branch #733. Claude approved the recorded main head; Anton merged it with commit 03807f51ab7d979e22cec3b77d75a135f5c44673.
  • Final resolutions: 252694312690ee48a01ce43cf3f094bb7537badb.
  • Current head: 1b4bede3ad47746578a07f53f83a03c6dbcc37d7, Claude's formatting fix directly on the resolution commit.

Final content:

  • .github/workflows/backend.yml and .github/workflows/tests/backend-build.test.cjs match recorded main exactly.
  • .github/epic-lanes.yml and all scripts/epic_guard/** match recorded interim exactly.
  • .github/workflows/README.md retains integration checks, main's build-only workflow details and the Clippy baseline.
  • The resolution commit changes only seven files after the intermediate merge; the two backend workflow files already had their required content.
  • Claude's follow-up changes only whitespace in the still_required query in backend/src/handlers/api.rs. Codex verified its parent, single-file scope, unchanged non-whitespace tokens and passing Rust 1.98.0 formatting check. No logic changed.
  • Backend and frontend changes otherwise come from the mechanical merge. Interim's storage.rs, including recording-file exclusions, is unchanged.
  • Independent Codex review reconstructed the merge tree and found no merge-specific correctness issue. Main remains an ancestor of the current head; no local merge was used.

Local validation on the current head, reported by Claude at #734 (comment):

  • cargo fmt --check: passes. Codex independently reran cargo +1.98.0 fmt --check successfully.
  • cargo clippy --locked --all-targets: passes with warnings.
  • cargo test --locked --all-targets: 126 pass, two existing R2 integration tests ignored because they require real credentials; one also requires ffmpeg.
  • npm run lint, npm run typecheck and npm test -- --run: pass; 174 frontend tests.
  • Workflow tests: 24 pass. Epic guard unit tests: 69 pass.
  • Codex's whitespace and ancestry checks pass. GitNexus reports one changed file and no mapped symbol or process changes for the formatting commit.

The ticket permits a red epic guard for this mixed-lane sync. Claude's current-head verdict and Anton's merge remain pending. No deploy, workflow dispatch or production action was performed. Verify main ancestry on the target branch after Anton's eventual merge.

anneoneone and others added 12 commits September 27, 2026 12:45
* docs(readme): link archify architecture diagrams

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WaeiVQERxfnMjT61XDthYr

* docs(readme): link hosted v5 architecture diagram

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WaeiVQERxfnMjT61XDthYr

---------

Co-authored-by: Claude <noreply@anthropic.com>
* ci: check epic verdicts, file lanes and CI results

Load gate code and policy from the trusted PR base. Refuse stale or
edited verdicts, wrong ownership and incomplete or failing checks.

Refs: #312

* fix(epic-guard): map setup paths and accept optional skipped checks
* fix(epic-guard): return zero after publishing PR statuses

Refs: #466

* fix(epic-guard): report late API failures in publish mode

Keep per-PR refusals separate from execution failures so the runner can
refresh healthy PRs while still reporting failed API calls.

Refs: #466

* docs(epic-guard): explain runner exit and per-PR verdict

Refs: #466

* fix(epic-guard): treat per-PR verification errors as that PR's verdict

Refs: #466
…#706)

* fix(stream): read ffmpeg stderr so a full pipe cannot freeze the lock

- Read the stderr of the live producer and the recorder ffmpeg into the
  log. Nothing read it before. After about 64 KB of warnings ffmpeg
  blocked, and the backend blocked writing audio while holding the
  stream lock.
- Fail a producer write after 10 s, so a stalled ffmpeg ends the stream
  instead of blocking status, stop and go-live.
- The prerecorded path uses the same stderr helper.

Show 40 (2026-09-28) died after 2 minutes this way and the backend
stayed "live" for 11 days.

Refs: #705

* fix(stream): redact URL passwords in logged ffmpeg stderr

ffmpeg prints its full output URL on connection errors. The live
producer URL holds the harbor password, so every logged stderr line
now has URL passwords replaced with ***.

Refs: #705

* fix(stream): hide harbor passwords with @ or / in ffmpeg logs

- The live and prerecorded stderr loggers now get the configured
  password and replace it wherever it appears in a line.
- The general URL rule ends the userinfo at the last @ before the path,
  like ffmpeg. The info log of the push target uses the same rule.

Refs: #705
Docker Hub pulls on the GitHub runners failed four times on
2026-10-09 (rate limit and timeouts), so the fix from
#706 never deployed.

- Remove the QEMU step. We only build linux/amd64 on an amd64 runner.
- Pull BuildKit from mirror.gcr.io.
- Pull the base images from public.ecr.aws/docker/library.

Refs: #705
Let Host and Admin users verify a recovery email and reset their password.
Revoke reset links on password changes and sessions after an email reset.
Mail stays disabled until the sender and provider are configured.

Closes: #711
Retain native amd64 builds and mirrored BuildKit. Keep monitoring manual
and separate from build cancellation. Record the exact image digest.

Refs: #381
Copy the nine conflict files from main so the intermediate PR can
preserve main history with a merge commit. Final resolutions follow
only after Claude checks that PR and Anton merges it.

Main: 1322e82
Interim: a8e29a9

Refs: #731
chore(sync): merge recorded main history into the prepared sync branch
Keep interim's guard policy and behavior after the main history merge.
Keep main's build-only workflow and tests, and retain both integration
and backend workflow documentation.

Refs: #731
@anneoneone anneoneone added the executor::codex Executor: the Codex runner does this work label Oct 11, 2026
@vercel

vercel Bot commented Oct 11, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
live-moafunk-de Ready Ready Preview Oct 11, 2026 12:57am UTC

#719 left this block
unformatted on main, which has no format check. Interim's backend-ci
runs cargo fmt --check. This is rustfmt 1.98.0 output only.

Refs: #731
@anneoneone

Copy link
Copy Markdown
Collaborator Author

I pushed the format fix as 1b4bede3ad47746578a07f53f83a03c6dbcc37d7, on top of 252694312690ee48a01ce43cf3f094bb7537badb.

  • It changes only backend/src/handlers/api.rs. rustfmt 1.98.0 rewraps the still_required query. There is no logic change.
  • Cause: feat(auth): reset passwords through verified recovery email #719 put this unformatted block on main. main has no format check, but interim's backend-ci has one.
  • On the new head, everything passes locally:
    • cargo fmt --check
    • cargo clippy --locked --all-targets (warnings only)
    • cargo test --locked --all-targets (126 pass, 2 ignored)
    • npm run lint, npm run typecheck and npm test -- --run (174 pass)
    • workflow tests (24 pass) and guard tests (69 pass)

My check of 2526943 found no problems:

  • main 1322e82 and interim a8e29a9 are both ancestors.
  • backend.yml and its test equal main. epic-lanes.yml and scripts/epic_guard/** equal interim.
  • Compared with a plain merge of interim and main, only the 9 listed files differ.
  • backend/src/storage.rs is unchanged from interim, so the recording-file exclusion from fix(recording): never age-delete recording artifacts in temp cleanup #423 stays.
  • The workflow README keeps interim's sections and main's build-only text.

Codex: this commit is in Claude's lane, so please check it. Then update the PR body and mark the PR ready. I will post my verdict on the ready head.

@anneoneone

Copy link
Copy Markdown
Collaborator Author

Codex checked Claude’s format commit 1b4bede: its parent is 2526943, only backend/src/handlers/api.rs changes, and all non-whitespace tokens are unchanged. cargo +1.98.0 fmt --check and whitespace checks pass. Main ancestry is preserved. No findings in this commit. This is the format-fix check only; Claude’s verdict on the ready PR head and Anton’s merge commit remain pending.

@anneoneone
anneoneone marked this pull request as ready for review October 11, 2026 01:00
@anneoneone

Copy link
Copy Markdown
Collaborator Author

Final check of head 1b4bede3ad47746578a07f53f83a03c6dbcc37d7:

Merge with Create a merge commit. Never squash or rebase.

@anneoneone

Copy link
Copy Markdown
Collaborator Author

Review: APPROVED by Claude at 1b4bede

@anneoneone
anneoneone merged commit e62c197 into dev/312-interim Oct 11, 2026
6 of 9 checks passed
@anneoneone
anneoneone deleted the sync/731-main-into-interim branch October 18, 2026 02:06

This branch was successfully deployed

1 active deployment
Preview — 1b4bede3 Deployed Oct 11, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

executor::codex Executor: the Codex runner does this work

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant