Skip to content

ci: fall back when e2e clone ref is gone - #1318

Merged
piotr-iohk merged 9 commits into
masterfrom
cursor/e2e-clone-missing-branch-fallback-d3b1
Sep 22, 2026
Merged

piotr-iohk merged 9 commits into
masterfrom
cursor/e2e-clone-missing-branch-fallback-d3b1

Conversation

@piotr-iohk

@piotr-iohk piotr-iohk commented Sep 21, 2026

Copy link
Copy Markdown
Collaborator

Twin: bitkit-ios#767

This PR stops Clone E2E tests from hard-failing when the determined companion branch is gone by the time checkout runs, using the shared resolve-e2e-ref composite action from bitkit-e2e-tests#252 (merged; pin is @main).

determine-e2e-branch already falls back to main when the same-named companion is missing at determine time. Clone still used that output as actions/checkout ref blindly. If the companion is deleted between determine and clone, or a failed-only re-run keeps a stale determine output, checkout fails (fetch exit 1). Example: run 35594055695, Clone E2E tests (E2E_BRANCH: fix/724-lock-on-background).

Description

  • Resolves the selected e2e ref with the shared resolve-e2e-ref action immediately before each clone so a missing companion falls back to main with a warning, instead of failing checkout.
  • Replaces the duplicated inline bash in local, staging, and migration shard and Slack jobs with that action.
  • Hard-fails when a workflow_dispatch e2e_branch is an explicit missing custom branch, so that case stays actionable.
  • Pins uses to synonymdev/bitkit-e2e-tests/.github/actions/resolve-e2e-ref@main after e2e#252 merged.

Out of Scope

  • iOS twin: bitkit-ios#767.
  • determine-e2e-branch in bitkit-e2e-tests: still only checks the companion at determine time.

Design

N/A — no UI changes.

Preview

N/A

QA Notes

Manual Tests

N/A

Automated Checks

  • Parsed .github/workflows/e2e.yml, e2e-staging.yml, and e2e_migration.yml.
  • Confirmed action inputs against .github/actions/resolve-e2e-ref/action.yml on main.
  • Confirmed zero @ci/resolve-e2e-ref pins remain; all resolve-e2e-ref uses are @main.
  • Workflow behavior takes effect after merge. Re-run a job whose determined companion was deleted, or dispatch E2E with a missing custom e2e_branch, to confirm fallback vs hard-fail (after merge).
Open in Web Open in Cursor 

cursoragent and others added 2 commits September 21, 2026 13:01
Co-authored-by: piotr-iohk <piotr-iohk@users.noreply.github.com>
Co-authored-by: piotr-iohk <piotr-iohk@users.noreply.github.com>
@piotr-iohk

Copy link
Copy Markdown
Collaborator Author

@cursor Please add a TEMPORARY file .github/workflows/resolve-e2e-ref-smoke.yml on this PR branch (do not open a new PR). Exact contents:

name: resolve-e2e-ref smoke

on:
  workflow_dispatch:
    inputs:
      e2e_branch:
        description: "E2E branch input (main | default-feature-branch | custom)"
        required: false
        default: "default-feature-branch"
        type: string
      pre_resolve_sleep_seconds:
        description: "Sleep before resolve job (race simulation)"
        required: false
        default: "0"
        type: string

jobs:
  determine:
    uses: synonymdev/bitkit-e2e-tests/.github/workflows/determine-e2e-branch.yml@main
    with:
      app_branch: ${{ github.ref_name }}
      e2e_branch_input: ${{ inputs.e2e_branch }}

  resolve:
    needs: determine
    runs-on: ubuntu-latest
    steps:
      - name: Optional pre-resolve sleep
        if: inputs.pre_resolve_sleep_seconds != '0'
        run: |
          echo "Sleeping ${{ inputs.pre_resolve_sleep_seconds }}s before resolve..."
          sleep "${{ inputs.pre_resolve_sleep_seconds }}"

      - name: Resolve e2e ref
        id: e2e-ref
        uses: synonymdev/bitkit-e2e-tests/.github/actions/resolve-e2e-ref@ci/resolve-e2e-ref
        with:
          selected: ${{ needs.determine.outputs.branch }}
          e2e_branch_input: ${{ inputs.e2e_branch }}

      - name: Checkout e2e tests
        uses: actions/checkout@v4
        with:
          repository: synonymdev/bitkit-e2e-tests
          ref: ${{ steps.e2e-ref.outputs.ref }}
          fetch-depth: 1
          path: e2e-tests

      - name: Confirm checkout
        working-directory: e2e-tests
        run: |
          echo "selected=${{ needs.determine.outputs.branch }}"
          echo "effective=${{ steps.e2e-ref.outputs.ref }}"
          echo "HEAD=$(git rev-parse HEAD)"
          git branch -r || true
          git log -1 --oneline
          echo "PASS"

