Skip to content

feat(web): Studio deploy, Act on findings, unified action surface (F5/F12/F3) - #1343

Merged
groupthinking merged 3 commits into
mainfrom
perf/container-shutdown
Aug 4, 2026
Merged

feat(web): Studio deploy, Act on findings, unified action surface (F5/F12/F3)#1343
groupthinking merged 3 commits into
mainfrom
perf/container-shutdown

Conversation

@groupthinking

@groupthinking groupthinking commented Aug 4, 2026

Copy link
Copy Markdown
Owner

Canonical issue

Closes #1344

Outcome

Operators and builders get an end-to-end plan → act → package path on the EventRelay web app:

  1. Studio Deploy (F5) kicks off a real pipeline handoff (POST /api/pipeline, deployment_target=vercel), reuses the last Run job id when present, polls /api/jobs/{id} for live_url / github_repo, and falls back to offline Export messaging when BACKEND_URL is missing.
  2. Act on findings (F12) on the dashboard runs the transcription-driven action agent (useActionAgentStorePOST /api/agents/actions) with phase/status UI.
  3. Unified action surface (F3) keeps backend project_scaffold on insights, surfaces it in ActionsPanel, and exports a deterministic scaffold package (README, tasks.json, stub) from lib/action-surface.ts (workbench shape absorbed; external workbench tree marked retired).

Scope

  • Included:
    • apps/web/src/lib/studio-deploy.ts + tests
    • apps/web/src/lib/action-surface.ts + tests
    • VideoWorkflowStudio.tsx deploy path
    • dashboard/panels.tsx Act on findings + Project scaffold export
    • Stream/dashboard plumbing for project_scaffold
  • Explicitly excluded:
    • F6 local auth (EVENTRELAY_API_KEY / ALLOW_UNAUTHENTICATED)
    • F7 optional yt_dlp / youtube-transcript-api install
    • Dual ActionImplementer consolidation (F4)
    • Changes to FastAPI agent internals beyond consuming existing project_scaffold

Risk

  • Risk level: low
  • Failure mode: Deploy/act paths degrade to offline handoff or honest API errors when backend/AI keys are missing; no change to payment or auth gates.
  • Rollback: revert this PR; Studio/Dashboard return to pre-F5/F12 messaging and drop scaffold export.

Verification

Tied to head 4d5d6deb3d6687bcff5d10e8832dbe4935753d37 (branch perf/container-shutdown).

  • Focused tests: npm test -- --run src/lib/__tests__/studio-deploy.test.ts (3 pass)
  • Focused tests: npm test -- --run src/lib/__tests__/action-surface.test.ts (4 pass)
  • Focused tests: pytest tests/unit/test_gh_aw_workflow_governance.py (9 pass; CI Investigator orphan cleanup)
  • Lint: frontend CI job expected on this PR
  • Required CI: green on current head after governance fix
  • Review threads resolved
  • Manual smoke (optional): Studio Run → Deploy; Dashboard Act on findings → Export package

Production evidence

Agent handoff

  • One canonical issue is linked
  • No competing PR implements the same issue
  • Acceptance criteria are satisfied in code + unit tests
  • Required checks pass on the current head
  • Human decision is requested only for product, security, irreversible infrastructure, or production approval

Agent provenance

Human-authored pull request (Grok Build session on Dev canonical tree). Agent-lock section not applicable.

F5: Studio Deploy calls POST /api/pipeline with deployment_target=vercel,
reuses the last Run job id when present, and polls /api/jobs/{id} for
live_url/github_repo. Helpers live in lib/studio-deploy.ts with unit tests.
Falls back to offline Export messaging when BACKEND_URL is missing.

F12: Dashboard ActionsPanel runs the transcription-driven action agent via
useActionAgentStore → POST /api/agents/actions, with phase/status UI and
clear. Requires a non-empty transcript on the video.

Next SSOT follow-up: F3 unify action surfaces on Dev only.
Canonical EventRelay path is plan → act → package:

- Plan: plumb TranscriptActionAgent project_scaffold through
  /api/pipeline/stream and dashboard insights (no longer dropped).
