Files
Agentic-AI-Template/Codex/Coding/Codex-cs/.codex/skills/harness-workflow/SKILL.md
T
2026-09-04 17:00:34 +09:00

5.8 KiB

name, description
name description
harness-workflow Use when planning or running this C#/.NET Harness framework: reading AGENTS.md and docs/*.md, discussing implementation scope, creating or updating phases/index.json, phases/{task}/index.json, phases/{task}/stepN.md, or invoking scripts/execute.py for staged Codex execution.

Harness Workflow

Overview

Use this skill to turn a user-approved task into small, self-contained Harness steps that another Codex session can execute reliably. This Harness is dedicated to C#/.NET SDK projects and Python Harness scripts. Keep every step grounded in repository docs, C#/.NET constraints, TDD, and executable acceptance criteria.

Workflow

  1. Read AGENTS.md and relevant files under docs/, especially docs/PRD.md, docs/ARCHITECTURE.md, and docs/ADR.md.
  2. Discuss unresolved product or technical decisions with the user before writing phase files.
  3. When the user asks for an implementation plan, draft steps and get approval before creating files.
  4. Create or update phases/index.json, phases/{task-name}/index.json, and one phases/{task-name}/stepN.md per step.
  5. Run the phase with python scripts/execute.py {task-name} when asked to execute it. Use --push only when the user asks to push.

Step Design Rules

  • Scope each step to one layer or module. Split steps when multiple modules would otherwise change together.
  • Make every step self-contained. Do not rely on prior conversation; include all required context and file paths.
  • Force context gathering. Each step must tell Codex which docs and previous outputs to read before editing.
  • Specify interfaces and signatures, not full implementations, unless exact code is required for a constraint.
  • Put core invariants directly in the step: idempotency, numerical conventions, data integrity, API contracts, or other non-negotiables.
  • Use executable acceptance criteria such as python scripts/validate_workspace.py, not abstract statements.
  • For every C# behavior change, require Codex to write the related C# test file first, run it, and confirm that it fails for the expected reason before changing production code. Name the expected test file or test project.
  • Name steps with kebab-case slugs such as project-setup, core-types, or solver-validation.

Phase Files

Create or update phases/index.json:

{
  "phases": [
    {
      "dir": "0-mvp",
      "status": "pending"
    }
  ]
}

Create phases/{task-name}/index.json:

{
  "project": "FESA Harness",
  "phase": "<task-name>",
  "steps": [
    { "step": 0, "name": "project-setup", "status": "pending" },
    { "step": 1, "name": "core-types", "status": "pending" },
    { "step": 2, "name": "validation-path", "status": "pending" }
  ]
}

Rules:

  • project comes from AGENTS.md.
  • phase matches the task directory name.
  • steps[].step starts at 0.
  • Initial status is always pending.
  • Do not add timestamps when creating files. scripts/execute.py records created_at, started_at, completed_at, failed_at, and blocked_at.

Step Template

# Step {N}: {name}

## 읽어야 할 파일

먼저 아래 파일들을 읽고 프로젝트의 아키텍처와 설계 의도를 파악하라:

- `/AGENTS.md`
- `/docs/ARCHITECTURE.md`
- `/docs/ADR.md`
- {previously created or modified files}

이전 step에서 만들어진 코드를 꼼꼼히 읽고, 설계 의도를 이해한 뒤 작업하라.

## 작업

{Concrete instructions with file paths, interfaces, signatures, and rules.}

## Tests To Write First

- {For a C# behavior change, name the exact C# test file and behavior to add before implementation. Require running it first and confirming the expected failure. For a Harness script change, name the exact Python test.}

## Acceptance Criteria

```bash
python -m unittest discover -s scripts -p "test_*.py"
python scripts/validate_workspace.py

검증 절차

  1. 위 AC 커맨드를 실행한다.
  2. 아키텍처 체크리스트를 확인한다:
    • ARCHITECTURE.md 디렉토리 구조를 따르는가?
    • ADR 기술 스택을 벗어나지 않았는가?
    • AGENTS.md CRITICAL 규칙을 위반하지 않았는가?
    • PATH에 설치된 dotnet을 사용하며 SDK 설치나 global.json 고정을 추가하지 않았는가?
    • HARNESS_VALIDATION_COMMANDS가 있으면 우선하고, 그렇지 않으면 루트의 단일 .sln을 우선하며 solution이 없을 때만 루트의 단일 .csproj를 선택하는가?
    • 동일 우선순위의 루트 target이 여러 개일 때 임의 선택하지 않는가?
    • C# production .cs 변경에는 먼저 실패를 확인한 관련 C# test가 존재하는가?
  3. 결과에 따라 phases/{task-name}/index.json의 해당 step을 업데이트한다:
    • 성공: "status": "completed", "summary": "산출물 한 줄 요약"
    • 3회 수정 시도 후 실패: "status": "error", "error_message": "구체적 에러 내용"
    • 사용자 개입 필요: "status": "blocked", "blocked_reason": "구체적 사유" 후 중단

금지사항

  • 다른 언어 또는 npm fallback을 추가하지 마라. Reason: 이 Harness는 C#/.NET SDK 전용이며 언어별 fallback은 validation과 TDD 계약을 흐린다.
  • 기존 테스트를 깨뜨리지 마라.

## Execution And Recovery

Run:

```bash
python scripts/execute.py {task-name}
python scripts/execute.py {task-name} --push

scripts/execute.py creates or checks out feat-{task-name}, injects AGENTS.md and docs/*.md into each prompt, carries completed step summaries forward, retries failed steps up to three times, separates code and metadata commits, and records timestamps.

If a step is error, set it back to pending and remove error_message after fixing the cause. If a step is blocked, resolve blocked_reason, set it back to pending, remove blocked_reason, and rerun.