mirror of
https://github.com/LibreQoE/LibreQoS.git
synced 2026-09-03 20:52:53 -05:00
Chore: Add Codex subagents and review workflow
This commit is contained in:
@@ -61,6 +61,9 @@ If the page is served through the templated/authenticated router, use `%CACHEBUS
|
||||
- Run `src/rust/lqosd/src/node_manager/js_build/test-build-contract.sh`
|
||||
- Run `src/rust/lqosd/src/node_manager/js_build/esbuild.sh`
|
||||
- For broader local iteration, run `src/rust/lqosd/dev_build.sh`
|
||||
- Check the affected page in both dark and light themes.
|
||||
- Check the affected page in a narrow/mobile layout if the structure changed.
|
||||
- After UI changes, invoke `$libreqos-review-subagents-workflow` (include `helen`).
|
||||
|
||||
## Notes
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@ Use this skill for packaging and shipped-file work.
|
||||
|
||||
- Run `bash -n` on changed shell scripts.
|
||||
- If node_manager assets are involved, run `src/rust/lqosd/src/node_manager/js_build/test-build-contract.sh`.
|
||||
- During large sessions, invoke `$libreqos-review-subagents-workflow` (and `helen` if UI changed).
|
||||
- If you did not run a full package build, say so explicitly.
|
||||
- Before finishing, answer this directly: "Does `src/build_dpkg.sh` include every new required file?"
|
||||
|
||||
|
||||
@@ -40,6 +40,7 @@ Use this skill for Python work under `src/`.
|
||||
- `python3 -m unittest test_virtual_tree_nodes.py`
|
||||
- If changing scheduler/helpers, prefer the smallest focused unittest set that covers the touched logic.
|
||||
- If changing generated file behavior, review both the writer and the reader side in the same change.
|
||||
- During large sessions, invoke `$libreqos-review-subagents-workflow` (and `helen` if UI changed).
|
||||
|
||||
## References
|
||||
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
---
|
||||
name: libreqos-review-subagents-workflow
|
||||
description: Project workflow for invoking the local review sub-agents Thomas, Helen, Beck, and Jonas during LibreQoS coding sessions. Use when code changes need recent-diff review for Rust quality, accessibility, test coverage, scope control, and algorithmic sanity.
|
||||
---
|
||||
|
||||
# LibreQoS Review Sub-Agents Workflow
|
||||
|
||||
Use this skill when code changes in this repo need the project-standard reviewer pass.
|
||||
|
||||
## Agents
|
||||
|
||||
- `thomas`: adversarial review of recent code changes for Rust best practices, safety, idiomatic style, and warning or Clippy suppression
|
||||
- `beck`: review of recent code changes for meaningful unit-test coverage and weak or pointless tests
|
||||
- `jonas`: review of recent code changes for scope drift, unrelated cleanup, and algorithmic or performance mistakes
|
||||
- `helen`: review of recent user-interface changes for accessibility, ADA issues, missing alt text, missing labels, missing ARIA semantics, and related barriers
|
||||
|
||||
## Required Invocation Rules
|
||||
|
||||
- During large sessions, invoke `thomas`, `beck`, and `jonas` together after substantial implementation batches.
|
||||
- Always invoke `thomas`, `beck`, and `jonas` before the final user-facing completion message when code changed in the session.
|
||||
- After any user-interface change, invoke `helen`.
|
||||
- If the session includes both UI and code changes, invoke `helen` alongside the others at the same review checkpoint.
|
||||
|
||||
## What Counts As A Large Session
|
||||
|
||||
Treat a session as large when any of these are true:
|
||||
|
||||
- the diff is more than a tiny one-file tweak
|
||||
- multiple files or crates changed
|
||||
- you finished a meaningful implementation batch and are about to continue layering on more work
|
||||
- the blast radius is not obvious from a quick glance
|
||||
|
||||
## Invocation Pattern
|
||||
|
||||
1. After a substantial implementation batch, spawn `thomas`, `beck`, and `jonas` in parallel against the current recent changes.
|
||||
2. If UI changed, spawn `helen` at the same checkpoint.
|
||||
3. Use the current worktree diff as the default scope. If the worktree is clean but the session included recent commits, pass an explicit commit or diff range.
|
||||
4. Review the findings, fix valid issues, or record why a concern is intentionally accepted.
|
||||
5. Before final completion, rerun any reviewer whose scope changed since the prior pass.
|
||||
|
||||
## Required Prompt Shape
|
||||
|
||||
When spawning a reviewer, include:
|
||||
|
||||
- the review scope:
|
||||
- current worktree diff, or
|
||||
- explicit commit or diff range
|
||||
- the intent of the change
|
||||
- any area-specific context that helps the reviewer load the right project skills
|
||||
|
||||
Example prompt for `thomas`, `beck`, and `jonas`:
|
||||
|
||||
```text
|
||||
Review the recent changes for this session. Use the current worktree diff as the review scope unless I specify a narrower range. The goal of the change is: <brief intent>.
|
||||
```
|
||||
|
||||
Example prompt for `helen`:
|
||||
|
||||
```text
|
||||
Review the recent user-interface changes for this session. Use the current worktree diff as the review scope unless I specify a narrower range. Focus on accessibility and other user barriers.
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- These agents are read-only review surfaces, not replacements for targeted tests, `cargo check`, `cargo clippy`, or visual verification.
|
||||
- For tiny trivial edits, an intermediate review pass may be unnecessary, but the final required review still applies whenever code changed.
|
||||
- In this repo, the subagent definitions live under `.codex/agents/*.toml`.
|
||||
@@ -0,0 +1,4 @@
|
||||
interface:
|
||||
display_name: "LibreQoS Review Sub-Agents"
|
||||
short_description: "Thomas, Helen, Beck, and Jonas workflow"
|
||||
default_prompt: "Use $libreqos-review-subagents-workflow to invoke the local review sub-agents during implementation and before final completion."
|
||||
@@ -19,12 +19,14 @@ Use this skill for Rust work in this repo.
|
||||
2. Identify whether the touched crate is a workspace member.
|
||||
3. Validate the touched crate with `cargo check -p <crate>` when possible.
|
||||
4. Run relevant tests.
|
||||
5. Run `cargo clippy` for the touched crate and fix actionable issues.
|
||||
6. If dependencies changed, also run:
|
||||
5. Run `cargo clippy -p <crate> -- -D warnings` when practical and fix actionable issues.
|
||||
6. During large sessions, invoke `$libreqos-review-subagents-workflow` (and `helen` if UI changed).
|
||||
7. If dependencies changed, also run:
|
||||
- `cargo machete`
|
||||
- `cargo audit`
|
||||
- `cargo tree`
|
||||
7. If the change adds, renames, moves, or newly depends on runtime files, static assets, helper scripts, service files, templates, or install-time artifacts, review and update `src/build_dpkg.sh` in the same change.
|
||||
8. If the change adds, renames, moves, or newly depends on runtime files, static assets, helper scripts, service files, templates, or install-time artifacts, review and update `src/build_dpkg.sh` in the same change.
|
||||
9. Use workspace-wide commands only for cross-cutting changes or shared dependency changes.
|
||||
|
||||
## Preferred Rust Direction
|
||||
|
||||
@@ -42,4 +44,9 @@ Use this skill for Rust work in this repo.
|
||||
- Existing code does not fully match all preferred conventions yet. Treat these as direction for new and touched code, not as a reason to perform unrelated cleanup.
|
||||
- Build/package scripts live under `src/`, not repo root.
|
||||
- `src/build_dpkg.sh` is a functional packaging manifest for shipped installs. Forgetting to update it is a common failure mode; treat package-content drift as a bug.
|
||||
- For Insight/LTS2 integrations, preserve the existing external protocol and identity values unless the task explicitly covers coordinated changes on both sides. Unilateral protocol drift is a breaking change.
|
||||
- Treat protocol and identity surfaces as compatibility boundaries:
|
||||
- Prefer additive-only changes (new optional fields, `#[serde(default)]` where applicable).
|
||||
- Assume rolling upgrades where old/new binaries may coexist unless a coordinated restart is explicitly planned.
|
||||
- Do not rename fields, change types, or change semantics without explicit versioning and a coordinated rollout plan.
|
||||
- Keep compatibility shims at the boundary, make them explicit, and test them; avoid “fallbacks everywhere”.
|
||||
- Avoid per-request `info!` logging in hot paths; prefer `debug!`, sampling, or aggregate counters.
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
name = "beck"
|
||||
description = "Beck: read-only reviewer for recent changes with a focus on meaningful unit test coverage and weak or pointless tests."
|
||||
model = "gpt-5.4-mini"
|
||||
model_reasoning_effort = "high"
|
||||
sandbox_mode = "read-only"
|
||||
developer_instructions = """
|
||||
You are Beck, the test-coverage review agent for LibreQoS. Stay in review mode. Do not edit files.
|
||||
|
||||
Start by reading AGENTS.md. Consult relevant project skills under .agents/skills/ for the changed area.
|
||||
|
||||
Review the recently changed code first. Default definition of \"recently changed\" is:
|
||||
1. current tracked and untracked worktree changes
|
||||
2. if the worktree is clean or the caller asks for it, the most recent local commits or diff range the caller identifies
|
||||
|
||||
Your job is to inspect the changed code for meaningful test coverage.
|
||||
|
||||
Insist on tests when both are true:
|
||||
- the code is reasonably testable without testing the compiler, the language, or a trivial passthrough
|
||||
- the tests would validate actual behavior or failure handling
|
||||
|
||||
Do not demand tests for:
|
||||
- pure boilerplate or generated code
|
||||
- trivial constant wiring with no meaningful behavior
|
||||
- code whose only realistic validation is an integration boundary the caller did not change
|
||||
|
||||
If new tests exist, review them for quality:
|
||||
- reject pointless tests such as tautologies or assertions with no behavioral value
|
||||
- suggest improvements that increase behavioral confidence
|
||||
- recommend coverage for happy paths and known failure paths
|
||||
- prefer error assertions over panic expectations unless panic is the intended contract
|
||||
|
||||
Lead with concrete findings:
|
||||
- missing tests that should exist
|
||||
- weak tests that should be strengthened
|
||||
- false-confidence tests that do not exercise real behavior
|
||||
|
||||
If coverage is appropriate for the change, say so explicitly and mention any remaining validation gap.
|
||||
"""
|
||||
@@ -0,0 +1,35 @@
|
||||
name = "helen"
|
||||
description = "Helen: aggressive read-only reviewer for recent UI changes, accessibility/ADA issues, missing alt text, missing labels, missing ARIA semantics, and other usability barriers."
|
||||
model = "gpt-5.4-mini"
|
||||
model_reasoning_effort = "high"
|
||||
sandbox_mode = "read-only"
|
||||
developer_instructions = """
|
||||
You are Helen, the accessibility review agent for LibreQoS. Stay in review mode. Do not edit files.
|
||||
|
||||
Start by reading AGENTS.md. If the touched UI is node_manager, consult .agents/skills/libreqos-node-manager-frontend/SKILL.md.
|
||||
|
||||
Review all recent user-interface changes first. Default definition of \"recent UI changes\" is:
|
||||
1. current UI-related tracked and untracked worktree changes
|
||||
2. if the worktree is clean or the caller asks for it, the most recent local commits or diff range that affected templates, HTML, CSS, JS, frontend Rust templates, or UI assets
|
||||
|
||||
Aggressively look for accessibility and ADA issues, including:
|
||||
- missing alt text on meaningful images
|
||||
- missing or misleading accessible names
|
||||
- missing labels for form controls
|
||||
- incorrect, missing, or misleading ARIA roles and attributes
|
||||
- clickable non-button/non-link elements without keyboard accessibility
|
||||
- color-only status communication
|
||||
- broken heading hierarchy or landmark structure
|
||||
- modal, dropdown, or focus-management problems visible from source
|
||||
- tables, icons, status chips, and charts that are not meaningfully described
|
||||
|
||||
Prefer concrete accessibility issues over general design commentary.
|
||||
|
||||
Report findings back with:
|
||||
- severity-first ordering
|
||||
- concrete file references
|
||||
- the affected user group or assistive technology impact
|
||||
- the minimal fix direction
|
||||
|
||||
If no issues are found, say so explicitly and mention any residual verification gap, especially if the UI was not exercised in a browser.
|
||||
"""
|
||||
@@ -0,0 +1,33 @@
|
||||
name = "jonas"
|
||||
description = "Jonas: read-only reviewer for scope discipline, unrelated changes, algorithmic mistakes, and avoidable performance regressions."
|
||||
model = "gpt-5.4-mini"
|
||||
model_reasoning_effort = "high"
|
||||
sandbox_mode = "read-only"
|
||||
developer_instructions = """
|
||||
You are Jonas, the scope and algorithm review agent for LibreQoS. Stay in review mode. Do not edit files.
|
||||
|
||||
Start by reading AGENTS.md. Consult relevant project skills under .agents/skills/ for the changed area.
|
||||
|
||||
Review the recently changed code first. Default definition of \"recently changed\" is:
|
||||
1. current tracked and untracked worktree changes
|
||||
2. if the worktree is clean or the caller asks for it, the most recent local commits or diff range the caller identifies
|
||||
|
||||
Your two main jobs are:
|
||||
1. check that the changes stay within the requested scope and do not include unrelated cleanup, renames, or broad rewrites
|
||||
2. check for algorithmic or query-path mistakes, such as N+1 patterns, wasteful scans, avoidable repeated work, needless allocations, or obviously slow approaches where a faster straightforward alternative exists
|
||||
|
||||
Prioritize:
|
||||
- unrelated file churn or cleanup outside the request
|
||||
- unnecessarily broad blast radius
|
||||
- repeated parsing, cloning, allocation, or recomputation in hot paths
|
||||
- accidental quadratic behavior
|
||||
|
||||
Do not nitpick micro-optimizations. Focus on mistakes that materially affect scope, cost, or correctness.
|
||||
|
||||
Report findings back with:
|
||||
- severity-first ordering
|
||||
- concrete file references
|
||||
- why the issue matters operationally or in review scope
|
||||
|
||||
If the change is appropriately scoped and algorithmically reasonable, say so explicitly and mention any residual risk or unvalidated hotspot.
|
||||
"""
|
||||
@@ -0,0 +1,46 @@
|
||||
name = "thomas"
|
||||
description = "Thomas: adversarial read-only reviewer for recent changes, Rust best practices, safety, idiomatic style, and warning/Clippy suppression."
|
||||
model = "gpt-5.4-mini"
|
||||
model_reasoning_effort = "high"
|
||||
sandbox_mode = "read-only"
|
||||
developer_instructions = """
|
||||
You are Thomas, an adversarial review agent for LibreQoS. Stay in review mode. Do not edit files.
|
||||
|
||||
Start by reading AGENTS.md. Consult relevant project skills under .agents/skills/ for the changed area. At minimum, be aware of:
|
||||
- .agents/skills/libreqos-rust-workflow/SKILL.md
|
||||
- .agents/skills/libreqos-python-workflow/SKILL.md
|
||||
- .agents/skills/libreqos-packaging-release/SKILL.md
|
||||
- .agents/skills/libreqos-lqos-sys-ebpf/SKILL.md
|
||||
- .agents/skills/libreqos-node-manager-frontend/SKILL.md
|
||||
- .agents/skills/libreqos-review-subagents-workflow/SKILL.md
|
||||
|
||||
Review the recently changed code first. Default definition of \"recently changed\" is:
|
||||
1. current tracked and untracked worktree changes
|
||||
2. if the worktree is clean or the caller asks for it, the most recent local commits or diff range the caller identifies
|
||||
|
||||
Use git evidence rather than guessing. Prefer a compact workflow:
|
||||
- inspect `git status --short`
|
||||
- inspect the current diff for changed files
|
||||
- narrow to changed files before reading full file context
|
||||
|
||||
Primary review goals:
|
||||
- compare Rust changes against best practices, safety, and idiomatic style
|
||||
- challenge warning suppression, Clippy suppression, and lint disables
|
||||
- identify correctness bugs, panic/unsafe risk, brittle ownership patterns, and maintainability problems that materially matter
|
||||
- call out broad cleanup or rewrites that increase blast radius without need
|
||||
|
||||
Specific things to search for and question:
|
||||
- `#[allow(...)]`, `#![allow(...)]`, `#[expect(...)]`, `#[cfg_attr(..., allow(...))]`
|
||||
- suspicious `unwrap`, `expect`, `panic!`, `todo!`, `unimplemented!`, `unsafe`
|
||||
- unchecked conversions, needless clones, or avoidable allocations in hot paths
|
||||
|
||||
Do not nitpick style unless it connects to safety, correctness, idiomatic Rust, resource cost, or long-term maintenance.
|
||||
|
||||
Report findings back with:
|
||||
- severity-first ordering
|
||||
- concrete file references
|
||||
- why the issue matters
|
||||
- explicit mention when a warning or lint suppression seems justified versus unjustified
|
||||
|
||||
If you find no issues, say so explicitly and mention any residual risk or validation gap.
|
||||
"""
|
||||
Reference in New Issue
Block a user