← 活動記録一覧

FACTUAL ACTIVITY RECORD · 実際の作業をもとにした活動記録

GitHub remote操作前の認証preflightをつくる

CLI認証、Git credential helper、remote branchの実読を順に確認し、古い追跡情報だけで進まない

対象期間:

目的

localのtracking情報ではmainが最新に見えていた一方、実際のpullls-remoteはGitHub認証に失敗していた。その状態で作業を始めた後、認証を直してremoteを読むと、remoteのmainがlocalより先へ進んでいたことが分かった。cached tracking情報だけでは、作業開始時のbaseが最新だと確認できなかった。

CEOは、GitHub remoteを読む、または更新する操作の前に認証状態を確認し、認証が無効なら再認証してからやり直す手順を、agent、Skill、command rule、運用文書へ反映するよう求めた。目的は、remoteを実際に読めない状態で古いtracking情報を根拠に作業を続けないことだった。

実装

原因調査では、GitHub CLIの認証が無効であることと、Git HTTPSがCLIのcredential helperを使う設定になっていないことを分けて確認した。再認証後にcredential helperを設定すると、remote mainの直接読み取りが成功した。この確認を毎回の手作業にしないため、repository rootへscripts/ensure-github-git-authを追加した。

wrapperは引数を受け付けず、GitHub CLIの認証、Gitが使うcredential helperの設定、remote mainの実読みに必要な3段階を順に確認する。認証確認とremote readの出力は破棄し、tokenやcredentialを表示しない。失敗時は終了code 1で停止して復旧手順を示し、引数が渡された場合は終了code 2で拒否する。wrapper自身は再ログインを自動実行せず、運用者が復旧後にpreflightを再実行する境界とした。

scripts/ensure-github-git-auth — failure messageを省略した説明用抜粋
#!/usr/bin/env bash
set -euo pipefail

if [ "$#" -ne 0 ]; then
  echo "usage: scripts/ensure-github-git-auth" >&2
  exit 2
fi

if ! gh auth status --hostname github.com >/dev/null 2>&1; then
  echo "error: GitHub CLI authentication is missing or invalid." >&2
  exit 1
fi

gh auth setup-git --hostname github.com >/dev/null

if ! git ls-remote --exit-code origin refs/heads/main >/dev/null 2>&1; then
  echo "error: git cannot read origin/main with the current GitHub credentials." >&2
  exit 1
fi

echo "GitHub CLI and git remote authentication are ready."

実装では、wrapperのfailure messageに再認証とcredential helper再設定の手順も記載した。git fetchgit pullgit pushgit ls-remotegh prの前にpreflightを実行し、失敗した場合はcached origin/mainを根拠に進めず、再認証後にpreflightをやり直す運用とした。

  • AGENTS.mddocs/operating-model.mdでは、GitHub Auth Preflightをsoftware deliveryの工程へ追加した。
  • .agents/skills/software-delivery/SKILL.mdでは、remote操作の前にpreflightを実行し、失敗時は再認証まで完了してからbranch作成やdeliveryを続けるgateを追加した。
  • .agents/skills/pr-review/SKILL.mdでは、connectorを使えずCLIへfallbackするreviewでもpreflightを必須とし、失敗時はcached tracking情報からreviewせずblockerとして扱うようにした。
  • .codex/agents/full-stack-engineer.toml.codex/agents/pr-reviewer.tomlには、実装とreviewそれぞれの責務に合わせて同じfailure boundaryを追加した。
  • .codex/rules/organization.rulesでは、引数なしwrapper、read-onlyの認証状態確認、credential helperの再設定だけを通常のpreflightと修復操作として許可するentryを追加した。
  • .codex/rules/README.mddocs/setup.mdには、wrapperの処理、再認証手順、古いtracking情報を使わない制約を同期した。

検証では、OSのcredential storeを利用できないrestricted sandboxでwrapperが認証failureとして停止することを確認した。credential storeへアクセスできる実行境界では同じwrapperが成功し、認証済みのCLIとGitからremote mainを読めることを確認した。あわせてshell構文、すべてのCustom Agent TOMLのparse、差分の空白errorを検査した。

この作業では、CEOが認証確認と再認証を運用へ組み込む範囲を示し、汎用のメインAIが原因調査、再認証、10ファイルの実装と検証を行った。Full-Stack EngineerとPR Reviewerは設定変更の対象であり、このActivityの実作業には参加していない。

確認したこと

確認結果

CLI認証、credential helper、remote mainの実読みによるpreflightが一つのwrapperへまとまり、失敗時は古いtracking情報から先へ進まず、復旧後に再実行する運用が設定、2つのSkill、2つのagent定義、command rule、運用文書で一致した。wrapperは再ログイン自体を自動実行しない。

restricted sandboxではcredential storeへアクセスできずwrapperが停止し、credential storeへアクセスできる実行境界では成功した。認証情報を利用できない環境を成功として扱わず、remote readの前に失敗を検出できることを確認した。

shell構文、全Custom Agent TOMLのparse、差分の空白error確認が成功した。変更反映後の最終確認でもpreflightが成功し、GitHub CLIとGitがremoteを読める状態を確認した。command ruleのentryは定義したが、policy evaluatorによるallow判定は実行していない。

wrapperはgithub.comoriginrefs/heads/mainを使う構成に限って確認した。別host、別remote名、別default branch、network failure、service outage、permission不足を個別に識別する動作は確認していない。

完了とした根拠

remote操作前の認証preflightと復旧境界がwrapperと関連する運用入口へ一貫して反映され、認証情報を利用できない環境での停止、利用できる環境でのremote read、shell・TOML・差分の静的検証が確認できたことをもって、このActivityの作業範囲を完了とした。