name: rsyslog_continuous_issue_session description: Orchestrate long-running rsyslog issue-fix sessions with a rolling active set of work units, local issue cache use, separate worktrees, full validation gates, PR babysitting, merged-PR cleanup, and automatic refill until the selected issue class is exhausted.
rsyslog_continuous_issue_session
Use this skill for long-running rsyslog backlog sessions where the user wants an agent to keep processing a selected class of issues, such as segfault-related reports, while maintaining a small active set of open PRs.
This is an orchestration skill. It does not replace the build, test, container, triage, commit, or PR babysitting skills. Use those skills at the points named below and follow their stricter local instructions.
Core Contract
Maintain a rolling active set of issue/PR work units until the selected issue set is exhausted or the user pauses the session.
- Default active set size is 2 to 3 work units unless the user sets another number.
- A work unit may be one issue or a tightly related issue cluster that should share one PR.
- Each work unit gets its own sibling worktree, branch, validation ledger entry, commits, and PR.
- On every babysit pass, if any active PR has merged, closed, become obsolete, or otherwise completed, immediately clean it up and refill that active slot with the next eligible non-conflicting issue.
- Do not wait for all active PRs to finish before starting the next work unit.
- Keep polling all active PRs on one shared cadence. Do not start per-PR timers.
- Do not use automations unless the user explicitly asks; when the user asks for sleeps, use a single shared sleep and do no work while sleeping.
Startup Checklist
- Read repository
AGENTS.md,AGENTS.local.mdif present, and relevant subtree guides. - Load this skill, then use:
rsyslog_issue_triagefor issue classification, local cache use, closure comments, and evidence boards.rsyslog_build,rsyslog_test, andrsyslog_local_container_testingfor validation.rsyslog_commitfor formatting, commit messages, branch, and PR hygiene.rsyslog_pr_babysittingfor check polling, review threads, AI comments, reruns, and CI failure classification.
- Recover the local issue cache and session ledger before querying GitHub. Prefer local memory for known issue lists, dispositions, and prior evidence. Refresh GitHub only for state that may have changed: issue open/closed state, linked PRs, comments, PR checks, and review threads.
- Refresh upstream
mainand sync the fork main according to local instructions before creating or updating task worktrees. - Inspect currently open PRs and avoid overlapping touched areas unless the selected issue cannot be handled otherwise.
- Choose enough eligible work units to fill the active set.
Work Unit Selection
For each candidate issue:
- Check local cache first, then refresh the issue's current GitHub state.
- Analyze the issue before assuming a code change is needed. Decide whether the correct action is code, documentation, a test-only change, a configuration or support answer, already-solved closure, duplicate/superseded closure, or human decision.
- Exclude issues already fixed, already closed, duplicated, superseded, or made obsolete by merged code. Post the required evidence comment and close only when the conclusion is clear and the user has authorized issue writes.
- For answer-only or documentation-only issues, do not force a code PR. Post or draft the answer, or make the narrow documentation update, according to the user's write permissions for the session.
- Keep unclear or under-specified issues open. Record the evidence and report them as needing human decision.
- Prefer non-conflicting modules or code areas when active PRs already touch nearby files.
- Group issues only when they share the same code area, failure mode, and test surface. Otherwise keep one issue per PR.
- If the selected issue class is crash or segfault related, prioritize issues with current code paths, reproducible inputs, or clear unsafe lifecycle, pointer, bounds, or error-path evidence.
Per-Unit Implementation Loop
For each active slot, process one work unit end to end:
- Create or reuse a dedicated sibling worktree and
codex/branch. - Run the pre-code triage gate below. Continue to code only when the gate says a code, test, or documentation change is still needed.
- Analyze the issue, current code, linked PRs, tests, and module metadata.
- Reproduce or build the strongest local evidence available before editing.
- Journal/imjournal runtime bugs are static-analysis-only on hosts without a usable journal service. Do not try to force journal runtime tests there.
- Implement the narrowest compatible fix.
- Add or update focused regression tests when practical.
- Validate locally using the required validation section below.
- Format and commit using
rsyslog_commit. - Push, open a PR, assign/milestone/category per local instructions, and link the issue with full URLs where applicable.
- Do one immediate babysit pass after PR creation or push, then return to the shared active-set cadence.
Pre-Code Triage Gate
Before editing files, classify the work unit using rsyslog_issue_triage:
already solved: verify current behavior, comment with evidence, close when authorized, update local cache, and refill the slot.duplicate / superseded: record the canonical issue or PR, comment/close when authorized, update local cache, and refill the slot.answer-only: post or draft the support/configuration answer, leave or close according to the triage rules, update local cache, and refill the slot.documentation-only: make only the narrow documentation update and validate documentation-local requirements; do not invent runtime code changes.test-only: fix or add the missing regression/testbench coverage and run the relevant test validation.code-needed: proceed with implementation and full validation.unclear: do not close and do not code speculatively. Record the blocker and report the issue for human decision, then refill the slot.
Required Validation
Use the existing validation skills. Do not downgrade their requirements here.
- Start with focused host-side validation from
rsyslog_testwhile iterating. - Use direct
tests/*.shexecution for focused shell tests. - Use
diag.shhelpers such ascheck_content,cmp_exact, andrequire_plugin; prefer asserting rsyslog diagnostics through configured output files after synchronized shutdown unless a test documents an exception. - For new or renamed tests, follow the
tests/Makefile.amdistribution pattern fromrsyslog_testand run the mock distcheck gate when required. - Run local Cubic review when available.
- Run
rsyslog_local_container_testingbefore reporting PR-ready validation: static analyzer first, then the Ubuntu 26.04 containerrun-ci.shcheck run, plus any touched-area specialist lanes required by that skill. - Focused container tests supplement the full local container gate; they do not replace it unless the container-testing skill explicitly permits the reduced lane for the touched area.
- Use Docker Hub CI-equivalent dev images when appropriate. Use locally built images only when validating a locally built image or runtime container.
- For segfault, memory, parser, string, JSON, property, or bounds work, strongly
consider the sanitizer lane required by
rsyslog_local_container_testing. - For lifecycle, action shutdown, queue, lock, or shared-state work, consider TSAN. Do not combine TSAN with Valgrind; they are incompatible.
- Journal/imjournal runtime reproduction remains static-analysis-only on hosts without a journal service; record that exception in the ledger.
- If a full container lane fails, inspect logs and make up to four concrete remediation attempts only when locally fixable. Record the failure, command, log path, attempts, affected PR/unit, and whether host-side validation passed, then continue to another work unit instead of spinning.
Babysitting And Refill Loop
Run this loop for all active PRs together on the user-specified cadence:
- Check PR state, head SHA, merge state, checks, review threads, flat comments, and AI comments.
- If checks fail, use
rsyslog_pr_babysittingto inspect logs before classifying failures. Fix PR-caused failures, rerun likely flakes, and record external blockers. - Treat AI comments as first-class review. Either implement and reply, or reply with the reason the comment is invalid or obsolete.
- If any PR is merged or closed:
- run the mandatory local cleanup phase below,
- immediately refill the active slot with the next eligible issue.
- If all active PRs are green but unmerged, continue only if the user requested
merge-time monitoring or continuous refill. Otherwise follow
rsyslog_pr_babysittingstop rules.
Mandatory Local Cleanup
Run this cleanup whenever an active PR is merged, closed as obsolete, or otherwise leaves the active set. Local cleanup is part of the continuous-session contract because stale worktrees and branches make long-running sessions misread local state.
- Confirm the PR state and merged/closed commit from GitHub.
- Check the worktree status. Remove the worktree only when it is clean or when all remaining files are known generated artifacts from that unit.
- Delete the local feature branch after the worktree is removed.
- Delete the remote feature branch when it belongs to this agent/session and no other open PR uses it. If GitHub already deleted it, record that as clean.
- Update the session ledger: PR disposition, final SHA, cleanup commands, issue disposition, and any remote-branch deletion result.
- Remove the work unit from the active set.
- Remove stale or completed issues from the local issue cache only after the evidence is recorded. Do not remove unclear issues; keep them in the report for human decision.
- Refresh the conflict-area map before selecting the replacement work unit.
Ledger
Maintain a local ledger outside committed source files unless the user asks for
a committed report. Use the template in
.agent/skills/rsyslog_continuous_issue_session/references/ledger-template.md.
Each active or completed unit must record:
- issue number, title, URL, selection reason, and local cache source
- branch, worktree, PR URL, PR number, and final commit SHA
- touched files and conflict-area check
- validation commands, results, image tag and image ID, local Cubic result, hosted AI/review status, and any lane relaxations with rationale
- AI comments and how they were addressed
- closure/comment action for stale or obsolete issues
- final disposition: active, merged, closed-obsolete, blocked, unclear, or needs human decision
Reporting
Interim updates should be short and focused on meaningful state changes: selected issue, PR opened, validation failure, AI comment handled, PR merged, slot refilled, or blocker recorded.
Final or pause reports must include:
- active PRs and their check/review state
- merged/closed PRs cleaned up
- new issues started because a slot opened
- issues closed as obsolete with evidence
- unclear issues left open for human decision
- validation status, explicitly distinguishing fully container-validated work from targeted container-tested-only work