Commit message: ci: temporary resolve-e2e-ref smoke workflow. Push to this branch only. Stop after the file is on the branch.

@cursor

cursor Bot commented Sep 21, 2026

Copy link
Copy Markdown

.github/workflows/resolve-e2e-ref-smoke.yml is on cursor/e2e-clone-missing-branch-fallback-d3b1 as 20926a1ed (ci: temporary resolve-e2e-ref smoke workflow).

Open in Web Open in Cursor 

Co-authored-by: piotr-iohk <piotr-iohk@users.noreply.github.com>
@piotr-iohk

Copy link
Copy Markdown
Collaborator Author

@cursor Update the TEMPORARY .github/workflows/resolve-e2e-ref-smoke.yml on this same PR branch (do not open a new PR).

Problem: workflow_dispatch is not registered until the workflow exists on the default branch. Change the smoke so it can run from this PR branch.

Replace the file with:

name: resolve-e2e-ref smoke

on:
  pull_request:
    paths:
      - '.github/workflows/resolve-e2e-ref-smoke.yml'
  push:
    branches:
      - 'cursor/e2e-clone-missing-branch-fallback-d3b1'
    paths:
      - '.github/workflows/resolve-e2e-ref-smoke.yml'
  workflow_dispatch:
    inputs:
      e2e_branch:
        description: "E2E branch input (main | default-feature-branch | custom)"
        required: false
        default: "default-feature-branch"
        type: string
      pre_resolve_sleep_seconds:
        description: "Sleep before resolve job (race simulation)"
        required: false
        default: "0"
        type: string
      case_filter:
        description: "Which matrix cases to run (all|A|B|C)"
        required: false
        default: "all"
        type: string

jobs:
  determine:
    strategy:
      fail-fast: false
      matrix:
        include:
          - case: A
            e2e_branch: main
            pre_resolve_sleep_seconds: "0"
          - case: B
            e2e_branch: default-feature-branch
            pre_resolve_sleep_seconds: "0"
          - case: C
            e2e_branch: default-feature-branch
            pre_resolve_sleep_seconds: "90"
    # Filter via dispatch input when present; on push/PR run all
    if: |
      github.event_name != 'workflow_dispatch' ||
      inputs.case_filter == 'all' ||
      inputs.case_filter == matrix.case
    uses: synonymdev/bitkit-e2e-tests/.github/workflows/determine-e2e-branch.yml@main
    with:
      app_branch: ${{ github.ref_name }}
      e2e_branch_input: ${{ github.event_name == 'workflow_dispatch' && inputs.e2e_branch || matrix.e2e_branch }}

  resolve:
    needs: determine
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        include:
          - case: A
            e2e_branch: main
            pre_resolve_sleep_seconds: "0"
          - case: B
            e2e_branch: default-feature-branch
            pre_resolve_sleep_seconds: "0"
          - case: C
            e2e_branch: default-feature-branch
            pre_resolve_sleep_seconds: "90"
    if: |
      github.event_name != 'workflow_dispatch' ||
      inputs.case_filter == 'all' ||
      inputs.case_filter == matrix.case
    steps:
      - name: Optional pre-resolve sleep
        if: (github.event_name == 'workflow_dispatch' && inputs.pre_resolve_sleep_seconds != '0') || matrix.pre_resolve_sleep_seconds != '0'
        run: |
          SECONDS_TO_SLEEP="${{ github.event_name == 'workflow_dispatch' && inputs.pre_resolve_sleep_seconds || matrix.pre_resolve_sleep_seconds }}"
          echo "Sleeping ${SECONDS_TO_SLEEP}s before resolve (case ${{ matrix.case }})..."
          sleep "$SECONDS_TO_SLEEP"

      - name: Resolve e2e ref
        id: e2e-ref
        uses: synonymdev/bitkit-e2e-tests/.github/actions/resolve-e2e-ref@ci/resolve-e2e-ref
        with:
          selected: ${{ needs.determine.outputs.branch }}
          e2e_branch_input: ${{ github.event_name == 'workflow_dispatch' && inputs.e2e_branch || matrix.e2e_branch }}

      - name: Checkout e2e tests
        uses: actions/checkout@v4
        with:
          repository: synonymdev/bitkit-e2e-tests
          ref: ${{ steps.e2e-ref.outputs.ref }}
          fetch-depth: 1
          path: e2e-tests

      - name: Confirm checkout
        working-directory: e2e-tests
        run: |
          echo "case=${{ matrix.case }}"
          echo "selected=${{ needs.determine.outputs.branch }}"
          echo "effective=${{ steps.e2e-ref.outputs.ref }}"
          echo "HEAD=$(git rev-parse HEAD)"
          git branch -r || true
          git log -1 --oneline
          echo "PASS"

