Repository navigation
Closed
5 / 55 of 5 issues completedClosed
5 / 55 of 5 issues completed
Copy link
Labels
help wantedDenotes an issue that needs help from a contributor. Must meet "help wanted" guidelines.Denotes an issue that needs help from a contributor. Must meet "help wanted" guidelines.triage/acceptedIndicates an issue or PR is ready to be actively worked on.Indicates an issue or PR is ready to be actively worked on.
Description
Use case
We run a hive on torch-spyre/spyre-inference and torch-spyre/torch-spyre. We want two things at once:
- Our review perspectives (which ones run, and each one's focus text) kept in our repo, edited by maintainers through normal PRs, and live-reloaded by the hive.
- The stock
reviewer-queue.md, unforked, so we keep getting upstream changes to the protocol it teaches:hive-reviewrelay usage, the per-perspective verdict-array schema,--record-verdict, the routing markers, and[hive-reviewed]skips.
Today definition_source and prompt_source can live-link agent fields and kick templates. But review.perspectives and review.perspective_prompts are hive config, editable only from the dashboard or the overlay. The workarounds we tried each break one of the two goals:
- Short
perspective_promptsthat point at checklist files in the repo ("apply.hive/review/x.md"). The checklist text can be worked on together, but adding or removing a perspective still needs a hive config edit, so the set itself can't be changed through PRs. - Forking
reviewer-queue.mdand listing the perspectives in it. That shadows every upstream protocol fix. It doesn't work anyway, because the relay validates verdicts against the hive's configured set, not the prompt.
Proposed solution
Add a hive-level review.perspectives_source that mirrors DefinitionSourceConfig:
review:
combined_perspectives: true # stays operator-owned
perspectives_source:
owner: torch-spyre
repo: spyre-inference
path: .hive/review-perspectives.yaml
ref: main # optional; default branch otherwise# .hive/review-perspectives.yaml
kind: ReviewPerspectives
perspectives:
- name: correctness # built-in; no focus = built-in text
- name: security
- name: intent-alignment
- name: spyre-constraints # custom
focus: "Head size a multiple of 64; fp16 only; DP>1 and bf16 with TP>1 rejected."
- name: spyre-numerics
focus: "Silent CPU fallbacks (FallbackWarning) and fp16 accumulation-order changes."Suggested behaviour, reusing what defsrc already does:
- Same trust gate. Allowed only for repos on
GitHubPromptAllowed, the allowlist that can only be set in the base config. - Same resolve points and fallbacks. Fetched at startup and on every config reload. If the fetch is denied, there's no client, it errors, or the file is malformed: use the last-known-good document, then inline
review.perspectives. A document that failsNewPerspectiveSetvalidation should keep the last good set and raise a visible warning, rather than quietly falling back to the five built-ins. - Same apply path as a dashboard edit. The GitHub client caches the perspective set at boot (
installReviewRelaySettings, theReviewConfigAppliedhook). A newly resolved set has to go through that path, or the relay keeps validating verdicts against the old set. - Safe changes to the set. Linking makes changes to the set routine rather than rare, so the handling from review: changing review.perspectives strands mid-review PRs: heads wait forever on removed perspectives #14905 (heads waiting on removed perspectives) needs to cover this path too, and probably needs a test.
- Dashboard. Review Gate → Perspectives shows the linked source and is read-only while linked, the same way linked agents are shown.
- Scope. The file covers names and focus text only.
combined_perspectives,plan_matchandmax_perspectives_per_prare cost and dispatch settings that should stay with the operator, but we're open to other views.
${REVIEW_PERSPECTIVES} and every other consumer would read the resolved set, so reviewer-queue.md doesn't change.
Alternatives considered
- A per-agent
spec.reviewPerspectivesonAgentDefinition, live-linked throughdefinition_source. This was our first idea. But the set is read per PR: dispatch planning, head aggregation and merge-eligibility, and relay validation (client.SetPerspectives). With several reviewer agents or review heads, it becomes unclear whose set governs a PR. - A per-repo source. Read the reviewed repo's own
.hive/review-perspectives.yamlfrom its default branch, keyed by repo. This is arguably the most natural fit, since perspectives describe the code being reviewed, and a hive covering several repos could use a different set per repo. It's a bigger change because every consumer would need a set keyed by repo. It must read the default branch, never the PR head, or a PR could edit the rules it's reviewed against. It could be a later extension that uses the same file format. - Pointer prompts plus in-repo checklists. Workable for focus text, but adding or removing a perspective still needs a hive config edit (see Use case).
- Forking
reviewer-queue.md. Loses upstream protocol changes, and the relay's validation makes it ineffective anyway.
Scope and compatibility
- Target branch or version: v5. We run 5.217.x on the stable channel. Landing in v6 first is fine.
- Operator impact: opt-in. If
perspectives_sourceisn't set, behaviour is unchanged. - Contributor/agent impact: none. Templates are unchanged and
${REVIEW_PERSPECTIVES}renders from the resolved set. - Migration or backwards-compatibility concerns: none. One question for maintainers: when both inline
perspectivesandperspectives_sourceare set, we suggest the source wins and inline acts as the fallback. Rejecting the combination would also be reasonable.
Additional context
- review: changing review.perspectives strands mid-review PRs: heads wait forever on removed perspectives #14905: transition hazard when
review.perspectiveschanges. docs/agent-configuration.md→ "Live-linked agent definitions (definition_source)": the trust gate and fallback model this mirrors.docs/review-swarm.md: the perspectives and combined mode.- Consumers of the hive-wide set in v5:
cmd/hive/main_sweeps.go(reviewPerspectiveSet,installReviewRelaySettings, dispatch and aggregation wiring),pkg/scheduler/policy_overlays.go(${REVIEW_PERSPECTIVES}),pkg/github/review_request_watcher.go(relay validation and confidence line),pkg/review/review_heads_*.go.
Metadata
Metadata
Assignees
Labels
help wantedDenotes an issue that needs help from a contributor. Must meet "help wanted" guidelines.Denotes an issue that needs help from a contributor. Must meet "help wanted" guidelines.triage/acceptedIndicates an issue or PR is ready to be actively worked on.Indicates an issue or PR is ready to be actively worked on.
Activity
hivecommons-hive commentedon Nov 12, 2026
Thanks — this hive only works issues from OWNER, MEMBER, COLLABORATOR automatically. A maintainer can admit this one by adding the label
triage/accepted(configured inissue_filter.reporter_trust.untrusted_require_labels). Until then the hive will not claim, label, or open PRs for it. See https://github.com/hivecommons/hive/blob/HEAD/GOVERNANCE.md#reporter-trust-and-escalation for what these terms mean and how to become a trusted reporter.hivecommons-hive commentedon Nov 12, 2026
This feature changes the config, adds a resolver, changes the review relay apply path, and touches the dashboard and docs. That is too much for one PR, so I've split it into ordered child issues. Each one is meant to land as a single PR against v5 touching at most five files. Each later child is blocked by the one before it:
review.perspectives_sourceconfig field, thekind: ReviewPerspectivesparser (pkg/perspsrc, validated withNewPerspectiveSet), and aReviewConfig.EffectivePerspectives()accessorperspsrcresolver. It uses the same seed-onlyGitHubPromptAllowedgate asdefinition_sourceand keeps the last good set (with a warning) when the document is malformed.reviewPerspectiveSetand${REVIEW_PERSPECTIVES}read the resolved set.defsrc.ApplyToConfig, then reinstall the relay set viainstallReviewRelaySettings(the same path asReviewConfigApplied). Adds a review: changing review.perspectives strands mid-review PRs: heads wait forever on removed perspectives #14905 regression test for heads waiting on a perspective that was removed.review-swarm.md,agent-configuration.md,hive.yaml.example) and a changelog fragment.Decision taken by hive: source wins over inline review.perspectives; inline acts as fallback (additive, backward compatible).
Decision taken by hive:
combined_perspectives,plan_matchandmax_perspectives_per_prstay operator-owned. The linked file holds perspective names and focus text only.The next kick cycle picks up the children in this order. This parent stays open until all five are done.
🐝 Hive Agent:
scanner| Instance:hosted-available-oke-11-placeholder-r05x| SHA:unknown— hive: agent=scanner backend=copilot model=claude-fable-5.1 copilot=1.0.88
hivecommons-hive commentedon Nov 12, 2026
PR #17994 covers this issue: #17994
The PR body says this is partial/non-closing work (
Refs/Part ofor leave-open wording), so Hive will not add a closing keyword. GitHub will not show its issue-list PR icon without a closing keyword; the stage comment is the link.12 remaining items
✨ dashboard: show linked review perspectives read-only in Review Gate
✨ dashboard: show linked review perspectives read-only in Review Gate (…
✨ dashboard: show linked review perspectives read-only in Review Gate (…
clubanderson commentedon Nov 13, 2026
Live-linked review perspectives (
review.perspectives_source+kind: ReviewPerspectives) is complete on v5. All five children are closed:pkg/perspsrc): ✨ feat(review): add review.perspectives_source config and ReviewPerspectives document parser #17994EffectivePerspectives: ✨ review: add perspsrc resolver with last-known-good fallback #18011PUT /api/config/reviewanswers 409 for inline perspective edits while linked: ✨ dashboard: show linked review perspectives read-only in Review Gate #18072review-swarm.md,agent-configuration.md),hive.yaml.exampleblock and changelog fragment: 📖 docs: document review.perspectives_source #18078v5 merges do not auto-close issues, so closing by hand.
github-actions commentedon Nov 13, 2026
@joerunde this issue was closed by @clubanderson as completed.
If this was closed by a merged PR, the fix only takes effect once it ships in a tagged release and your deployment updates to it — check your running version against the fix before concluding the fix failed.
If you are still seeing the problem, comment
/reopenand it will be reopened for you — you do not need write access. Please add what you are still observing (running version, logs, steps) so it is not closed the same way again.