You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Browse filesBrowse the repository at this point in the historyBrowse files
authored
fix(migration): give each job its own credential tracker (#1295 follow-up, #793 collision) (#1325)
Follow-up to #1324, which routed a blocked run to a `provider-credentials` tracker
so a drained provider account would stop being filed as a Langflow migration
failure. That tracker was **shared by both jobs**, which made it a fresh instance
of the collision PR #793 found on run #101: the two jobs of `migration-test.yml`
run in parallel, and the one that goes green closes whatever open issue carries the
label — including one the other job filed a minute earlier on a failure that is
still live. Reaching the provider from the compose job says nothing about what the
API job saw, and vice versa.
- The label is now per job (`provider-credentials-api` / `provider-credentials-compose`,
both self-provisioned on first use), composed in one place by `issue_label(job)`.
- `--job` is REQUIRED on the CLI with `choices=("api", "compose")`: a default would
hand both jobs one tracker, and a typo would open a third nobody watches.
- Each `Close issue on success` step closes only its own job's credential label. The
`migration-test` half keeps its current shared behaviour — that is #793's scope,
not this change's.
The cost is that a drained account files two issues, one per job. That is noise
which self-clears on the next good run, where the alternative silently closes a
live blocker.
Validation: 69 tests in the Python unit lane (3 new), including a structural guard
that pins an ABSENCE — neither job's half of the workflow may reference the other's
credential label or pass the other's `--job` — because these two jobs are
near-copies and copy-paste between them is exactly how a per-job label degrades
back into a shared one. All 4 mutations attempted were killed: a shared label, an
unvalidated job name, the compose job closing the API job's tracker, and the compose
pre-flight claiming to be the API job. Probed live against the still-drained key:
both jobs exit 1 with their own label.
Co-authored-by: Rafael <rafael@oriontech.me>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: tests/github-workflows/migration/README.md
+3-1Lines changed: 3 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -50,7 +50,9 @@ On failure, the workflow opens or updates an issue in the repository, including
50
50
| Verdict | Tracker | Meaning |
51
51
|---|---|---|
52
52
|`FAILED`|`migration-test`| Something about the migration is broken — a claim about Langflow. |
53
-
|`BLOCKED (provider credentials)`|`provider-credentials`| The witness flow never reached the model provider, so **nothing about the migration was measured**. Not a claim about Langflow; fix the account or the key. |
53
+
|`BLOCKED (provider credentials)`|`provider-credentials-api` / `provider-credentials-compose`| The witness flow never reached the model provider, so **nothing about the migration was measured**. Not a claim about Langflow; fix the account or the key. |
54
+
55
+
The credential tracker is **per job**, and each job closes only its own. The two jobs run in parallel, so a shared label lets the one that goes green close the issue the other just filed — the collision PR #793 found on run #101, where the API job's pass closed the compose job's live failure. The cost is that a drained account files two issues; they self-clear on the next good run, whereas the alternative silently closes a live blocker.
54
56
55
57
The split exists because both are red and only one is about the product. A billing outage filed under `migration-test` gets closed by the next green run with *"Migration test passed"*, leaving a migration bug in the history that never existed. A green run closes **both** trackers, each with wording about what it actually proved.
0 commit comments