- Act: existing F12 ActionsPanel → /api/agents/actions (unchanged).
- Package: absorb workbench deterministic scaffold (README, tasks.json,
  stub index) into lib/action-surface.ts; Export package in ActionsPanel.

video-intelligence-workbench marked RETIRED outside this repo (RETIRED.md).
Copilot AI balanced review requested due to automatic review settings August 4, 2026 04:13
@vercel

vercel Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

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

Project Deployment Actions Updated (UTC)
v0-uvai Building Building Preview, v0 Aug 4, 2026 4:19am

@github-actions github-actions Bot added javascript Pull requests that update javascript code tests labels Aug 4, 2026
@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Snapshot Warnings

⚠️: No snapshots were found for the head SHA 4d5d6de.
Ensure that dependencies are being submitted on PR branches and consider enabling retry-on-snapshot-warnings. See the documentation for more information and troubleshooting advice.

Scanned Files

None

@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are limited based on label configuration.

🏷️ Required labels (at least one) (1)
  • [‘architecture-gap’, ‘bug’, ‘ci-cd’, ‘ci/cd’, ‘copilot-rabbit’, ‘documentation’, ‘duplicate’, ‘enhancement’, ‘frontend’, ‘github_actions’, ‘good first issue’, ‘help wanted’, ‘high-priority’, ‘invalid’, ‘javascript’, ‘ml-model’, ‘needs-triage’, ‘pipeline-critical’, ‘placeholder-code’, ‘priority:high’, ‘python’, ‘python:uv’, ‘question’, ‘styling’, ‘tests’, ‘v0’]

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository YAML (base), Repository UI (inherited), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 3df355fd-0efa-4213-9283-5defcd292483

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown

🔍 PR Validation

⚠️ Large PR detected (841 lines changed)

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown

Agent Completion Truth Gate: NOT_APPLICABLE

Evidence agrees.

Machine-readable verdict
{
  "details": {},
  "reasons": [],
  "verdict": "not_applicable"
}

Workflow evidence

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds Studio deployment handoff, transcript-driven actions, and scaffold export to unify the plan → act → package workflow.

Changes:

  • Adds deployment kickoff and job polling to Studio.
  • Exposes action-agent execution and scaffold export in Dashboard.
  • Preserves backend project_scaffold data through streaming and stores.

Reviewed changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
apps/web/src/store/dashboard-types.ts Adds scaffold data to dashboard types.
apps/web/src/store/dashboard-store.ts Preserves scaffold data across analysis paths.
apps/web/src/lib/studio-deploy.ts Implements deployment kickoff and polling helpers.
apps/web/src/lib/gemini-video-analyzer.ts Extends analysis results with scaffold data.
apps/web/src/lib/action-surface.ts Builds, previews, and downloads scaffold packages.
apps/web/src/lib/__tests__/studio-deploy.test.ts Tests deployment helpers.
apps/web/src/lib/__tests__/action-surface.test.ts Tests scaffold generation and summaries.
apps/web/src/components/VideoWorkflowStudio.tsx Adds Studio deployment controls and status.
apps/web/src/components/dashboard/panels.tsx Adds action execution and package export UI.
apps/web/src/app/api/pipeline/stream/route.ts Streams backend scaffold data to Dashboard.
Suppressed comments (1)

apps/web/src/lib/tests/studio-deploy.test.ts:45

  • Repository test policy bans this video ID because it is age-gated/flaky; AGENTS.md:92 requires auJzb1D-fag for test fixtures.
    const result = await kickoffStudioDeploy({ url: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ' });


if (
live_url ||
jobStatus === 'completed' ||
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
url: input.url,
async: true,
jobStatus,
live_url,
github_repo,
message: str(body.error) || str(body.detail) || str(data.message),
Comment on lines +513 to +514
// Prefer reusing job from the last run when present.
let jobId = lastPipelineCheck?.jobId || deployJobId || undefined;
Comment on lines +198 to +199
const { lifecycle, isRunning, runFromTranscript, reset } = useActionAgentStore();
const fulfilled = lifecycle.actions || [];
}),
);