IMPORTANT: reusable workflow_call jobs cannot use strategy.matrix the same way with if on the reusable job easily — if the above fails YAML validation, use this SIMPLER approach instead (preferred if unsure):

name: resolve-e2e-ref smoke

on:
  workflow_dispatch:
    inputs:
      e2e_branch:
        description: "E2E branch input"
        required: false
        default: "default-feature-branch"
        type: string
      pre_resolve_sleep_seconds:
        description: "Sleep before resolve"
        required: false
        default: "0"
        type: string
  push:
    branches:
      - 'cursor/e2e-clone-missing-branch-fallback-d3b1'
    paths:
      - '.github/workflows/resolve-e2e-ref-smoke.yml'
  pull_request:
    paths:
      - '.github/workflows/resolve-e2e-ref-smoke.yml'

jobs:
  determine:
    uses: synonymdev/bitkit-e2e-tests/.github/workflows/determine-e2e-branch.yml@main
    with:
      app_branch: ${{ github.head_ref || github.ref_name }}
      e2e_branch_input: ${{ inputs.e2e_branch || 'default-feature-branch' }}

  resolve:
    needs: determine
    runs-on: ubuntu-latest
    steps:
      - name: Optional pre-resolve sleep
        if: ${{ (inputs.pre_resolve_sleep_seconds || '0') != '0' }}
        run: |
          echo "Sleeping ${{ inputs.pre_resolve_sleep_seconds }}s before resolve..."
          sleep "${{ inputs.pre_resolve_sleep_seconds }}"

      - name: Resolve e2e ref
        id: e2e-ref
        uses: synonymdev/bitkit-e2e-tests/.github/actions/resolve-e2e-ref@ci/resolve-e2e-ref
        with:
          selected: ${{ needs.determine.outputs.branch }}
          e2e_branch_input: ${{ inputs.e2e_branch || 'default-feature-branch' }}

      - name: Checkout e2e tests
        uses: actions/checkout@v4
        with:
          repository: synonymdev/bitkit-e2e-tests
          ref: ${{ steps.e2e-ref.outputs.ref }}
          fetch-depth: 1
          path: e2e-tests

      - name: Confirm checkout
        working-directory: e2e-tests
        run: |
          echo "selected=${{ needs.determine.outputs.branch }}"
          echo "effective=${{ steps.e2e-ref.outputs.ref }}"
          echo "HEAD=$(git rev-parse HEAD)"
          git branch -r || true
          git log -1 --oneline
          echo "PASS"

Use the SIMPLER approach (second YAML). Commit message: ci: smoke trigger via push/PR for resolve-e2e-ref. Push to this PR branch only.

@cursor

cursor Bot commented Sep 21, 2026

Copy link
Copy Markdown

Smoke workflow now also triggers on push to this branch and on PRs that touch the file. Pushed as 34ce9a390 (ci: smoke trigger via push/PR for resolve-e2e-ref).

Open in Web Open in Cursor 

Co-authored-by: piotr-iohk <piotr-iohk@users.noreply.github.com>
@piotr-iohk

Copy link
Copy Markdown
Collaborator Author

@cursor Replace .github/workflows/resolve-e2e-ref-smoke.yml on this PR branch with the following (one push should run Case A+B+C). Do not open a new PR.

name: resolve-e2e-ref smoke

on:
  push:
    branches:
      - 'cursor/e2e-clone-missing-branch-fallback-d3b1'
    paths:
      - '.github/workflows/resolve-e2e-ref-smoke.yml'
  pull_request:
    paths:
      - '.github/workflows/resolve-e2e-ref-smoke.yml'
  workflow_dispatch:

