Repository navigation
feat(report-lane-outcome): record why a fallback credential ran - #834
Conversation
Add an optional fallback-reason input, credit-stop or no-key, printed as fallback=<reason> right after credential= on the lane record. Any other non-empty value fails the step before it reports. intake-triage's subscription job passes it from the claude job's lane-class and credential-present outputs, and the leg parity test allows that one difference. Closes #806 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 53s —— View job Security review
No security issues found. Notes from the review (informational, not findings):
claude-lane-summary: lane=claude-security-review sha=5daaf70d25b429429c2dcb8653bf81fe1e8b1abf run=39502188889 |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Claude finished @kyle-sexton's task in 4m 41s —— View job Code review complete
SummaryNo blocking or high-signal findings. This is a clean, well-tested change:
Not independently verified: I could not execute Unread: no PR body contract: compliant — opens with claude-lane-summary: lane=claude-review sha=5daaf70d25b429429c2dcb8653bf81fe1e8b1abf run=39502188889 |
|
claude-security-review has reviewed this pull request through 5daaf70; a later push is reviewed from there. |
|
claude-review has reviewed this pull request through 5daaf70; a later push is reviewed from there. |
Closes #806
Summary
When intake-triage (or any caller of the two-job pattern) falls back to the subscription token, the run's only lane record comes from the subscription job and does not say why it ran. This adds a machine-readable
fallback=<reason>token so a credit stop on a role's API key shows in the lane record.Fix
report-lane-outcome: new optionalfallback-reasoninput,credit-stoporno-key.recordTokensprintsfallback=<reason>right aftercredential=, only for a value inFALLBACK_REASONS. The step script fails (core.setFailed, naming the allowed values, before any annotation or output) on any other non-empty value. The value reaches the script through env only.intake-triage.yml: the subscription job's "Report triage outcome" step passesfallback-reason: ${{ needs.claude.outputs.lane-class == 'credit-stop' && 'credit-stop' || needs.claude.outputs.credential-present == 'false' && 'no-key' || '' }}. That is awith:input on auses:step, so the subscription job still writes noneeds.value into arun:orscript:.intake-triage-legs.test.cjs: the parity test strips exactly this one input from the subscription job (after asserting its exact text), and a new test evaluates it: credit-stop givescredit-stop, an empty key givesno-key, anything else gives empty.Out of scope, per the brief: an
authvalue; the claude-code-plugins follow-ups (pr-verify passing the input, the morning brief counting the token).Verification
node --test .github/scripts/*.test.cjs .github/actions/*/*.test.cjs: 632 pass, 0 fail.credential=... fallback=..., out-of-vocabulary value fails the step with no outputs), and 2 in the legs test (parity and expression evaluation) before the workflow edit.Related
🤖 Generated with Claude Code