const result = await kickoffStudioDeploy({ url: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = path.includes('/') ? path.split('/').pop() || path : path;

Copy link
Copy Markdown
Owner Author

@coderabbitai review

Auto-review was skipped by the label gate; triggering a manual pass on this SSOT F5/F12/F3 surface (studio-deploy, action-surface, dashboard panels).


Generated by Claude Code

@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

@groupthinking I will review the Studio deploy, action surface, and dashboard paths for production-impacting defects.

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

The investigator workflow was removed earlier (noise-only output) but
unit tests and gh-aw validation still required its sources, failing CI
with FileNotFoundError. Assert removal and stop compiling it.

Copy link
Copy Markdown
Owner Author

Automated shepherd pass — red-team verification + merge-blocker diagnosis

Terminal state: HALTED — not mergeable yet. Two independent blockers.

1. Hard CI blocker (governance, not code)

agent-completion/truth-gate/pr-1343BLOCKED invalid_payload, invalid fields policy.agent_login and policy.run_id. This PR is human-authored ("Agent-lock section not applicable"), so the completion payload legitimately lacks those fields. Re-running the gate won't clear it — it needs either a valid policy payload (populated agent_login + run_id) or an explicit human disposition/waiver for this PR. Nothing in the diff changes this outcome.

2. Seven review findings — all independently verified real

I checked each of Copilot's inline comments against the diff; none are false positives. Ranked by impact:

Feature-breaking (F5 "deploy" never actually deploys):

  • studio-deploy.ts:45async: true routes to /api/v1/videos/process (TranscriptActionWorkflow), whose job-status schema has no live_url / github_repo. Polling it as a deployment job means F5 can only ever finish analysis, never return a live deploy. The headline plan→act→package→deploy path needs a real async deploy contract, or F5 should be scoped to a follow-up.
  • studio-deploy.ts:134 — the terminal-status check omits the backend's actual success value complete (it only matches completed). A successful job without a live_url burns all 6 poll attempts before returning.

Correctness / cross-video state:

  • VideoWorkflowStudio.tsx:514 — cached deployJobId isn't keyed to its source URL; deploying video B after running video A polls A's job. Key the cache to the URL and clear deploy state when the source changes.
  • panels.tsx:199 — the global useActionAgentStore lifecycle isn't scoped per video; switching A→B leaves A's actions visible and exportScaffold packages them under B's title/scaffold. Scope or reset by video ID.
  • action-surface.ts:148 — export flattens the tree (src/index.tsindex.ts) and fires N sequential browser downloads (some get blocked), so the result isn't a usable project package. Emit a single archive rooted at projectName.
  • studio-deploy.ts:128 — a failed job's reason is in data.error, which the parser never reads, so the UI drops the actionable backend reason.

Repo-policy:

  • studio-deploy.test.ts:24,45 — uses banned video ID dQw4w9WgXcQ; AGENTS.md:92 requires auJzb1D-fag for test fixtures.

I did not push fixes (this routine is scoped to its own branch, not perf/container-shutdown), and did not merge or resolve any threads. The two feature-breaking items warrant a call on whether F5's deploy contract belongs in this PR or a follow-up before it's marked ready for merge.


Generated by Claude Code

Copy link
Copy Markdown
Owner Author

Remediation scan — merge-blocked; headline F5 outcome not yet met

Ran the PR remediation pass. mergeable_state=unstable (no conflicts; the edit re-triggered CI — build/lint/test/security/guards are queued/in-progress, nothing failed yet). CodeRabbit auto-review was label-gated and the manual @coderabbitai review returned "finished" with no line findings, so the substantive review here is Copilot's 7 unresolved threads, ranked:

🚩 Blocker — contradicts this PR's own F5 acceptance criterion

  1. studio-deploy.ts:45 — the async:true deploy path forwards only video_url/language to /api/v1/videos/process, which runs TranscriptActionWorkflow (its job schema has no live_url/github_repo). So F5 polls a job that can only finish analysis — "Studio Deploy → real pipeline handoff" never actually deploys. This is the PR's headline outcome, so as-built the stated intent isn't met. Needs a real async video→deploy contract, or the F5 "deploy" claim de-scoped. Product/architecture decision — human call.

Correctness (mechanical, fixable in-branch)

  1. studio-deploy.ts:134 — terminal status is complete, not completed; a successful job without live_url never exits and burns all remaining poll attempts.
  2. studio-deploy.ts:128 — backend failure reason lives in data.error; parser only reads top-level + data.message, so the actionable reason is dropped from the deploy UI.
  3. VideoWorkflowStudio.tsx:514 — cached job id isn't keyed to its source URL and is never cleared on URL change → Deploy polls the previous video's job.
  4. dashboard/panels.tsx:199 — one global Zustand lifecycle vs a per-video panel → cross-video state leakage; scope by video id or reset on selection change.
  5. action-surface.ts:148 — basename conversion flattens the scaffold tree (src/index.tsindex.ts) and fires multiple browser downloads → exported package no longer matches pkg.files. Emit one archive rooted at pkg.projectName.

Policy / CI

  1. studio-deploy.test.ts:24 (and :45) — uses a banned/age-gated video id; AGENTS.md:92 mandates auJzb1D-fag for fixtures. Likely to trip governance/tests.

Verdict vs. intent: more work needed

This automated pass did not push code: it's an unattended run, main is protected (no merge without sign-off), and I don't push to this feature branch without the owner's go-ahead. Findings are staged here for the branch owner to action; re-run once #1 is decided and #2#7 are committed.


Generated by Claude Code

@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '=== Candidate files ==='
fd -HI -t f '^(studio-deploy|action-surface|VideoWorkflowStudio|panels|AGENTS).*' . | sort

printf '%s\n' '=== File outlines ==='
for f in \
  apps/web/src/lib/studio-deploy.ts \
  apps/web/src/lib/action-surface.ts \
  apps/web/src/lib/__tests__/studio-deploy.test.ts \
  AGENTS.md
do
  if [ -f "$f" ]; then
    printf '\n--- %s ---\n' "$f"
    case "$f" in
      *.ts|*.tsx) ast-grep outline "$f" --items all || true ;;
      *) sed -n '80,105p' "$f" ;;
    esac
  fi