jobs:
  determine-A:
    uses: synonymdev/bitkit-e2e-tests/.github/workflows/determine-e2e-branch.yml@main
    with:
      app_branch: ${{ github.head_ref || github.ref_name }}
      e2e_branch_input: main

  resolve-A:
    needs: determine-A
    runs-on: ubuntu-latest
    steps:
      - name: Resolve e2e ref
        id: e2e-ref
        uses: synonymdev/bitkit-e2e-tests/.github/actions/resolve-e2e-ref@ci/resolve-e2e-ref
        with:
          selected: ${{ needs.determine-A.outputs.branch }}
          e2e_branch_input: main
      - name: Checkout e2e tests
        uses: actions/checkout@v4
        with:
          repository: synonymdev/bitkit-e2e-tests
          ref: ${{ steps.e2e-ref.outputs.ref }}
          fetch-depth: 1
          path: e2e-tests
      - name: Confirm checkout
        working-directory: e2e-tests
        run: |
          echo "case=A"
          echo "selected=${{ needs.determine-A.outputs.branch }}"
          echo "effective=${{ steps.e2e-ref.outputs.ref }}"
          echo "HEAD=$(git rev-parse HEAD)"
          git log -1 --oneline
          echo "PASS"

  determine-B:
    uses: synonymdev/bitkit-e2e-tests/.github/workflows/determine-e2e-branch.yml@main
    with:
      app_branch: ${{ github.head_ref || github.ref_name }}
      e2e_branch_input: default-feature-branch

  resolve-B:
    needs: determine-B
    runs-on: ubuntu-latest
    steps:
      - name: Resolve e2e ref
        id: e2e-ref
        uses: synonymdev/bitkit-e2e-tests/.github/actions/resolve-e2e-ref@ci/resolve-e2e-ref
        with:
          selected: ${{ needs.determine-B.outputs.branch }}
          e2e_branch_input: default-feature-branch
      - name: Checkout e2e tests
        uses: actions/checkout@v4
        with:
          repository: synonymdev/bitkit-e2e-tests
          ref: ${{ steps.e2e-ref.outputs.ref }}
          fetch-depth: 1
          path: e2e-tests
      - name: Confirm checkout
        working-directory: e2e-tests
        run: |
          echo "case=B"
          echo "selected=${{ needs.determine-B.outputs.branch }}"
          echo "effective=${{ steps.e2e-ref.outputs.ref }}"
          echo "HEAD=$(git rev-parse HEAD)"
          git log -1 --oneline
          echo "PASS"

  determine-C:
    uses: synonymdev/bitkit-e2e-tests/.github/workflows/determine-e2e-branch.yml@main
    with:
      app_branch: ${{ github.head_ref || github.ref_name }}
      e2e_branch_input: default-feature-branch

  resolve-C:
    needs: determine-C
    runs-on: ubuntu-latest
    steps:
      - name: Pre-resolve sleep for race simulation
        run: |
          echo "Sleeping 90s before resolve (case C race)..."
          sleep 90
      - name: Resolve e2e ref
        id: e2e-ref
        uses: synonymdev/bitkit-e2e-tests/.github/actions/resolve-e2e-ref@ci/resolve-e2e-ref
        with:
          selected: ${{ needs.determine-C.outputs.branch }}
          e2e_branch_input: default-feature-branch
      - name: Checkout e2e tests
        uses: actions/checkout@v4
        with:
          repository: synonymdev/bitkit-e2e-tests
          ref: ${{ steps.e2e-ref.outputs.ref }}
          fetch-depth: 1
          path: e2e-tests
      - name: Confirm checkout
        working-directory: e2e-tests
        run: |
          echo "case=C"
          echo "selected=${{ needs.determine-C.outputs.branch }}"
          echo "effective=${{ steps.e2e-ref.outputs.ref }}"
          echo "HEAD=$(git rev-parse HEAD)"
          git log -1 --oneline
          echo "PASS"

Commit: ci: smoke cases A/B/C for resolve-e2e-ref. Push to this branch only.

@cursor

cursor Bot commented Sep 21, 2026

Copy link
Copy Markdown

Smoke workflow now runs cases A, B, and C on one push. Pushed as d1ff5ecfa (ci: smoke cases A/B/C for resolve-e2e-ref).

Open in Web Open in Cursor 

Co-authored-by: piotr-iohk <piotr-iohk@users.noreply.github.com>
@piotr-iohk

