From 968edc5a777c7b52892b9d35cc05209a6477eb64 Mon Sep 17 00:00:00 2001 From: Thomas Kosiewski Date: Wed, 4 Nov 2026 13:40:14 +0000 Subject: [PATCH 1/3] ci: give the lifecycle-model shares 90 minutes The model of #324 has about twice the states of main's. On its head the four shares took 38, 40, 46 and 48 min of the 50 min timeout, and a share cannot be shorter than its longest run. --- .github/workflows/ci.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2852aa39..65c92028 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -221,13 +221,15 @@ jobs: # Model-checks the session lifecycle with the verify-session-lifecycle # skill. Share 1 checks that coverage.json matches the facts and the - # covered code. The TLC runs took 63 min in one job of 4 vCPUs and take 13 - # to 17 min in each of 4 shares. They run only when coverage.json differs - # from the base, which every change to the model, its scripts, the covered - # code or a fact needs. + # covered code. The TLC runs took 63 min in one job of 4 vCPUs and took 13 + # to 17 min in each of 4 shares. The model of #324 has about twice the + # states: its shares took 38 to 48 min, and a share cannot be shorter than + # its longest run, so the job has 90 min. They run only when coverage.json + # differs from the base, which every change to the model, its scripts, the + # covered code or a fact needs. lifecycle-model: runs-on: ubuntu-latest - timeout-minutes: 50 + timeout-minutes: 90 strategy: fail-fast: false matrix: From a3e6590ff4fc3dbae8bdf590e8d174d3e0b5c26b Mon Sep 17 00:00:00 2001 From: Thomas Kosiewski Date: Wed, 4 Nov 2026 13:43:32 +0000 Subject: [PATCH 2/3] ci: split the lifecycle-model job into 8 shares that start all their runs at once A timeout raise alone leaves #324's 48 min share at the merge queue's 60 min limit. check.sh waits for each batch of CHECK_JOBS runs, so a share took the sum of its longest runs. With 8 shares and CHECK_JOBS 12, every share starts all its runs at once and takes about as long as its longest run. The job timeout goes to 45 min. --- .github/workflows/ci.yml | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 65c92028..9d08c4a7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -223,18 +223,21 @@ jobs: # skill. Share 1 checks that coverage.json matches the facts and the # covered code. The TLC runs took 63 min in one job of 4 vCPUs and took 13 # to 17 min in each of 4 shares. The model of #324 has about twice the - # states: its shares took 38 to 48 min, and a share cannot be shorter than - # its longest run, so the job has 90 min. They run only when coverage.json - # differs from the base, which every change to the model, its scripts, the - # covered code or a fact needs. + # states, and its 4 shares took 38 to 48 min. check.sh starts CHECK_JOBS + # runs at a time and waits for all of them before the next ones, so a share + # took as long as the sum of its longest runs. Now each of 8 shares starts + # all its runs at once (with the model of #324, 10 to 12 runs, of which at + # most 2 are long, on 4 vCPUs) and takes about as long as its longest run. + # They run only when coverage.json differs from the base, which every + # change to the model, its scripts, the covered code or a fact needs. lifecycle-model: runs-on: ubuntu-latest - timeout-minutes: 90 + timeout-minutes: 45 strategy: fail-fast: false matrix: - shard: [1, 2, 3, 4] - name: lifecycle-model (${{ matrix.shard }}/4) + shard: [1, 2, 3, 4, 5, 6, 7, 8] + name: lifecycle-model (${{ matrix.shard }}/8) steps: - name: Check out repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 @@ -269,8 +272,8 @@ jobs: - name: Model-check the session lifecycle if: steps.inputs.outputs.tlc == 'true' env: - CHECK_JOBS: '4' - CHECK_SHARD: ${{ matrix.shard }}/4 + CHECK_JOBS: '12' + CHECK_SHARD: ${{ matrix.shard }}/8 run: .agents/skills/verify-session-lifecycle/scripts/check.sh quality-gates: From 64ead8d4bf3415a3fcc82d6f9bedd70b11ca7f48 Mon Sep 17 00:00:00 2001 From: Thomas Kosiewski Date: Wed, 4 Nov 2026 14:28:51 +0000 Subject: [PATCH 3/3] ci: give the lifecycle-model shares 55 minutes, after the measured 8-share times On the model of #324 the 8 shares took 15 to 43 min. The 43 min share holds only the longest run, which TLC checks with 1 worker, so no share split makes it shorter, and 45 min left too little room. --- .github/workflows/ci.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9d08c4a7..6e223cc6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -227,12 +227,14 @@ jobs: # runs at a time and waits for all of them before the next ones, so a share # took as long as the sum of its longest runs. Now each of 8 shares starts # all its runs at once (with the model of #324, 10 to 12 runs, of which at - # most 2 are long, on 4 vCPUs) and takes about as long as its longest run. - # They run only when coverage.json differs from the base, which every - # change to the model, its scripts, the covered code or a fact needs. + # most 2 are long, on 4 vCPUs) and takes about as long as its longest run: + # 15 to 43 min, where the 43 min share holds only the longest run, which + # TLC checks with 1 worker. They run only when coverage.json differs from + # the base, which every change to the model, its scripts, the covered code + # or a fact needs. lifecycle-model: runs-on: ubuntu-latest - timeout-minutes: 45 + timeout-minutes: 55 strategy: fail-fast: false matrix: