Community생산성 & 협업github.com

Plan Linter (게이트 1 계획 검증기)

개발 시작 전에 task 번들에 대해 게이트 1 결정론적 정적 검사를 실행하고 게이트 2 리뷰 체크리스트를 따릅니다. tasks/ 아래에 task 계약이 존재하고 블래스트 반경, diff 예산, 선언된 파일 토폴로지, 추적성 앵커, 명세 앵커 커버리지, 상속된 ADR, 기계 검사 가능 수락 기준, DAG 비순환성을 확인해야 할 때 사용합니다. 코드 실행, CI 파이프라인 구축, AST/복잡도 검사 또는 테스트 감사(품질 엔지니어링 소유)에는 사용하지 마십시오.

Plan Linter (게이트 1 계획 검증기)란 무엇인가요?

이 스킬은 개발 시작 전에 `tasks/` 디렉토리에 있는 계획된 task 계약과 번들에 대해 게이트 1 결정론적 정적 검증을 수행하는 전담 Plan Linter입니다. Python 표준 라이브러리만으로 빠르고 오프라인에서 실행되며, task ID 일치, 터치 파일 개수, 예상 라인 수, 명세 앵커 일치, ADR 준수, DOD 완전성, 금지된 터치 접두사, 미해결 플레이스홀더, 역방향 토폴로지, 의존성 그래프의 비순환성 등을 확인합니다. 게이트 2는 별도의 `review` 스킬을 통해 수행되는 프롬프트 전용 의미론적 리뷰입니다. 이 스킬은 코드 실행, CI 파이프라인 구축, AST 분석, 테스트 감사 등은 수행하지 않으며, 이러한 영역은 `quality-engineering` 팀이 소유합니다. JSON 출력, 설정 파일, 레거시 형식 지원 등을 제공하며, 실패 시 명확한 오류 코드를 반환합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/formal-you/agent-skills-suite/tree/HEAD/.agents/skills/plan-linter

Installed? Explore more 생산성 & 협업 skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

Plan Linter (게이트 1 계획 검증기)은(는) 무엇을 하나요?

이 스킬은 단일하고 엄격하게 제한된 책임을 가집니다: 개발 시작 전에 tasks/ 아래의 계획된 task 계약 및 번들에 대한 게이트 1 결정론적 정적 검증.

  • 게이트 1은 이 스킬의 결정론적 스크립트입니다: 빠르고, 오프라인이며, 표준 라이브러리만 사용합니다.
  • 게이트 2는 프롬프트 전용 의미론적 리뷰입니다(review 스킬, 폴백으로 references/gate-2-review.md 사용).
  • 비목표: plan-linter는 코드를 실행하지 않으며, CI 파이프라인을 구축하거나 실행하지 않으며, AST/코드 복잡도 분석을 수행하지 않으며, 테스트나 03-qa-verification.md에 기록된 QA 복잡도/뮤테이션 증거를 감사하지 않습니다(플레이스홀더 스캔 및 존재 여부 확인만 수행). 모든 CI 파이프라인과 검증 게이트는 quality-engineering이 소유하며, 로컬 테스트는 qa가 소유합니다.

게이트 1: 결정론적 검사

검사기본값재정의 가능 여부
01-contract.md가 존재하고 유효한 메타데이터를 가짐필수아니요
task_id가 디렉토리 이름과 일치필수아니요
task_id가 번들 전체에서 고유필수아니요
touch_files 개수1..3max_touch_files
estimated_lines50..250min_diff_lines, max_diff_lines
origin_spec_anchor가 #sec-[a-z0-9-]+와 일치필수require_anchor
adherence_adrs가 최소 하나의 ADR을 나열필수require_adrs
dod.type_check, dod.lint, dod.test_file필수아니요
dod.edge_cases 개수최소 2min_edge_cases
02-dev-workspace.md, 03-qa-verification.md, 04-process.md 존재필수require_docs
금지된 touch 접두사tests/acceptance/forbidden_touch_prefixes
01/02/03의 미해결 플레이스홀더차단scan_placeholders
03-qa-verification.md 콘텐츠 수준 QA 증거감사하지 않음 (게이트 3)아니요
역방향 토폴로지: 수정 경로는 존재, 생성 경로는 존재하지 않음경고check_topology, strict_topology, --repo-root
size_class micro: change_id 존재, touch 파일 1개, 더 작은 예산micro일 때 필수micro_min_diff_lines, micro_max_touch_files
change_id가 변경 디렉토리 아래에 열린 제안을 가짐--changes-dir가 주어질 때 필수--changes-dir
명세 앵커 커버리지 매트릭스 (미커버 섹션)보고서; --require-full-coverage 시 오류--spec, --coverage-out
명세에 없는 계약 앵커경고; --strict-anchor 시 오류--spec
의존성 그래프비순환, 누락된 task 없음아니요