Copy link
Copy Markdown
Collaborator Author

@cursor Replace .github/workflows/resolve-e2e-ref-smoke.yml with Case-C-only (soft-fallback race). Same PR branch, no new PR.

name: resolve-e2e-ref smoke

on:
  push:
    branches:
      - 'cursor/e2e-clone-missing-branch-fallback-d3b1'
    paths:
      - '.github/workflows/resolve-e2e-ref-smoke.yml'
  pull_request:
    paths:
      - '.github/workflows/resolve-e2e-ref-smoke.yml'
  workflow_dispatch:

jobs:
  determine-C:
    uses: synonymdev/bitkit-e2e-tests/.github/workflows/determine-e2e-branch.yml@main
    with:
      app_branch: ${{ github.head_ref || github.ref_name }}
      e2e_branch_input: default-feature-branch

  resolve-C:
    needs: determine-C
    runs-on: ubuntu-latest
    steps:
      - name: Pre-resolve sleep for race simulation
        run: |
          echo "Sleeping 120s before resolve (case C race)..."
          sleep 120
      - name: Resolve e2e ref
        id: e2e-ref
        uses: synonymdev/bitkit-e2e-tests/.github/actions/resolve-e2e-ref@ci/resolve-e2e-ref
        with:
          selected: ${{ needs.determine-C.outputs.branch }}
          e2e_branch_input: default-feature-branch
      - name: Checkout e2e tests
        uses: actions/checkout@v4
        with:
          repository: synonymdev/bitkit-e2e-tests
          ref: ${{ steps.e2e-ref.outputs.ref }}
          fetch-depth: 1
          path: e2e-tests
      - name: Confirm checkout
        working-directory: e2e-tests
        run: |
          echo "case=C"
          echo "selected=${{ needs.determine-C.outputs.branch }}"
          echo "effective=${{ steps.e2e-ref.outputs.ref }}"
          echo "HEAD=$(git rev-parse HEAD)"
          git log -1 --oneline
          echo "PASS"

Commit: ci: smoke case C race only. Push immediately.

@cursor

cursor Bot commented Sep 21, 2026

Copy link
Copy Markdown

Smoke workflow is Case C only (120s race). Pushed as f1d6616b5 (ci: smoke case C race only).

Open in Web Open in Cursor 

Co-authored-by: piotr-iohk <piotr-iohk@users.noreply.github.com>
@piotr-iohk

Copy link
Copy Markdown
Collaborator Author

@cursor Delete the TEMPORARY file .github/workflows/resolve-e2e-ref-smoke.yml from this PR branch entirely. Commit: ci: remove temporary resolve-e2e-ref smoke. Push to this branch only — do not open a new PR. Stop after the file is gone.

@cursor

cursor Bot commented Sep 21, 2026

Copy link
Copy Markdown

.github/workflows/resolve-e2e-ref-smoke.yml is deleted. Pushed as 65b7897db (ci: remove temporary resolve-e2e-ref smoke).

Open in Web Open in Cursor 

Co-authored-by: piotr-iohk <piotr-iohk@users.noreply.github.com>
@piotr-iohk

Copy link
Copy Markdown
Collaborator Author

resolve-e2e-ref smoke — Android PASS (3/3)

Wiring to synonymdev/bitkit-e2e-tests/.github/actions/resolve-e2e-ref@ci/resolve-e2e-ref validated end-to-end on this branch (ubuntu-latest).

Case Result Notes
A main PASS selected=main → effective=main
B companion PASS selected=companion → effective=companion
C soft fallback PASS selected=companion → warning → effective=main (checkout green, not hard fail)

Runs:

Temporary smoke workflow removed (ci: remove temporary resolve-e2e-ref smoke). Related: e2e-tests #252, ios #767.

Co-authored-by: piotr-iohk <piotr-iohk@users.noreply.github.com>
@piotr-iohk
piotr-iohk marked this pull request as ready for review September 21, 2026 14:16
@github-actions

github-actions Bot commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

Regtest APK

Built from 1ff0fd1 (run).

Download bitkit-dev-debug universal APK (expires in 30 days).

@greptile-apps

greptile-apps Bot commented Sep 21, 2026

Copy link
Copy Markdown

RetriggerConfidence Score: 4/5

The fallback behavior appears safe to merge, but immutably pinning the new cross-repository action is recommended to prevent unreviewed CI behavior changes.