done

printf '%s\n' '=== Relevant client code ==='
rg -n -C 5 --glob 'studio-deploy.ts' --glob 'action-surface.ts' \
  'api/pipeline|videos/process|api/jobs|live_url|github_repo|completed|complete|data\.error|download|basename' apps/web/src 2>/dev/null || true

printf '%s\n' '=== Studio and dashboard state code ==='
rg -n -C 5 --glob 'VideoWorkflowStudio.tsx' --glob 'panels.tsx' \
  'deployJobId|sourceUrl|video.*[Ii]d|useActionAgentStore|exportScaffold|reset' apps/web/src 2>/dev/null || true

printf '%s\n' '=== Backend endpoint and status contract ==='
rg -n -C 6 --glob '*.{py,ts}' \
  '(/api/pipeline|pipeline.*POST|videos/process|TranscriptActionWorkflow|live_url|github_repo|class .*Job|status.*complete)' . 2>/dev/null || true

printf '%s\n' '=== Fixture policy and current fixture values ==='
rg -n -C 3 'auJzb1D-fag|dQw4w9WgXcQ' AGENTS.md apps/web/src/lib/__tests__/studio-deploy.test.ts 2>/dev/null || true

Length of output: 201847


🏁 Script executed:

#!/bin/bash
set -euo pipefail

show_range() {
  local file="$1" start="$2" end="$3"
  if [ -f "$file" ]; then
    printf '\n=== %s (Lines %s-%s) ===\n' "$file" "$start" "$end"
    nl -ba "$file" | sed -n "${start},${end}p"
  fi
}

printf '%s\n' '=== Locate selected components and API job route ==='
fd -HI -t f '^(VideoWorkflowStudio|panels|route)\.(tsx|ts)$' apps/web/src | sort
rg -n -C 4 --glob 'route.ts' 'jobs/\[|api/jobs|status_url|videos/.*/status' apps/web/src/app/api
rg -n -C 4 --glob 'VideoWorkflowStudio.tsx' 'deployJobId|kickoffStudioDeploy|pollStudioJob|sourceUrl|set.*[Uu]rl' apps/web/src
rg -n -C 4 --glob 'panels.tsx' 'useActionAgentStore|exportScaffold|selectedVideo|video\.id|useEffect' apps/web/src
rg -n -C 4 --glob 'action-surface.ts' 'export|download|files|projectName|basename|Blob|zip|archive' apps/web/src/lib

