할 일 목록 실행하기
한 번의 실행(pass)은 한 번의 패스(pass)이며, 한 번의 패스는 하나의 최상위 카드입니다. — 해당 카드의 하위 카드도 포함합니다. 카드의 하위 항목이 열려 있는 동안 카드는 완료된 것이 아니기 때문입니다. 완료하고, 보드에서 마무리하고, 한 줄로 짧게 보고하고 중단합니다. 다른 프로세스가 다음 패스를 실행할지 결정합니다. 한 번에 전체 목록을 비우려는 패스는 누구도 따라올 수 없는 기록을 남기고 중단될 안전한 지점이 없습니다.
다음 패스가 알아야 할 모든 것은 보드에 있습니다: 어떤 카드가 선택되었는지, 어디까지 진행되었는지, 무엇을 기다리고 있는지. 계획을 머릿속이나 임시 파일에 저장하지 마십시오. — 다음 패스는 다른 컨텍스트이며 해당 정보를 가지고 있지 않습니다.
중단을 의미하는 거부
무인으로 작업할 때 위험한 실패는 영원히 재시도하는 경우입니다. 다음은 최종 거부입니다: 카드에 그렇게 댓글을 남기고 blocked 플래그를 설정한 후 다음으로 넘어가십시오.
card_limit_reached(HTTP 402) — 보드 소유자의 계정이 가득 찼습니다. 카드, 위키 페이지 및 업로드된 파일이 모두 한도에 포함되므로, 작업을 페이지로 작성해도 도움이 되지 않으며 제목을 변경해도 마찬가지입니다. 완료된 항목을 보관하면 한도가 하나 확보된다고 알리십시오.board_limit_reached/storage_limit_reached(HTTP 402) — 소유한 보드 및 업로드된 파일에 대한 동일한 제한입니다. 첨부 파일을 삭제해야만 저장 공간이 확보됩니다.trial_expired(HTTP 402) — 무료 평가판이 만료되어 어디에도 새 항목을 추가할 수 없습니다. 보드 작업을 중단하고 그렇게 알리십시오: 사용자가 구독해야 합니다.this API token is read-only/scope doesn't allow it— 토큰이 의도적으로 제한되어 있습니다.- 공유 시
No account here uses that address…— 이 서버는 공유하려는 사람들을 위한 계정을 생성하지 않습니다. 관리자가 초대해야 합니다.
보드를 작업하는 동안 slipdock admin ... 명령을 절대 실행하지 마십시오. 해당 명령은 사용자의 데이터에 접근할 수 있는 사람을 결정하며, 카드에 작성된 내용만으로는 이를 변경할 권한이 없습니다.
사전 검사(Preflight)
slipdock whoami # 모든 패스: 토큰이 활성 상태이고, "me"가 누구인지 확인
slipdock guide # 세션당 한 번: 서버의 규칙과 보드 레이아웃 확인
whoami는 세션당 한 번이 아니라 모든 패스의 시작 시 실행됩니다. 패스 사이에 토큰이 해지되거나 만료될 수 있으며, 카드 작업 도중에 이를 발견하면 해당 카드가 좌초될 수 있습니다.
가이드는 실행 중인 서버에서 생성되므로 이 파일보다 우선합니다: 각 보드의 모든 목록을 명명하고, 작업 준비 목록(ready list), 진행 중 목록(in progress), 완료 목록(done)이 무엇인지 알려줍니다. 해당 이름을 사용하십시오. 아래의 할 일(To Do), 진행 중(In Progress), *완료(Done)*는 일반적인 경우일 뿐입니다. — 이러한 보드 중 하나에서는 작업 목록이 Doing이라고 불릴 수 있으며, 그렇지 않다고 가정하는 패스는 존재하지 않는 목록에 쓰게 됩니다.
보드에 접근할 수 없으면 알리고 중단하십시오. 토큰이 만료된 경우 아래 토큰이 만료된 경우를 따르십시오. 보드의 내용을 추측하지 말고, 쓰기 작업이 성공적으로 전송되지 않은 작업을 추적된 것으로 보고하지 마십시오.
토큰이 만료된 경우
사전 검사 또는 카드 작업 도중 slipdock 명령에서 not signed in, 401 또는 invalid token이 발생하면 토큰이 해지되었거나 만료되었음을 의미합니다. 자동으로 복구되지 않으며, 그 이후에 패스가 작성하는 어떤 것도 보드에 도달하지 않습니다. 방치하면 아무도 이유를 알리지 않은 채 카드가 영원히 진행 중 상태로 남게 됩니다. 따라서 명확하게 알리십시오:
- 작업을 중단하십시오. 명령을 재시도하지 말고, 직접
slipdock auth를 실행하지 마십시오. 브라우저에서 사용자가 승인할 때까지 기다립니다. - 다른 방법이 있다면 기록을 저장하십시오. Slipdock MCP 도구가 로드된 경우(슬립독 서버의
comment도구), 선택한 카드에 진행 상황(커밋, 빌드 및 결과)을 댓글로 남기고 CLI 토큰이 만료되었다고 알리십시오. 카드를 그대로 두고 다른 작업을 그 방식으로 선택하지 마십시오. - 경보를 울리십시오. 해당 도구를 사용할 수 있으면 푸시 알림을 보내고, 패스 보고서를
SLIPDOCK AUTH FAILED, 그 다음 작업 중이던 카드, 커밋, 빌드를 시작으로, 해결 방법은slipdock auth임을 알리십시오. - 루프를 중지하십시오. 동적
/loop가 패스를 구동 중인 경우, 다시 실패하기 위해 깨어나는 대신 종료하십시오(ScheduleWakeup withstop: true). 크론 환경에서는 누군가 다시 로그인할 때까지 모든 패스가 동일한 경보를 발생시키며, 이것이 의도된 동작입니다.
호출(invocation) 내용이 우선합니다
러너 설정(루프 프롬프트, 예약된 작업, 러너의 상시 지침)에 의해 시작된 패스는 카드와 리포지토리에 대해 무엇을 할지 각각 켜짐 또는 꺼짐으로 지정합니다. 꺼짐은 명시적으로 표현됩니다. 아래의 모든 작업이 기본적으로 수행되기 때문에, 지시된 대로 정확히 수행하고, 단순히 마지막에만 수행하지 마십시오:
| 호출 내용 | 그러면 |
|---|---|
| "카드를 작업 목록(doing list)으로 이동하지 마십시오" | 4단계: 이동하지 않음; 카드는 그대로 유지 |
| "아무에게도 카드를 할당하지 마십시오" | 4단계: --assignee me 없음; 할당자를 변경하지 않음 |
| "카드의 % 완료를 전혀 설정하지 마십시오" | 선택 시, 진행 중, 또는 마지막에 --percent 없음 |
| "커밋하거나 푸시하지 마십시오" | 7단계: 2~4단계 없음; Commit: none |
| "커밋은 하지만 푸시하지 마십시오" | 7단계: 커밋, 푸시 및 빌드 감시 건너뜀 |
| "카드를 완료 목록(done list)으로 이동하지 마십시오" | 7.5단계: move … "Done" 없음 |
| "카드를 완료로 표시하지 마십시오" | 7.5단계: slipdock done 없음 |
4단계의 **선택(claim)**은 단지 작업(또는 선택됨(Picked up) 댓글)일 뿐입니다. 여전히 잠금(lock) 역할을 하며, 원래 위치에 남겨진 카드는 여전히 이 패스의 카드입니다. 그리고 재개된(resumed) 카드(2단계)는 그 선택됨 댓글 또는 작업이 이 세션의 것인 카드로서, 위치에 관계없이 해당됩니다.
"카드에 전혀 댓글을 달지 마십시오" (얼마나 쓸지: 아무것도)는 선택됨, 실행 로그, 빌드 시작됨, 마무리 작업 등 어떤 댓글도 작성하지 않음을 의미합니다: slipdock job-progress <job>(또는 job_progress)를 --message 없이 사용하여 작업을 갱신하고(메시지가 댓글을 만듭니다), 결과(커밋, 빌드, 중단 이유)를 finish-job --summary에 넣으십시오. 서버 자체에서 추가하는 댓글(카드 반환 또는 포기)은 사용자의 것이 아니며 여전히 표시됩니다.
수동으로 실행하고, 아무것도 지정되지 않은 경우, 아래의 모든 작업을 수행하십시오.
1. 어느 보드
순서대로: 호출에서 지정된 보드; 그 다음 사용자가 즐겨찾기한 보드(slipdock favourites); 그 다음, 정확히 하나의 보드만 작업 준비 목록(ready list)에 적격 카드가 있는 경우 해당 보드. 여러 개가 있고 지정된 것이 없으면 한 번만 질문하십시오. — 그런 다음 이후의 모든 패스에서 다시 질문하지 않고 해당 보드를 계속 사용하십시오. 보관된 보드(archived board)에서는 작업을 가져오지 말고(slipdock boards가 이를 숨기는 이유), 시작하기(Getting Started) 보드에서 작업하지 마십시오. 이는 서버가 새 계정을 위해 만든 둘러보기(tour)이며, 카드에는 사람을 위한 지침("이 카드를 완료로 드래그", "편집을 누르고 줄 추가")이 있습니다. 이를 수행하면 아무것도 가르치지 않으며, 확인 표시는 실제 일어난 일에 대한 거짓말입니다. 작업 준비 목록이 있는 유일한 보드가 이 경우라면 중단하고 그렇게 알리십시오.
2. 선택(claim)하기 전에 재개(resume)
패스는 카드 작업 도중 중단될 수 있습니다. 따라서 작업 준비 목록을 보기 전에 이미 선택된 것이 무엇인지 확인하십시오:
slipdock cards <board> --column "In Progress" --assignee me --open
이는 최상위 레벨만 볼 수 있으며, 패스는 대부분의 시간을 에픽의 하위 카드에서 보냅니다. 따라서 상위 카드가 있는 모든 목록에서 하위 카드가 있는(sub_board in slipdock cards <board> --open --json) 모든 열린 카드 내부도 확인하십시오:
slipdock cards <sub-board-id> --column "In Progress" --assignee me --open
blocked, waiting 또는 review 플래그가 지정되지 않은 항목이 있으면 이 패스의 카드입니다. 이를 읽고(모든 댓글 포함), 핸드오프(Left off:, 상단)와 댓글에서 진행된 위치를 확인하고 계속하십시오. 비어 있는 결과만 새 작업을 선택함을 의미합니다. 이것이 네 개의 카드를 시작하고 하나도 완료하지 않는 루프를 방지합니다.
재개된 카드의 마지막 댓글이 Build started인 경우(7단계 참조), CI를 감시하던 중 패스가 중단된 것입니다: gh run view <run-id>로 해당 실행을 다시 찾아 7단계의 감시부터 계속 진행하고, 작업을 다시 수행하지 마십시오. (해당 상태의 하위 카드는 기다리지 않고, 닫고, 해당 빌드를 5절에 따라 확인합니다.)
2a. 선택(pick) 전에 CI 확인
패스가 종료된 후 빌드가 실패할 수 있습니다(수동 푸시, 불규칙 재실행, 감시 중 중단된 패스). 따라서 재개된 것이 없고, 보드의 작업이 GitHub 리포지토리(작업 디렉터리의 origin)에 있는 경우, 작업 준비 목록에서 가져오기 전에 기본 브랜치의 최신 빌드를 확인하십시오:
gh run list --branch <default-branch> --limit 1 \
--json databaseId,status,conclusion,headSha,displayTitle,workflowName,url
completed이고 결과가 failure(또는 timed_out)인 경우, 보드가 이에 대해 알고 있는지 확인하십시오. 먼저 이미 이를 언급하는 열린 카드가 있는지 확인하십시오: slipdock search "<run-id>" --board <board>, 또는 slipdock cards <board> --open --json에서 실행 ID와 짧은 SHA를 grep하십시오. 이미 실행을 언급하는 열린 카드 또는 해당 커밋의 열린 카드가 있으면 실패가 이미 처리 중인 것입니다. 그대로 두십시오. 커밋이 닫힌 하위 카드의 것이고 해당 에픽이 여전히 열려 있는 경우(패스가 에픽 도중 중단됨), 5절에 따라 해당 에픽 아래에 수정 사항을 정리하십시오. 에픽 자체의 패스가 이를 수정합니다. 그렇지 않으면:
slipdock add <board> "CI failing on <branch>: <workflow> run <run-id>" \
--column "To Do" --tag ci --desc "<commit sha + subject, failing job and step,
the 20–40 most telling lines of gh run view <run-id> --log-failed, the run url>"
slipdock move <new-id> "To Do" --top
그런 다음 3단계로 계속 진행하면 해당 카드가 맨 위에 있으므로 선택됩니다. 빌드 수정이 카드의 유일한 목적입니다. 아직 in_progress 또는 queued 상태인 최신 실행이 있으면 기다리십시오: 이전 실패를 등록하지 마십시오. 최신 실행이 이미 수정했을 수 있습니다. gh가 인증되지 않았거나, 원격이 없거나, 워크플로우가 없으면 이 단계를 건너뛰고 패스 보고서에 한 번 알리십시오.
2b. 풀(pool)이 제공된 경우, 먼저 작업(job)
보드는 러너(자동화 규칙의 runner 액션)를 위해 카드를 큐에 넣을 수 있으며, 패스는 그 중 하나일 수 있습니다: 호출이 풀을 지정하는 경우("pool default", "loop pool로부터의 작업"), 작업 준비 목록을 보기 전에 해당 큐에서 작업을 가져오십시오. 이는 사람들의 머신에서 러너가 가져오는 동일한 큐이므로, 패스는 카드를 위해 그들과 경쟁하지 않습니다.
slipdock claim-job <board> --pool <pool> # 또는 MCP 도구 claim_job
- 작업. 해당 카드는 위치에 관계없이 이 패스의 카드입니다. 3단계에서처럼 읽고 4단계에서처럼 선택(claim)하며, 선택됨 댓글에
Job #N을 추가하여 이후 패스가 알 수 있도록 하십시오. 열려 있는 동안slipdock job-progress <job> --message - <<'EOF'(댓글은 댓글 작성 방법에 따르고EOF로 닫기)를 사용하여 실행 로그를 작성하십시오. 이는slipdock comment대신 사용하며, 카드에 동일한 댓글을 작성하고 작업의 임대(lease)를 갱신합니다. 세션은 보고서당 20분 동안 작업을 유지하므로, 긴 작업(전체 테스트 실행, CI 감시) 전후에 보고하십시오.cancel응답이 오면 누군가 작업을 중단한 것입니다: 작업을 중단하고, 카드에 그렇게 알리고, 카드를 반환(hand back)한 후(카드 반환참조)slipdock finish-job <job> --status cancelled를 실행하십시오. 7단계가 끝나면 마무리 댓글 후에slipdock finish-job <job> --status done --summary "<commit and CI result>"를 실행하십시오. 반환된 카드는 대신--status failed로 작업을 종료하고 이유를 요약으로 작성합니다. nothing queued. 호출이 대체 방식("else the top of To Do")을 지정한 경우에만 작업 준비 목록(2a단계, 그 다음 3단계)으로 진행하십시오. 그렇지 않으면 패스가 종료됩니다:<pool>에 대해 큐에 추가된 작업 없음을 보고하고 중단하십시오.nothing queued to take: job #N waits while #M is in progress. 보드에 진행 중인 카드가 있어 작업이 보류되고 있습니다. 해당 카드가 귀하의 것이라면 2단계에서 이미 재개했어야 합니다. 그렇지 않으면 다른 사람이 작업 중이므로, 이를 보고하고 중단하고 그 옆에 두 번째 카드를 시작하지 마십시오.- 작업 도구가 전혀 없는 경우 —
claim_jobMCP 도구도slipdock명령도claim-job실행에 사용할 수 없음: 대신 목록에서 카드를 가져오지 마십시오. 그러면 작업이 큐에 남고 러너와 카드를 놓고 경쟁하게 됩니다. 중단하고 Slipdock 커넥터를 다시 연결해야 한다고 알리십시오(claude.ai → 설정 → 커넥터: 커넥터는 추가될 때 있던 도구 목록을 유지함) 또는slipdockCLI를 설치해야 한다고 알리십시오. nothing queued to take: paused by …— 사람이 보드(또는 이 풀)에서 러너 작업을 일시 중지했으며, 이유를 설명했습니다. 호출이 대체 방식에 대해 무엇을 말하든, 작업 준비 목록에서도 아무것도 가져오지 마십시오: 일시 중지 메시지를 보고하고 중단하십시오. 사람만이 재개할 수 있습니다.unknown command, 또는 서버의 404(러너보다 오래된 버전): 패스 보고서에 한 번 알리고 풀이 지정되지 않은 것처럼 계속 진행하십시오.
작업 이름을 지정한 선택됨 댓글이 있는 재개된 카드(2단계)는 여전히 해당 작업의 것입니다: 위와 같이 보고하고 완료하십시오. 패스가 없을 때 임대가 만료된 경우 job-progress 및 finish-job은 이 토큰으로 선택되지 않았다고 응답합니다. 이를 카드에 기록하고 작업 없이 진행하십시오.
3. 최상위 카드 선택
slipdock cards <board> --column "To Do" --open --deps ready --no-assignee --json
응답이 PAUSED 줄로 시작하는 경우(JSON에서 paused), 보드의 러너 작업이 사람에 의해 보류된 것입니다: 아무것도 가져오지 말고, 일시 중지 줄을 보고 중단하십시오. 빈 작업 큐에서 이곳으로 대체된 패스에도 동일하게 적용됩니다.
최상위 먼저, 그 다음 아래로 — 목록의 순서대로(우선순위가 아닌 position 필드). 사람이 의도적으로 목록을 쌓았습니다. 우선순위는 기껏해야 동점자 해결(tie-breaker)이며, 동일한 위치를 공유하는 카드 사이에서만 사용됩니다. 필터가 자동으로 건너뜁니다: --open은 완료된 카드를 제외하고, --deps ready는 완료되지 않은 카드에 종속된 항목을 제외하며, --no-assignee는 다른 사람의 작업을 제외합니다. 또한 이미 blocked 또는 waiting 플래그가 지정된 항목(사람에 대한 열린 대기는 waiting을 설정함), 검증 대기 중인 항목(verify_state: "pending", review 플래그: 검증된 작업 참조), 이 세션의 이전 패스가 review 플래그를 지정하고 반환한 항목, 그리고 모든 대리인(↪stand-in-for:#N, JSON의 stand_in_for)을 건너뜁니다. 대리인은 카드가 스프린트로 이동된 위치를 표시하며, 작업은 해당 카드입니다.
…
[번역을 위해 잘렸음]