모든 것이 검사됩니다; 출력 순서는 안정적입니다.

빠른 시작

# 표준 보고서 또는 기계 판독 가능 JSON
python .agents/skills/plan-linter/scripts/plan_linter.py --tasks-dir ./tasks
python .agents/skills/plan-linter/scripts/plan_linter.py --tasks-dir ./tasks --json

# 사용자 정의 설정 또는 레거시 형식
python .agents/skills/plan-linter/scripts/plan_linter.py --tasks-dir ./tasks --config plan-linter.json
python .agents/skills/plan-linter/scripts/plan_linter.py --tasks-dir ./tasks --legacy

# 게이트 2 휴리스틱 및 차단 CI 모드
python .agents/skills/plan-linter/scripts/plan_linter.py --tasks-dir ./tasks \
  --repo-root . --spec .specs/02-tech-spec.md --changes-dir .specs/changes --json
python .agents/skills/plan-linter/scripts/plan_linter.py --tasks-dir ./tasks \
  --spec .specs/02-tech-spec.md --strict-topology --strict-anchor --require-full-coverage

스크립트는 선택 사항입니다. Python을 사용할 수 없는 경우 references/gate-2-review.md를 수동 체크리스트로 사용하고 동일한 필드를 수동으로 검토하십시오.

게이트 2는 별도의 review 스킬입니다. 게이트 1이 0으로 종료된 후, review 스킬(plan-review 모드)이 설치되어 있으면 이를 사용하여 독립적인 의미론적 감사를 수행합니다. 이 스킬은 references/gate-2-review.md를 review 스킬이 설치되지 않은 경우의 자체 포함 폴백으로 유지합니다; 결코 게이트 1을 대체하지 않습니다.

종료 코드

코드의미
0모든 task 번들에 대해 게이트 1 통과
1위반 발견 (또는 계약 머리말을 구문 분석할 수 없음)
2사용법 또는 설정 오류
3예상치 못한 내부 오류

계약 형식

01-contract.md의 YAML 머리말이 권위를 가집니다. 아래의 사람이 읽을 수 있는 테이블은 선택적인 가독성 보조 도구입니다.

---
task_id: task-001-auth
title: "사용자 인증"
module: auth
dependencies: [task-000-bootstrap]
estimated_lines: 120
touch_files:
  - action: create
    path: src/auth/service.py
  - action: modify
    path: src/auth/routes.py
origin_spec_anchor: "#sec-auth"
adherence_adrs: [ADR-001]
dod:
  type_check: "npm run type-check"
  lint: "npm run lint"
  test_file: "tests/acceptance/test_auth.ts"
  edge_cases:
    - "빈 자격 증명은 400 반환"
    - "만료된 토큰은 401 반환"
---

규칙:

  • task_id는 task 디렉토리 이름과 같아야 합니다; 경로는 저장소 기준이며 슬래시를 사용합니다.
  • touch_files는 금지된 접두사(기본적으로 tests/acceptance/)를 가리킬 수 없습니다.
  • 01/02/03에 플레이스홀더({{...}}, [TBD], TODO)를 남기지 마십시오.

레거시 폴백

YAML 머리말이 없는 계약은 v2 이전 레이아웃에 대해 테이블 폴백을 사용하며, LEGACY_FORMAT 경고를 출력합니다. --legacy를 추가하여 폴백을 강제합니다.

설정

{
  "max_touch_files": 3,
  "min_diff_lines": 50,
  "max_diff_lines": 250,
  "require_anchor": true,
  "require_adrs": true,
  "min_edge_cases": 2,
  "require_docs": ["02-dev-workspace.md", "03-qa-verification.md", "04-process.md"],
  "forbidden_touch_prefixes": ["tests/acceptance/"],
  "scan_placeholders": true,
  "micro_min_diff_lines": 10,
  "micro_max_touch_files": 1,
  "check_topology": true,
  "strict_topology": false,
  "ignore_task_dirs": ["archive"]
}

임계값은 저장소 규칙이지 보편적인 법칙이 아닙니다. 프로젝트별로 재정의하십시오; 알 수 없는 키는 경고를 생성하고, 잘못된 유형의 값은 종료 코드 2를 발생시킵니다.

JSON 출력