for f in \
  apps/web/src/components/VideoWorkflowStudio.tsx \
  apps/web/src/components/dashboard/panels.tsx \
  apps/web/src/lib/action-surface.ts \
  apps/web/src/app/api/jobs/[id]/route.ts \
  apps/web/src/lib/__tests__/action-surface.test.ts
do
  if [ -f "$f" ]; then
    ast-grep outline "$f" --items all || true
  fi
done

Length of output: 34057


@groupthinking I independently confirmed all seven findings on the current branch.

The F5 defect is merge-blocking. POST /api/pipeline correctly receives deployment_target=vercel, but its async branch forwards the request to /api/v1/videos/process. That endpoint runs TranscriptActionWorkflow. Its job contract ends with status: "complete" and has no live_url or github_repo. The Studio therefore polls a transcript job as if it were a deployment job.

The PR must do one of these actions before merge:

  1. Add an async deployment job contract that accepts the project and deployment inputs. Its status response must expose live_url, github_repo, and an explicit terminal status.
  2. Remove the F5 deploy claim from this PR and treat the current flow as analysis plus export handoff.

The remaining fixes are valid and can proceed after that decision:

  • In apps/web/src/lib/studio-deploy.ts, accept complete as a terminal status. The backend video-job enum uses complete, not completed.
  • In apps/web/src/lib/studio-deploy.ts, parse data.error so the UI shows the backend failure reason.
  • In apps/web/src/components/VideoWorkflowStudio.tsx, bind cached job IDs to a normalized source URL. Clear deployJobId, deployLiveUrl, and deployRepo when the source URL changes.
  • In apps/web/src/components/dashboard/panels.tsx, isolate useActionAgentStore state by video.id, or reset it when video.id changes. The current global lifecycle can export actions from video A under video B.
  • In apps/web/src/lib/action-surface.ts, export one archive rooted at pkg.projectName. Preserve paths such as src/index.ts. The current implementation flattens nested paths and starts multiple downloads.
  • In apps/web/src/lib/__tests__/studio-deploy.test.ts, replace dQw4w9WgXcQ with auJzb1D-fag to comply with AGENTS.md.

Add focused tests for complete, nested data.error, URL-switch cache invalidation, video-switch action isolation, and archive path preservation. The existing focused tests do not cover these failure modes.

The governance gate remains separate from these code defects. It needs the stated human waiver or a valid payload. 🐇

You are interacting with an AI system.

Comment thread apps/web/src/components/VideoWorkflowStudio.tsx
const transcript = (video.transcript || '').trim();
const hasTranscript = transcript.length > 40;
const { lifecycle, isRunning, runFromTranscript, reset } = useActionAgentStore();
const fulfilled = lifecycle.actions || [];

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ActionsPanel reads a global, unscoped action-agent store that is never reset when the selected video changes, so video A's fulfilled actions are displayed and exported under video B's title/scaffold.

Fix on Vercel

Comment on lines +128 to +133
message: str(body.error) || str(body.detail) || str(data.message),
raw: body,
};

