| name | post-release-followup |
| description | Analyze release workflow findings and recommend follow-up actions โ execute immediately or register as issues |
| scope | harness |
| user-invocable | false |
| effort | medium |
Post-Release Follow-up
Purpose
After PR creation in the auto-dev release workflow, collect unaddressed findings and present actionable follow-up recommendations. Genuine defects and process gaps are registered as GitHub issues automatically. Only code-changing immediate-action items require user confirmation.
Workflow
1. Collect Follow-up Candidates
Gather unfinished work from multiple sources:
Source A โ Remaining verify-ready work:
- Run:
gh issue list --label verify-ready --state open --json number,title,labels,milestone
- Treat this as the remaining automation queue, not
verify-done.
- Exclude issues already assigned to the current release milestone/version; those belong to current-release verification, not follow-up.
- Deduplicate by issue number before joining this source with deep-verify, triage, TODO, and PR-review findings.
Source A2 โ Human decision queue:
- Run separately:
gh issue list --label decision-needed --state open --json number,title,labels,milestone
- Keep these items in a distinct human decision queue. Do not count them as auto-dev work, auto-register duplicates, or implement them without the required decision.
Source B โ Deep-verify findings:
-
Resolve the current release repository, semantic version, and exact verified
40-character lowercase merge SHA from direct release evidence. Do not infer
identity from today's directory, file mtime, or a previous pipeline run.
-
Resolve artifact_helper from the actual path of the currently loaded SKILL.md,
never from $PWD or a hardcoded source/install/plugin root: take
skills_root = dirname(dirname(loaded_skill_file)), then normalize
join(skills_root, "deep-verify/scripts/artifact-contract.mjs"). Require that
exact peer-skill helper to be a regular, non-symlink file. Missing or unsafe
discovery blocks Source B; do not search another skills root.
-
Invoke the deterministic selector with all three exact keys and redirect its
JSON projection to a regular temporary data file; never interpolate finding
text into a shell command:
node "$artifact_helper" select \
--project-root "$PWD" \
--repository "$repository" \
--release-version "$release_version" \
--verified-sha "$verified_sha" >"$selection_file"
-
Treat a nonzero selector result, a missing artifact, malformed frontmatter,
a stale release, or a wrong SHA as a blocked Source B. Report the constant
selector diagnostic and stop follow-up aggregation; never convert this state
into zero findings and never fall back to an older artifact.
-
If any canonical candidate's frontmatter JSON cannot be decoded, block the
whole selector. Its metadata date and release correlation are unknowable, so
mtime, filename time, regex recovery, and older-artifact fallback are all
forbidden.
-
Parse the validated JSON projection as data. Index the full
findings.initial objects by stable id, then join
findings.unresolved[].findingId to that index. Extract only unresolved
findings whose original severity is MEDIUM or LOW. Do not treat
initial, falsePositives, or fixed history as unfinished work.
-
A successful exact selection with an empty filtered set is the only Source B
state that means zero unresolved MEDIUM/LOW findings.
Compatibility artifact protocol
Sensitive-path compatibility note: when delegated work touches .claude/outputs/, .claude/**, or templates/.claude/**, keep .codex/** artifacts on the normal file-write path. On Claude Code v2.1.121+ with bypassPermissions, direct compatibility writes are allowed for .claude/skills/, .claude/agents/, and .claude/commands/; on v2.1.126+ broader protected paths are covered. Use /tmp/<skill>-<timestamp>.md only as a legacy fallback when the runtime is older or still prompts.
- Preserve each unresolved outcome's
reason and safe evidence reference in
deduplication; never copy raw artifact body text into issue-creation commands.
Source D โ TODO markers in changed files:
- Run:
git diff develop...HEAD --name-only to get changed files
- Search changed files for
TODO, FIXME, HACK markers added in this release
Source E โ PR review feedback:
- Run:
gh api repos/{owner}/{repo}/pulls/{pr_number}/comments and gh api repos/{owner}/{repo}/issues/{pr_number}/comments
- Parse omc_pr_analyzer bot comments (Senior Architect, Project Colleague, Professor Synthesis)
- Extract findings categorized as Critical, High, Medium
- Identify: required fixes, recommended improvements, structural concerns
2. Deduplicate and Categorize
Remove duplicates (same issue referenced from multiple sources or already present in the current milestone). Categorize:
| Category | Criteria | Default Action |
|---|
| ์ฆ์ ์คํ | P1/P2 ์์ฌ ์ด์, MEDIUM+ ๊ฒ์ฆ ๋ฐ๊ฒฌ์ฌํญ, Critical/High PR ๋ฆฌ๋ทฐ ๋ฐ๊ฒฌ์ฌํญ | ์ฆ์ ์คํ |
| ์ด์ ๋ฑ๋ก | P3 ์ด์, LOW ๊ฒ์ฆ ๋ฐ๊ฒฌ์ฌํญ, ์ TODO, Medium PR ๋ฆฌ๋ทฐ ๋ฐ๊ฒฌ์ฌํญ | ์ด์๋ก ๋ฑ๋ก |
| ์ฐธ๊ณ | ์ด๋ฏธ ์ถ์ ์ค์ธ ์ด์, ์ธ๊ด ๊ด๋ จ ๋ฉ๋ชจ | ๊ฑด๋๋ฐ๊ธฐ |
Auto-Register Genuine Defects (no-ask)
Before presenting the summary to the user, auto-register every "์ด์ ๋ฑ๋ก" item that is a genuine defect or process gap. No user confirmation is required for these.
Auto-register if any condition applies:
- Genuine defect: bug, regression, broken behavior, or incorrect output observed during verification
- Process gap: workflow hole, missing guard, or coverage gap surfaced by deep-verify or triage
- Coverage gap: missing test, documentation, or automation for a known scenario
Do not auto-register pure cosmetic/style preferences or subjective notes. When ambiguous, lean toward registering; missing a genuine defect costs a future session.
Use gh issue create --repo baekenough/oh-my-customcodex --body-file <path> with professor plus a priority label. Default auto-registered items to P3; escalate to P2 for MEDIUM+ severity. Write the complete body to a local file first so shell quoting cannot corrupt evidence.
3. Present to User
Auto-register genuine defects first. Then display follow-up summary showing what was already registered and what still needs a decision:
[Follow-up] {n}๊ฐ ํ์ ์์
๋ฐ๊ฒฌ
โโโ ์๋ ๋ฑ๋ก ์๋ฃ ({count}๊ฐ) โโโ
โ #{issue_number} โ {description} (์ด๋ฏธ ๋ฑ๋ก๋จ)
โโโ ์ฆ์ ์คํ ์ถ์ฒ ({count}๊ฐ) โโโ
1. {description} โ ์ถ์ฒ: {source}
2. {description} โ ์ถ์ฒ: {source}
โโโ ์ฐธ๊ณ ์ฌํญ ({count}๊ฐ) โโโ
3. {description} โ ์ด๋ฏธ #{issue_number}๋ก ์ถ์ ์ค
์ฆ์ ์คํ ํญ๋ชฉ ์ ํ:
[A] ์ถ์ฒ๋๋ก ์คํ (์ฆ์ ์คํ ํญ๋ชฉ ๋ชจ๋ ์คํ)
[B] ๊ฐ๋ณ ์ ํ (ํญ๋ชฉ๋ณ๋ก ์ง๋ฌธ)
[C] ๊ฑด๋๋ฐ๊ธฐ
Use AskUserQuestion (or equivalent user prompt) only if there are "์ฆ์ ์คํ" items. If there are none, skip the prompt and complete automatically.
4. Process User Choice
Option A (์ถ์ฒ๋๋ก):
- "Immediate" items โ delegate to appropriate specialist agents for execution
- Trackable defect/process-gap items were already auto-registered
- "Informational" items โ skip
Option B (๊ฐ๋ณ ์ ํ):
- For each immediate item, ask:
[{n}] {description} โ ์คํ(E) / ๊ฑด๋๋ฐ๊ธฐ(S)?
- Process each per user choice
Option C (๊ฑด๋๋ฐ๊ธฐ):
- Skip all follow-up actions
- Complete workflow
5. Report
[Follow-up Complete]
โโโ ์ฆ์ ์คํ: {n}๊ฐ ์๋ฃ
โโโ ์ด์ ๋ฑ๋ก: {n}๊ฐ (#{numbers})
โโโ ๊ฑด๋๋ฐ๊ธฐ: {n}๊ฐ
โโโ ์ด ์ฒ๋ฆฌ: {total}๊ฐ
Issue Creation Template
For auto-registered genuine defects / process gaps:
body_file=$(mktemp)
title_file=$(mktemp)
cleanup_issue_files() { rm -f "$body_file" "$title_file"; }
trap cleanup_issue_files EXIT
cat >"$body_file" <<'EOF'
v{version} ๋ฆด๋ฆฌ์ฆ ์ํฌํ๋ก์ฐ์์ ์๋ ๋ฑ๋ก.
{triage/verify์์์ ์์ธ ์ปจํ
์คํธ}
{๊ถ์ฅ ์ฌํญ}
EOF
cat >"$title_file" <<'EOF'
{๊ฐ๊ฒฐํ ์ค๋ช
}
EOF
title=$(cat "$title_file")
issue_url=$(gh issue create \
--repo baekenough/oh-my-customcodex \
--title "$title" \
--body-file "$body_file" \
--label "professor" \
--label "{P2|P3}")
issue_number=${issue_url##*/}
gh issue view "$issue_number" \
--repo baekenough/oh-my-customcodex \
--json number,title,body,labels
cleanup_issue_files
trap - EXIT
Add priority label (P1, P2, P3) based on categorization. Default for auto-registered items: P3; escalate to P2 for MEDIUM+ severity.
Notes
- This skill runs in the main conversation context (via workflow skill step)
- Genuine defect/process gap items are auto-registered as issues without user confirmation
- Only "์ฆ์ ์คํ" code-changing items require user confirmation
- All file modifications delegated to specialist subagents per R010
- Issue creation is an explicit mutation and must use the reviewed body file plus direct issue readback
- If no follow-up candidates found, report "No follow-up actions needed" and complete
- PR review feedback is available shortly after PR creation โ the omc_pr_analyzer bot comments automatically