본문으로 건너뛰기
cccskills
GitHub Copilot 공식무료GitHub에 공개

temporary-id-safe-output

Extend safe-output jobs, which execute agent-generated actions, to reference newly created issues through temporary IDs. The guide covers job dependencies, issue-number resolution, input validation, tests, and warning-based handling of unresolved references.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

원문원문 설명 보기

Add temporary ID support to safe-output jobs end to end.

설치 방법 보기

이럴 때 유용합니다

  • Linking sub-issues to a parent created in the same run
  • Adding temporary ID resolution to another safe-output job
  • Testing temporary ID validation and job dependencies

포함된 파일(1)

  • SKILL.md7.4 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Adding Temporary ID Support to Safe Output Jobs

Use this implementation plan for temporary ID support in safe output jobs. Temporary IDs let agents reference newly created issues in the same run before real issue numbers exist.

Problem Statement

When an agent creates a parent issue and immediately links sub-issues in the same run, it does not know the real issue number until create_issue completes. Temporary IDs bridge this gap with placeholders resolved at execution time.

Temporary ID Format

Temporary IDs follow the pattern aw_[A-Za-z0-9]{3,8} where:

  • aw_ is a fixed prefix identifying agentic workflow temporary IDs
  • XXXXXXXX is a 3-8 character alphanumeric string (A-Za-z0-9)

Example: aw_abc, aw_abc123, aw_Test123

Implementation Components

1. Shared Module: temporary_id.cjs

Location: actions/setup/js/temporary_id.cjs

This module provides shared utilities for temporary ID handling:

// Core functions
generateTemporaryId()           // Generate new temporary ID
isTemporaryId(value)            // Check if value is a temporary ID
normalizeTemporaryId(tempId)    // Normalize to lowercase for map lookups
loadTemporaryIdMap()            // Load map from GH_AW_TEMPORARY_ID_MAP env var
resolveIssueNumber(value, map)  // Resolve value to issue number (supports temp IDs)
replaceTemporaryIdReferences(text, map)  // Replace #aw_XXX references in text

2. Producer Job: create_issue

The create_issue job outputs a temporary ID map that other jobs can consume:

Go changes (pkg/workflow/create_issue.go):

  • No changes needed - already outputs temporary_id_map

JavaScript changes (actions/setup/js/create_issue.cjs):

  • Generate temporary ID for each created issue
  • Build map of temporary_id -> issue_number
  • Output map via core.setOutput("temporary_id_map", JSON.stringify(map))

3. Consumer Job: Adding Temporary ID Support

For each safe output job that needs to resolve temporary IDs:

Step 1: Update Go Job Builder

In pkg/workflow/<job_name>.go:

  1. Add createIssueJobName parameter to the build function:
func (c *Compiler) build<JobName>Job(data *WorkflowData, mainJobName string, createIssueJobName string) (*Job, error) {
  1. Add environment variable to pass the temporary ID map:
if createIssueJobName != "" {
    customEnvVars = append(customEnvVars, fmt.Sprintf("          GH_AW_TEMPORARY_ID_MAP: ${{ needs.%s.outputs.temporary_id_map }}\n", createIssueJobName))
}
  1. Add create_issue to the job's needs array:
needs := []string{mainJobName}
if createIssueJobName != "" {
    needs = append(needs, createIssueJobName)
}
  1. Update the SafeOutputJobConfig to use the dynamic needs:
return c.buildSafeOutputJob(data, SafeOutputJobConfig{
    // ...
    Needs: needs,
    // ...
})

Step 2: Update Compiler Jobs

In pkg/workflow/compiler_jobs.go:

Pass the createIssueJobName when building the job:

job, err := c.build<JobName>Job(data, mainJobName, createIssueJobName)

Step 3: Update JavaScript Script

In pkg/workflow/js/<job_name>.cjs:

  1. Import the temporary ID utilities:
const { loadTemporaryIdMap, resolveIssueNumber } = require("./temporary_id.cjs");
  1. Load the temporary ID map at the start of main():
const temporaryIdMap = loadTemporaryIdMap();
if (temporaryIdMap.size > 0) {
    core.info(`Loaded temporary ID map with ${temporaryIdMap.size} entries`);
}
  1. Use resolveIssueNumber() to resolve issue numbers:
const resolved = resolveIssueNumber(item.issue_number, temporaryIdMap);
if (resolved.errorMessage) {
    core.warning(`Failed to resolve issue: ${resolved.errorMessage}`);
    continue;
}
const issueNumber = resolved.resolved;
if (resolved.wasTemporaryId) {
    core.info(`Resolved temporary ID '${item.issue_number}' to issue #${issueNumber}`);
}

Step 4: Update Agent Ingestion Validation

In actions/setup/js/collect_ndjson_output.cjs:

Add validation for fields that accept temporary IDs:

function isValidIssueNumberOrTemporaryId(value) {
    if (typeof value === "number" && Number.isInteger(value) && value > 0) {
        return true;
    }
    if (typeof value === "string" && /^aw_[0-9a-f]{12}$/i.test(value)) {
        return true;
    }
    return false;
}

Use this validation for fields like parent_issue_number, sub_issue_number, etc.

4. Failure Handling

When temporary ID resolution fails, the job should:

  • Log a warning with core.warning() instead of failing with core.setFailed()
  • Continue processing other items
  • Include failures in the step summary
  • Complete successfully with warnings

This ensures that:

  • Partial success is possible (some links may work while others fail)
  • The workflow doesn't fail catastrophically due to a single resolution failure
  • Users can review warnings in the step summary

Example Usage

Workflow Configuration

safe-outputs:
  create-issue:
    title-prefix: "[Parent] "
    labels: [tracking]
    max: 3
  link-sub-issue:
    max: 10

Agent Output

{"type": "create_issue", "temporary_id": "aw_abc123", "title": "Parent: Feature X", "body": "..."}
{"type": "link_sub_issue", "parent_issue_number": "aw_abc123", "sub_issue_number": 42}
{"type": "link_sub_issue", "parent_issue_number": "aw_abc123", "sub_issue_number": 43}

Execution Flow

  1. main job: Agent generates output with temporary ID aw_abc123
  2. create_issue job: Creates issue #100, outputs {"aw_abc123": 100}
  3. link_sub_issue job:
    • Loads temporary ID map
    • Resolves aw_abc123 → 100
    • Links issues #42 and #43 as sub-issues of #100

Jobs That Support Temporary IDs

JobField(s)Status
link_sub_issueparent_issue_number, sub_issue_number✅ Implemented
add_commentissue_number (via text replacement)✅ Implemented
update_issueissue_number🔄 Can be added
close_pull_request-N/A (uses PR numbers)

Testing

Unit Tests

Add tests in actions/setup/js/temporary_id.test.cjs for:

  • isTemporaryId() with valid and invalid inputs
  • resolveIssueNumber() with temporary IDs and regular numbers
  • loadTemporaryIdMap() with various JSON inputs

Integration Tests

Add tests in pkg/workflow/<job_name>_dependencies_test.go to verify:

  • Job includes create_issue in needs when configured
  • GH_AW_TEMPORARY_ID_MAP env var is set correctly
  • Job works without create_issue dependency

Security Considerations

  1. Temporary IDs are only valid within a single workflow run
  2. The map is passed via environment variables (not exposed externally)
  3. Agents cannot forge temporary IDs to reference issues from other workflows
  4. Resolution failures are logged but don't expose the temporary ID map contents

Checklist for Adding Support to a New Job

  • Update Go job builder to accept createIssueJobName parameter
  • Add GH_AW_TEMPORARY_ID_MAP environment variable
  • Update needs array to include create_issue conditionally
  • Update compiler_jobs.go to pass createIssueJobName
  • Import temporary ID utilities in JavaScript script
  • Use resolveIssueNumber() for issue number fields
  • Update validation in collect_ndjson_output.cjs if needed
  • Add unit tests for the resolution logic
  • Add integration tests for job dependencies
  • Update documentation

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

agent-collaboration

GitHub Copilot 공식무료

Coordinate work across AI agents with shared rules for locating team files, recording decisions and their reasons, and requesting help. It also defines who owns revisions after a reviewer rejects an artifact.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Locate team files across separate working directories
  • Record decisions that affect other agents
  • Request input from another specialist
github/gh-aw5.4천2026년 10월 21일 업데이트

agent-conduct

GitHub Copilot 공식무료

Set shared development rules for an agent team: keep specific agent names out of product code, tests, and CI configuration, verify affected tests before finishing, and record lessons learned from mistakes.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Share development rules across multiple agents
  • Keep team-specific agent names out of code and tests
  • Check affected tests before declaring work complete
github/gh-aw5.4천2026년 10월 21일 업데이트

agentic-workflows

GitHub Copilot 공식무료

Routes requests to design, create, update, debug, or upgrade GitHub Agentic Workflows to the appropriate instructions. It helps the agent select a workflow-specific procedure and apply any additional rules defined for the repository.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Designing a new workflow through questions
  • Investigating failed runs and recurring errors
  • Upgrading workflows and addressing deprecations
github/gh-aw5.4천2026년 10월 21일 업데이트

architectural-proposals

GitHub Copilot 공식무료

Prepare architecture proposals before implementation so the team can agree on a direction. Organize evidence, technical choices, effects on existing work, risks, and the first release’s scope into a document with clear recommendations and decision owners.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Proposing a major architecture change
  • Replanning milestones after a foundation change
  • Comparing technical options before seeking approval
github/gh-aw5.4천2026년 10월 21일 업데이트

awf-release-integrator

GitHub Copilot 공식무료

Update the gh-aw-firewall version used by gh-aw, rebuild generated files, and review release notes and configuration schemas, which define valid settings. It guides related code and test updates while identifying follow-up work that remains.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Updating the firewall version used by gh-aw
  • Reviewing release notes for integration changes
  • Checking configuration schema differences
github/gh-aw5.4천2026년 10월 21일 업데이트

checkout-credential-review

GitHub Copilot 공식무료

Review git and gh operations in gh-aw workflows to check credential availability for each repository. Identify missing token handoffs, risky expansions of limited checkouts, and error handling needed where credentials are intentionally unavailable.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Reviewing git operations after repository checkout
  • Checking tokens for private cross-repository access
  • Reviewing sparse and shallow checkout changes
github/gh-aw5.4천2026년 10월 21일 업데이트

github의 스킬 모두 보기

이 스킬의 문제 신고