{
  "gate": "1",
  "passed": true,
  "tasks_scanned": 3,
  "errors": [],
  "warnings": [],
  "coverage": {
    "spec": ".specs/02-tech-spec.md",
    "spec_anchors": 3,
    "covered": ["#sec-alpha", "#sec-beta"],
    "uncovered": ["#sec-gamma"],
    "contract_anchors_missing_from_spec": [],
    "coverage_ratio": 0.6667
  }
}

coverage는 --spec이 전달된 경우에만 존재합니다; --coverage-out은 이를 파일에 기록합니다.

각 오류 객체는 task, code, message, file, line 키를 가집니다. 오류 코드는 안정적인 영어 식별자입니다(예: MISSING_DOC, TASK_ID_MISMATCH, DAG_CYCLE, PLACEHOLDER, TOUCH_FILE_MISSING, FORBIDDEN_TOUCH_FILE, BDD_MISSING_PRECONDITION, BDD_MISSING_ACTION, BDD_MISSING_OUTCOME, BDD_INVALID_SCENARIO, SPEC_SECTION_UNCOVERED). 보관된 제안은 오류 대신 CHANGE_ALREADY_ARCHIVED를 생성하며, ignore_task_dirs(tasks/archive)는 보류 번들로 스캔되지 않습니다. 전체 오류 참조: references/gate-2-review.md.

게이트 2: 의미론적 리뷰 (프롬프트 전용)

게이트 1이 통과되면 references/gate-2-review.md를 따라 독립적인 리뷰어 역할을 합니다. 다음 중 하나로 요약하십시오:

  • 게이트 2 계획 리뷰 통과: 누락 0개, 환각 0개; 또는
  • 찾기 목록: task 디렉토리, 오염된 필드, 위반된 ADR ID.

게이트 2는 수동입니다: 스크립트는 의미론적 진실성을 판단할 수 없습니다. 리뷰 없이 통과시키지 마십시오.

이식성, 경계 및 비목표

스크립트는 표준 라이브러리만 사용하며, 자신의 디렉토리를 기준으로 상대 경로를 해석하고, 파일을 절대 쓰지 않습니다.

엄격한 경계 및 비목표:

  • 코드 실행 없음: DoD 명령, 애플리케이션 코드 또는 테스트 스위트를 절대 실행하지 않습니다.
  • CI 오케스트레이션 없음: CI 파이프라인을 구축, 관리 또는 실행하지 않습니다(quality-engineering 소유).
  • AST 또는 복잡도 분석 없음: 순환 복잡도 $V(G)$를 계산하지 않습니다(quality-engineering 소유).
  • 테스트 또는 검증 감사 없음: 03 QA 증거를 감사하지 않습니다. 오직 네 문서 존재 확인과 미해결 플레이스홀더 스캔만 03-qa-verification.md를 건드립니다; 복잡도, 베이시스 경로 커버리지 및 뮤테이션 MSI는 게이트 3(quality-engineering/verification_linter.py)이 감사합니다.
  • 의미론적 판단 없음: 의미론적 진실성을 판단하지 않습니다(게이트 2는 프롬프트 리뷰).
  • RBAC 시행 없음: git 기반 RBAC 감사를 대체하지 않습니다.

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

formal-you/agent-skills-suite

Run a bounded brownfield change (bugfix, small feature, behavior tweak) against an existing spec or codebase: proposal -> one task bundle -> dev/QA -> converge -> archive. Use when an existing spec or codebase needs an incremental change (bugfix, small feature, behavior tweak) and a full PRD is overkill. Do not use for greenfield requirements (use prd-generator), architecture decisions (use spec-generator), or pure task slicing (use task-decomposition).

formal-you/agent-skills-suite

Fold confirmed implementation deviations back into the technical spec after a task reaches QA_PASSED, archive the task bundle and close the change proposal. Use when a task bundle records a checked QA_PASSED verdict and its 02-dev-workspace.md deviation log is ready to be written back. Do not use while implementation or QA is still running, and do not use to invent spec content.

formal-you/agent-skills-suite

Implement one planned task bundle as the Dev role: read the contract, change only touch_files, run the machine-checkable DoD, fill 02-dev-workspace.md and hand off to QA. Use when a task contract exists and you are assigned implementation. Do not use for planning, task slicing, architecture, or QA verification.

formal-you/agent-skills-suite

Use on Windows for unexpected DSH sandbox access denials: workspace writes or listing fail, or an ordinarily readable path cannot be read. One bundled command inspects the path and every ancestor and repairs the ACL problems it proves in that same run. Expected confinement denials need no ACL repair.

관련 스킬