if (
live_url ||

@vercel vercel Bot Aug 4, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
message: str(body.error) || str(body.detail) || str(data.message),
raw: body,
};
if (
live_url ||
message:
str(body.error) ||
str(body.detail) ||
str(data.error) ||
str(data.message),
raw: body,
};
if (
live_url ||
jobStatus === 'complete' ||

pollStudioJob does not recognize the backend's terminal status value 'complete', so successful jobs without a live_url burn all remaining poll attempts and the deploy UI reports a stale pending status; failure reasons under data.error are also dropped.

Fix on Vercel

Copy link
Copy Markdown
Owner Author

Merge-blocker update — test job root cause + existing fix

Completing the prior remediation scan (which saw the test job still in-progress and reported "nothing failed yet"): the test job has since finished — FAILED — so there is a third, independent blocker beyond the truth-gate and the 7 review findings already documented above.

  • Failure: tests/unit/test_gh_aw_workflow_governance.py::test_ci_investigator_requires_dedicated_codex_credentialFileNotFoundError: .github/workflows/eventrelay-ci-investigator.md (1 failed, 7955 passed).
  • Root cause: commit 07b8a2e ("ci: remove EventRelay CI Investigator workflow source") intentionally deleted the eventrelay-ci-investigator workflow but left two hooks pointing at it — this governance test and the gh-aw-validation.yml compile/diff steps. It fails on main itself, so it is not caused by this PR (whose diff is frontend-only and touches neither file).
  • Fix already open → fix(ci): drop stale eventrelay-ci-investigator governance checks #1317 (fix(ci): drop stale eventrelay-ci-investigator governance checks, draft): the complete, verified fix (removes the orphaned test + stale validation refs, adds a reintroduction guard; #1320 / #1342 are less-complete alternatives). Once fix(ci): drop stale eventrelay-ci-investigator governance checks #1317 lands and this branch rebases, the test gate goes green.

Net — this PR remains HALTED on three fronts:

  1. test job → land fix(ci): drop stale eventrelay-ci-investigator governance checks #1317, then rebase this branch.
  2. agent-completion/truth-gateinvalid_payload (needs a valid policy payload or explicit human waiver).
  3. The 7 Copilot/CodeRabbit findings, incl. the F5 deploy-contract product decision.

No code pushed — unattended run, main is protected, and this is not my designated branch.


Generated by Claude Code

@groupthinking
groupthinking merged commit abdb2b3 into main Aug 4, 2026
42 checks passed
@groupthinking
groupthinking deleted the perf/container-shutdown branch August 4, 2026 04:28
@linear-code

linear-code Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

GRV-303

Copy link
Copy Markdown
Owner Author

Status refresh (PR-edit event) — 2 of 3 prior blockers cleared; still HALTED on one human decision

Re-scanned head 4d5d6de after this edit. The earlier shepherd notes above are now stale — correcting them so the thread reflects live state:

Cleared since the last pass:

  • agent-completion/truth-gate/pr-1343 → now success (not_applicable: all rules passed). The earlier invalid_payload (blocker Implement Nightly Audit & Ruthless Remediation Agent #2) is gone.
  • test check-run → success, along with build, lint-frontend, lint-python, guards, and every security scan (CodeQL, bandit, trivy, gitleaks, npm-audit, python-safety, dependency-review). The governance test failure reported at 04:25 no longer reproduces on this head. Generate and Upload Coverage is the only check still running — non-blocking (mergeable_state=unstable, no conflicts). If the governance test resurfaces there, fix(ci): drop stale eventrelay-ci-investigator governance checks #1317 remains the fix.

Still open — this is what keeps it un-mergeable:

  1. F5 deploy-contract decision (human, product/architecture). studio-deploy.ts:45 routes async:true to /api/v1/videos/process (TranscriptActionWorkflow), whose job schema has no live_url/github_repo — so F5 polls a transcript job and never actually deploys, contradicting this PR's headline outcome. Either add a real async deploy contract or de-scope the F5 "deploy" claim. Independently confirmed by Copilot and CodeRabbit.
  2. 6 mechanical review findings, all still unresolved: complete (not completed) terminal status + data.error parsing in studio-deploy.ts; job-cache keyed to source URL in VideoWorkflowStudio.tsx:514; per-video store isolation in panels.tsx:199; single rooted archive in action-surface.ts:148; and test fixture dQw4w9WgXcQauJzb1D-fag per AGENTS.md:92.

Terminal state: HALTED — awaiting owner. No code pushed and not merged: this is an unattended run, main is protected (no automerge label → merge needs your sign-off), and the #2 fixes must land on perf/container-shutdown, which is not this routine's designated branch. Decide #1, commit the #2 fixes, and re-run — I'll re-verify the review threads + CI and take it to the publish gate.


Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

javascript Pull requests that update javascript code tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Product: Studio deploy + Act on findings + unified action surface (F5/F12/F3)

2 participants