feat(ci): install the canonical @fuze entrypoint - #190
Draft
izzywdev wants to merge 3 commits into
Draft
Conversation
…pr -> fuze-auto-pr Adds .github/workflows/fuze.yml, the canonical @fuze handler from FuzeSDLC. Until now @fuze was answered in exactly one repo (FuzeInfra) while this repo's issue templates already say "@fuze -- please triage", so the mention landed nowhere and looked indistinguishable from an agent that had not replied yet. No cluster credential of any kind: the privileged, cluster-capable variant is a separate template installed only where the manifest declares clusterOps.enabled, which only FuzeInfra does. Verified on this repo -- zero privileged identifiers in the rendered entrypoint. Also renames claude-auto-pr.yml -> fuze-auto-pr.yml (naming only; it makes no LLM call). The old file is removed rather than left beside the new one, which would double-fire on a push to claude/**. The trigger now covers both claude/** and fuze/**; no existing prefix was dropped. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #190 +/- ##
=======================================
Coverage 41.06% 41.06%
=======================================
Files 81 81
Lines 6171 6171
Branches 252 250 -2
=======================================
Hits 2534 2534
Misses 3634 3634
Partials 3 3
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
…pr -> fuze-auto-pr Adds .github/workflows/fuze.yml, the canonical @fuze handler from FuzeSDLC. Until now @fuze was answered in exactly one repo (FuzeInfra) while this repo's issue templates already say "@fuze -- please triage", so the mention landed nowhere and looked indistinguishable from an agent that had not replied yet. No cluster credential of any kind: the privileged, cluster-capable variant is a separate template installed only where the manifest declares clusterOps.enabled, which only FuzeInfra does. Verified on this repo -- zero privileged identifiers in the rendered entrypoint. Also renames claude-auto-pr.yml -> fuze-auto-pr.yml (naming only; it makes no LLM call). The old file is removed rather than left beside the new one, which would double-fire on a push to claude/**. The trigger now covers both claude/** and fuze/**; no existing prefix was dropped. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…pr -> fuze-auto-pr Adds .github/workflows/fuze.yml, the canonical @fuze handler from FuzeSDLC. Until now @fuze was answered in exactly one repo (FuzeInfra) while this repo's issue templates already say "@fuze -- please triage", so the mention landed nowhere and looked indistinguishable from an agent that had not replied yet. No cluster credential of any kind: the privileged, cluster-capable variant is a separate template installed only where the manifest declares clusterOps.enabled, which only FuzeInfra does. Verified on this repo -- zero privileged identifiers in the rendered entrypoint. Also renames claude-auto-pr.yml -> fuze-auto-pr.yml (naming only; it makes no LLM call). The old file is removed rather than left beside the new one, which would double-fire on a push to claude/**. The trigger now covers both claude/** and fuze/**; no existing prefix was dropped. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Installs the canonical
@fuzeentrypoint from FuzeSDLC. Part of a fleet-wide rollout — depends on izzywdev/FuzeSDLC#282, merge that first.Why this repo needs it
@fuzewas answered in exactly one repo (FuzeInfra). This repo's issue templates already say@fuze — please triage.and the baseline documents@fuzeas the delegation handle, so the mention landed nowhere — and a mention nothing answers is indistinguishable from an agent that simply has not replied yet.What lands
.github/workflows/fuze.yml— the canonical handler. Mention-triggered on issues, issue comments, PR reviews and review comments; gated to OWNER/MEMBER/COLLABORATOR; loop-guarded; deduped per issue.No cluster credential of any kind. FuzeInfra's original is deliberately cluster-capable (prod kubeconfig, kubectl/helm/terraform, in-cluster runner). Copying that verbatim to 22 repos would have handed prod cluster credentials to every product repo. It is split instead: the privileged variant is a separate template installed only where
.fuze/manifest.jsondeclaresclusterOps.enabled: true, which only FuzeInfra does. Verified on this repo before this commit was made —grep -cE 'KUBE_CONFIG|terraform|runs-on: staging'over the rendered entrypoint returns 0, and nofuze-cluster.ymlexists here.LLM routing, not a hardcoded endpoint. The original pins
ANTHROPIC_BASE_URLto an in-cluster service DNS name that does not resolve from a GitHub-hosted runner — a verbatim copy would have failed DNS here. This routes through./.github/actions/fuze-code-action→./.github/actions/llm-endpoint, which probes the gateway and falls back to a direct vendor key.allowed-botsis set to a named list (fuzeone-bot,github-actions,fuze-agent, never*). Automated workflows legitimately comment@fuzeto hand work over, and without this claude-code-action aborts ~1s in with "Workflow initiated by non-human actor" — a failure that reads in a skimmed log exactly like a provider outage.claude-auto-pr.yml→fuze-auto-pr.ymlNaming only. That workflow makes no LLM call — it is
gh pr createand nothing else. Nothing was routed through LiteLLM and nothing was added.The old file is removed, not left beside the new one: both trigger on a push to
claude/**and both callgh pr createfor the same branch, so keeping it is a duplicate-PR bug rather than a rename. The new trigger covers bothclaude/**(unchanged — claude-code-action still names its branches that way) andfuze/**; no prefix was dropped.This repo's copy was a stale install-time snapshot, not a deliberate fork (only FuzeInfra's carries a
fuze:forkstamp), so the replacement is also a strict upgrade — it brings the agent-PR identity chain (fuze-agent App token → bot PAT →GITHUB_TOKEN) that the old copy predates.Required-check safety, verified across all 22 governed repos: no ruleset anywhere names a context emitted by this workflow. The complete distinct required-check set is 15 strings, none of them
open-draft-prorAuto-PR from claude branches; no classic branch protection exists anywhere, so that set is complete. Structurally consistent too — the workflow triggers only onpush, so it can never report on apull_requestto the default branch.Verification done on this repo before committing
grepfor the three privileged identifiers in the rendered entrypoint → 0 hits.fuze-cluster.ymlabsent.actionlintexit 0 on both files.runs-on:rendered from this repo's declaredci.runner, not the template's default — aruns-onnaming a pool that does not exist does not fail, it queues forever.engine.reconcile→lib.render), so both files carry afuze:managedmarker and.fuze/installed.jsonrecords them. Identical bytes to whatsdlc-bootstrapwould write.Not proven, and not provable right now: that a live
@fuzemention completes. The fleet'sANTHROPIC_API_KEYis currently invalid (not merely exhausted), and mention mode deliberately does not attempt the OpenAI/Gemini rungs — so every@fuze/@claudemention hard-fails today regardless of routing. This PR fixes where the mention lands, not whether the credential works.Why a PR and not a sync
governance-synccannot push.github/workflows/**today and reports success when the push fails — 16 of 22 repos lack the code path entirely, and in the other 6 the commit-back is rejected400 Duplicate header: "Authorization"while a missingset -o pipefailturns the failure green. See izzywdev/FuzeSDLC#283.