20 KiB
name, description
| name | description |
|---|---|
| gitea-issue-devops-agent | Use when coordinating AI-assisted Gitea issue delivery where work must stay traceable across issue selection, branch or PR flow, CI/CD, preview environments, and human merge approval. |
Gitea Issue DevOps Agent
Overview
Treat AI as a fast but unstable engineer. The public workflow must remain issue -> branch -> PR -> CI/CD -> human-confirmed merge, while the internal execution model must narrow context, persist plans, require verification evidence, and keep humans in control of final merge decisions.
This skill is platform-aware for Gitea, but its delivery contract must stay portable across basic DevOps primitives: git, issue, PR, and CI/CD.
Core Principles
- Start coding only from a selected issue, not from an unbounded issue queue, unless the user explicitly asks for triage-only queue scanning.
- Every delivery issue must have a persisted plan before any code changes.
- External collaboration stays Git-native: issue, branch, PR, pipeline, review app, merge.
- AI output is provisional until tests, smoke paths, and review evidence exist.
- Engineers stay in the loop from the initial PR onward and own white-box review.
- Keep one active issue per branch and per execution agent unless the user explicitly approves batching.
Mandatory Guided Start
Run this interaction before any coding or issue action:
- Ask for repository address:
- preferred: full URL
https://<host>/<owner>/<repo> - fallback:
base_url+owner/repo
- preferred: full URL
- Ask for API key/token with issue read/write permissions.
- Ask user to select mode:
automaticsemi-automaticmanual(non-automatic)
- Ask for the selected issue trigger source:
- explicit issue number
- issue comment / webhook trigger
- app/CLI selection
- triage-only queue scan without coding
- Ask optional defaults:
- target base branch (for example
main,develop, protected release branch) - branch naming convention for issue branches
- plan storage path (default
.tmp/devops-plans/<repo>__issue-<number>.md) - issue template policy (
requiredorrecommended) forbug,enhancement, andfeature - designated reviewers (for semi-automatic mode)
- branch test submission entrypoint (CI command/job)
- environment policy:
- stable main URL (
mainfixed test env) - optional shared QA URL
- preview slot pool (for issue branches), e.g.
preview-a,preview-b - preview URL template, e.g.
https://{slot}.qa.example.com - public routing mode:
port-basedorvirtual-host - websocket public entry: explicit WS URL (
wss://...) or same-origin path (/ws)
- stable main URL (
- deployment environment + health endpoint
- minimum issue quality score (default
70) jjpolicy:disabledoptional-internalrequired-internal
- target base branch (for example
- Validate connectivity by running:
python scripts/issue_audit.py --repo <owner/repo> --base-url <gitea_url> --token <token> --state all --download-attachments --output-dir .tmp/issue-audit
- Initialize preview-slot state (if branch previews enabled):
python scripts/preview_slot_allocator.py --state-file .tmp/preview-slots.json --slots <slot_csv> --list
- Echo back the selected mode, selected issue trigger, target base branch, plan path,
jjpolicy, and all gate rules, then start work.
If repository or token is missing/invalid, stop and request correction. Never start development without a successful connectivity check.
Issue Intake Contract (Required)
- Require issue templates for
bug,enhancement, andfeature. Seereferences/issue-template-standard.md. - A coding run must start from one fixed issue chosen by a human or an explicit trigger. Queue polling is for triage only unless the user explicitly enables unattended processing.
- If the selected issue is too broad for one reviewable PR, split it into sub-issues before coding.
- If issue quality is below threshold, request details and stop before branch creation.
- For image/UI issues, attachment intake is mandatory before implementation.
Plan-First Orchestration (Required)
Before any code change, the MajorAgent must create and persist a plan for the selected issue. Use references/plan-template.md.
Minimum plan fields:
- issue number and title
- trigger source and current issue status
- target base branch and working branch
- current problem description
- expected behavior and acceptance criteria
- related interfaces, services, and directories
- allowed file/path scope for edits
- verification steps, including issue-level e2e coverage
- assigned execution agent
- risk notes and blockers
- evidence links or placeholders for commit, PR, pipeline, and preview URL
Required status flow:
selectedplannedin_progresspending_testpending_reviewmergedclosedneeds_infoblockedrejected
Hard rules:
- No code changes before the plan exists.
- No status promotion without evidence.
- If scope changes materially, update the plan before continuing.
Agent Role Separation (Required)
MajorAgent
- Pull issues, comments, and attachments from Gitea.
- Perform semantic triage and create the plan.
- Select or create the issue branch and initialize the PR.
- Decide whether work can proceed automatically or must pause for human input.
SubAgent (Developer)
- Load only the plan and the minimal code context needed for the issue.
- Modify code only within the allowed path scope unless explicit approval expands scope.
- Keep patches small and reversible.
- Update the plan to
pending_testwith a concise implementation summary.
TestAgent
- Load the plan, diff, and verification steps.
- Validate build, targeted tests, issue-level e2e path, and smoke path.
- Update the plan to
pending_reviewonly when evidence is complete. - Reopen the plan to
in_progressif failures or regressions appear.
Human Reviewer / Maintainer
- Review the draft PR and the plan evidence.
- Use the AI coding tool for follow-up adjustments if needed.
- Approve or reject final merge.
Mode Definitions
1) Automatic Mode
- Start only after a fixed issue has been selected and a plan has been created.
- Read or create the issue branch and open/update the draft PR automatically.
- Implement fix, run checks, push branch, allocate/reuse branch preview env, and trigger branch test submission automatically.
- Monitor test results and issue feedback, then iterate on the same branch until pass.
- Close issue only after evidence is complete.
- Merge is still blocked until an engineer explicitly confirms merge approval.
2) Semi-Automatic Mode
- Start only after a fixed issue has been selected and a plan has been created.
- Read or create the issue branch and open/update the draft PR.
- Implement and push fix.
- Notify designated reviewer with change summary, risk, and test plan.
- Wait for explicit human review approval.
- After approval, allocate/reuse branch preview env, trigger branch test submission and continue loop.
- Close issue only after evidence is complete.
- Merge is still blocked until an engineer explicitly confirms merge approval.
3) Manual Mode (Non-Automatic)
Require explicit human confirmation before each major action:
- selecting issue
- finalizing the plan
- confirming target branch
- creating or updating the PR
- applying code changes
- pushing commits
- triggering tests/deploy
- closing/reopening issue
- executing merge
No autonomous transition is allowed in manual mode.
Branch-First Rules
- Treat issue-declared branch as the source of truth when provided.
- If the issue does not declare a branch, create one from the configured protected base branch after the plan is approved.
- Preferred naming pattern:
<type>/issue-<number>-<slug>orissue/<number>-<slug>. - Accept branch hints from issue fields/body/comments (example:
branch: feat/login-fix). - If branch is missing or ambiguous, ask user/reporter and pause that issue.
- Do not silently switch branches.
- Keep one active issue per branch unless user explicitly approves batching.
- Open or update a draft PR immediately after branch selection so the review surface exists from the start.
- Keep issue, branch, PR, preview env, and plan bound together for the full lifecycle.
Environment Model (Required)
Always avoid main and issue branches overwriting each other.
mainfixed env (stable):- one permanent URL for regression/baseline testing
- optional shared QA env:
- integration testing across multiple completed branches
- issue preview slot env (ephemeral pool):
- small fixed pool (
Nslots, e.g. 2) - one active branch binds to one slot
- issue comments must include slot + URL + branch
- close/merge/TTL expiry releases slot
- small fixed pool (
Never deploy different branches to the same fixed URL unless user explicitly approves override.
Routing Strategy (Recommended)
- Prefer
virtual-hostover raw ports for multi-branch testing:main.example.com,preview-a.example.com,preview-b.example.com- Keep internal process ports private; expose only 80/443.
- Use same-origin WS path for frontend (
VITE_WS_URL=/ws) and route/ws/*to the slot server. - If
port-basedis used, every active env must have unique client/server ports; never reuse one public URL for two branches.
Issue -> Branch -> Environment Binding
- Binding key:
<repo>#<issue>#<branch> - Environment selection:
- if branch already has assigned slot: reuse same slot
- else allocate free slot from pool
- if no free slot:
- in
automatic: evict oldest expired/inactive slot if policy allows - in
semi-automatic/manual: request explicit confirmation before eviction
- in
- Persist slot state in
.tmp/preview-slots.jsonviascripts/preview_slot_allocator.py
Resource-Aware Deployment Strategy (Required)
Before every branch test submission, detect change scope:
python scripts/change_scope.py --repo-path <local_repo> --base-ref <target_base> --head-ref <branch_or_sha>
Use the scope result to minimize resource usage:
skip(docs/tests/chore-only):- do not deploy
- post no-op verification evidence
client_only:- build/deploy client only
- reuse existing shared/stable server
- do not start a dedicated server for this branch
server_only:- deploy/restart server only
- keep existing client if unchanged
full_stack:- deploy both client and server
infra_only:- apply infra/workflow changes; restart only required components
Hard rule:
- If server-related scope is unchanged, do not provision/restart dedicated server processes for that issue branch.
Standard Workflow (All Modes)
1) Issue Selection and Trigger
- Start from a fixed issue chosen through comment mention, webhook, app/CLI selection, or explicit human instruction.
- Repo-wide polling may be used for triage reports, but not for autonomous coding unless the user explicitly enables queue processing.
2) Intake and Prioritization
- Pull the selected issue, comments, and attachments from Gitea API.
- If issue text/comments indicate image evidence but
attachments_downloadedis0, stop and report image-intake failure before coding. - Prioritize in this order:
closed_but_unresolvedopen+quality_score >= min_quality_scoreopen+quality_score < min_quality_score(request details first)closed_open_reopen_candidates
- For issues with images, inspect attachments before coding.
3) Deduplication and Quality Gate
- Group issues by semantic intent, not literal wording.
- Keep one parent issue for implementation.
- Use
references/triage-standard.mdfor score and comment templates. - For low-quality issues, request details and mark as
needs-info.
4) Plan Generation
- MajorAgent must generate a plan before branch creation or code changes.
- Persist the plan to the configured plan path and echo the summary back to the user.
- Record the allowed file/path scope so later diffs can be checked against it.
- Record the issue-level e2e scenario from the reporter's perspective.
5) Branch and PR Initialization
- Create or reuse the issue branch from the configured base branch.
- Create or update the associated draft PR targeting the protected integration branch.
- The PR body must include issue link, plan summary, intended file scope, and verification checklist.
6) Fix Execution
- Prefer small, reversible patches.
- Link every code change to issue ID in commit or PR/MR notes.
- Split cross-cutting work into incremental commits.
- Do not modify files outside the allowed plan scope without explicit approval and a plan update.
- Any new dependency, framework, SDK, or major library change must be checked against official docs, maintenance status, and local compatibility before merge.
- Do not trust knowledge-base output as truth unless it has clear provenance and matches the current codebase.
7) Verification Gate
- Required:
- build/compile passes
- affected unit/integration tests pass
- issue-level e2e test is added or updated and passes in the PR pipeline unless the user explicitly waives it
- smoke path for reported scenario passes
- For UI/image issues:
- compare before/after screenshots
- verify in at least one Chromium browser
- If verification evidence is missing, do not claim the issue is fixed.
8) Branch Test Submission ("提测")
- Submit testing on the issue branch (CI pipeline + branch preview env).
- Allocate/reuse branch slot before submission.
- Apply resource-aware deployment decision from change scope.
- Verify websocket handshake is healthy on the published preview URL/path before asking QA to test.
- Post evidence in issue comment:
- commit SHA
- PR URL
- test run URL and result
- environment/slot/URL
- deployment scope (
skip/client_only/server_only/full_stack/infra_only) - shared backend reused or dedicated backend started
- e2e result
- verification steps
- If fail/reject, iterate on same branch and re-submit.
9) Loop Control
- Continue
fix -> test submission -> feedback -> fixuntil done. - Reopen immediately if verification fails or regression appears.
- Do not close based on title-only or assumption-only validation.
10) Human Review and AI-Assisted Refinement
- From the initial PR onward, engineering review is the default path.
- Engineers may continue refinement inside an AI coding tool, but all follow-up work must stay on the same issue branch and update the same plan.
- Human review is the white-box gate between initial AI output and final merge readiness.
11) Closure Rule
Close issue only when all are true:
- root cause identified
- fix verified with reproducible evidence
- test submission passed
- PR review state is recorded
- closure comment includes commit/test/deploy evidence
12) Merge Rule (Always Human-Confirmed)
- Final merge must be approved by an engineer in all modes.
- Agent can prepare merge notes/checklist, but must wait for explicit merge confirmation.
- Merge only after confirmation, then post final release evidence.
13) Environment Cleanup
- On issue close/merge:
- release preview slot
- stop branch-only processes (if any)
- keep main/shared env untouched
- On TTL expiry:
- reclaim idle slot automatically (automatic mode) or after confirmation (semi/manual)
AI Reliability Guardrails
- Evidence before assertions: never claim “fixed”, “tested”, or “deployed” without command output, screenshots, or links proving it.
- Diff-scope gate: compare the actual diff with the plan's allowed paths before PR update or merge request.
- Dependency gate: do not add new packages or major version upgrades without checking official documentation, maintenance state, and environment compatibility.
- Deprecated-tech gate: do not introduce deprecated or no-longer-recommended libraries/classes unless the user explicitly approves the trade-off.
- Context minimization: every execution agent should load the issue, plan, diff, and only the code areas it needs.
- No silent batching: do not mix unrelated fixes into one issue branch or PR.
Knowledge Context Policy
- Do not blindly vectorize or load the entire repository as context for each issue.
- Build a curated issue context pack consisting of:
- issue body and comments
- plan summary
- touched directories and interfaces
- related tests
- relevant configuration and prior PR/commit references
- Record the chosen context sources in the plan so later agents can reuse them.
- Treat knowledge-base retrieval as a hint layer, not as a source of truth.
Jujutsu (jj) Integration Strategy (Optional but Recommended Internally)
jj should improve internal execution reliability, not replace the external Git workflow.
Use jj only under these rules:
- Keep Git branches, PRs, and CI/CD as the public system of record.
- Map the issue branch to a
jjbookmark whenjjis enabled. - Use
jjchange IDs to support iterative rewrites without losing traceability. - Use
jjworkspaces for parallel SubAgent/TestAgent/human adjustments on the same issue without sharing one mutable working copy. - Use the
jjoperation log for undo, recovery, and audit when AI changes diverge or go out of scope. - Prefer
jjfor local mutating history operations if enabled; avoid mixing arbitrary mutatinggitcommands withjjin the same workspace. - If colocated workspaces are used, keep
gitmostly read-only except for explicit remote operations such as fetch/push handled by the workflow. - Do not require
jjin CI or for non-engineer participants.jjis an internal accelerator, not the product front door.
Script Usage
scripts/issue_audit.py: collect issues/comments/attachments, detect duplicates, score quality, detect unresolved/closed-open links, extract issue branch hints, and generate reports.- image intake uses three sources: markdown/html links, payload
assets/attachmentsfields, and/issues/*/assetsAPI endpoints. - if your Gitea blocks the assets endpoints, pass
--skip-asset-endpointsand rely on payload extraction.
- image intake uses three sources: markdown/html links, payload
scripts/preview_slot_allocator.py: allocate/reuse/release/list preview slots by issue+branch.- allocate example:
python scripts/preview_slot_allocator.py --state-file .tmp/preview-slots.json --slots preview-a,preview-b --repo <owner/repo> --issue 48 --branch dev --ttl-hours 24 --url-template https://{slot}.qa.example.com
- release example:
python scripts/preview_slot_allocator.py --state-file .tmp/preview-slots.json --slots preview-a,preview-b --release --repo <owner/repo> --issue 48 --branch dev
- allocate example:
scripts/change_scope.py: detect changed scope and recommend minimum deploy strategy.python scripts/change_scope.py --repo-path <repo> --base-ref origin/main --head-ref HEAD
references/triage-standard.md: scoring rubric and templates for needs-info, review request, test submission, and merge approval.references/issue-template-standard.md: standard issue templates forbug,enhancement, andfeature.references/plan-template.md: default plan structure and status machine for MajorAgent/SubAgent/TestAgent handoff.references/jj-default-usage.md: defaultjjinstallation strategy, verification, and scenario-based usage guidance.
Operational Constraints
- Never start coding from an unselected issue unless the user explicitly enables autonomous queue mode.
- Never skip plan creation for a delivery issue.
- Never modify files outside the planned scope without an explicit plan update or user approval.
- Never claim success without verification evidence.
- Never introduce new dependencies or deprecated libraries without compatibility review.
- Never bulk-close issues without per-issue verification evidence.
- Never ignore attachment images for UI/interaction issues.
- Never merge feature requests and bugfixes into one untraceable commit.
- Never bypass engineer merge confirmation.
- Never allow branch previews to overwrite main stable env.
- Never start dedicated branch server when scope indicates client-only changes.
- When changing public service ports under PM2, do not rely on
pm2 restart --update-envalone; delete and recreate the process so CLI args (for example--port) actually change. - If a branch must be rebound to a specific preview slot (for example
preview-a), release the existing issue allocation first, then redeploy; reuse logic otherwise keeps the previous slot by design.