Findings

  1. P2 Security Mutable action reference

Summary

This PR resolves the selected companion E2E ref immediately before checkout, falling back to main when an inferred companion branch disappears while preserving hard failures for explicitly requested missing branches.

  • Applies the shared resolver to local, staging, and migration E2E jobs.
  • Uses the resolved ref for staging and migration Slack summaries.
  • Introduces five mutable cross-repository @main action references that should be pinned immutably.

Diagram

sequenceDiagram
    participant Workflow as Android E2E workflow
    participant Resolver as resolve-e2e-ref action
    participant Remote as bitkit-e2e-tests
    participant Checkout as actions/checkout
    Workflow->>Resolver: selected ref and dispatch input
    Resolver->>Remote: Verify selected ref
    alt Ref exists
        Resolver-->>Workflow: selected ref
    else Inferred companion ref is gone
        Resolver-->>Workflow: main
    else Explicit custom ref is missing
        Resolver-->>Workflow: Fail with error
    end
    Workflow->>Checkout: Checkout resolver output
Loading

Reviews (1) · Last reviewed commit: "ci: pin resolve-e2e-ref to main"

Comment thread .github/workflows/e2e-staging.yml
@piotr-iohk
piotr-iohk requested review from a team, ben-kaufman and pwltr and removed request for a team September 21, 2026 16:07

@pwltr pwltr 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.

Requesting changes for one correctness issue in the new ref resolver integration. The resolver must distinguish a missing branch from a Git transport failure so CI cannot silently test the fallback branch after an infrastructure error.

Comment thread .github/workflows/e2e.yml

@jvsena42 jvsena42 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Only LOW findings, posted inline, which is why this is a COMMENT and not a block. No verifier pass was run, so read them as observations.

The prior CHANGES_REQUESTED point about telling a missing ref apart from a transport failure is still live at head. The resolver runs from bitkit-e2e-tests@main, and main still sends every nonzero ls-remote status to the soft fallback (action.yml:55, determine-e2e-branch.yml:60). The fix is only in synonymdev/bitkit-e2e-tests#254, which is still open. That PR's LS_STATUS capture is correct under set -euo pipefail and only status 2 falls back. Merge order: #254 must land before or together with this PR. Merged alone, this PR adds another unguarded lookup per shard.

Checked and clean:

  • No github.head_ref or other attacker-controlled value is interpolated into a run: that this PR adds.
  • e2e_branch_input is the same at every call site and matches the determine input.
  • A missing custom branch still fails hard, and an empty selected resolves to main without a network call.
  • The temporary smoke workflow is removed at head.

Pre-existing and outside this PR: determine-e2e-branch.yml:30 in bitkit-e2e-tests interpolates inputs.app_branch straight into bash, and #254 does not change that line. It should be raised in that repo.

Comment thread .github/workflows/e2e-staging.yml
Comment thread .github/workflows/e2e_migration.yml
Co-authored-by: piotr-iohk <piotr-iohk@users.noreply.github.com>
@piotr-iohk

Copy link
Copy Markdown
Collaborator Author

@jvsena42 thanks — addressed:

  1. Merged ci: fail e2e ref lookup unless the branch is missing bitkit-e2e-tests#254 so fail-closed ls-remote (status 2 only) is on @main.
  2. Softened slack-report Resolve on staging + migration: continue-on-error: true and Checkout ref: ${{ steps.e2e-ref.outputs.ref || 'main' }} (1ff0fd1).

Re-requesting Phil once iOS twin has the same soften.

@jvsena42 jvsena42 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Delta since ac52b617 (1ff0fd123): no findings. The LOW is fixed. The slack-report resolve step has continue-on-error: true, and checkout falls back to main. synonymdev/bitkit-e2e-tests#254 is merged, so the fail-closed shard lookups are live on @main, and the earlier transport-vs-missing-ref concern no longer depends on merge order.

@pwltr pwltr 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.

Re-reviewed after synonymdev/bitkit-e2e-tests#254 merged. The shared resolver now distinguishes missing refs from transport failures, and this head keeps Slack reporting available when its non-critical re-resolution fails. The prior blocker is resolved.

@piotr-iohk
piotr-iohk merged commit 429cdd5 into master Sep 22, 2026
19 checks passed
@piotr-iohk
piotr-iohk deleted the cursor/e2e-clone-missing-branch-fallback-d3b1 branch September 22, 2026 13:27
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.

4 participants