もくじを開く5.8エラーコード索引

PART 5接続・操作・復旧する5.8

エラーコード索引 — codeから意味と次の操作を引く

aachatのAPI server、chat、aachat、doctor、status、Launch Report、Session起動が返すエラーcodeを、意味と次の操作、詳しいページへのリンクで引ける索引。

手元にerror.codeや表示されたcodeがあるときに、意味と次の操作を引くページである。症状から調べるときはトラブルシューティングを読む。

codeは、どこで見たかで読む節が変わる。同じ失敗でも、WebUI・chat・aachatで表示が違うことがある。

codeを見た場所読む節
WebUI、HTTP APIの応答serverのエラーコードの読み方と、機能ごとの節
Session内のchatの出力chat CLI(Session内)のエラーコードと、機能ごとの節の「chatでの表示」列
aachatの出力aachat CLIのエラーコード
aachat doctorのissues[]aachat doctorの項目とcode
aachat statusのwarnings[]aachat statusのwarnings[]と状態の値
up.logのLaunch ReportLaunch Reportのカテゴリ
Sessionの起動・失敗の表示Sessionの失敗と起動時のcode

どの場合も、codeだけで判断せずmessageとhintも読む。成否がわからない変更操作は、同じ操作を重ねる前に、最初の操作が受け付けられたかを確認する。

serverのエラーコードの読み方

aachatのAPI serverは、失敗するとHTTP statusと{"error": {"code": ..., "message": ...}}の形の本文を返す。errorにはinput(受け取った値)やexisting_session_idが付くことがあり、一部の失敗では本文にdataも付く。codeはほとんどが大文字(VALIDATION_ERROR・NOT_FOUND・SESSION_NOT_RUNNINGなど)で、Project・Ask・Workflowなどの一部は小文字(project_not_active・ambiguous_id・draft_version_conflictなど)である。

同じ失敗でも、読む場所によってcodeの見え方が違う。

読む場所見えるcode
WebUI、HTTP APIserverのcodeそのまま
chat(Session内)chatが小文字の自分のcodeへ読み替える。下の各表の「chatでの表示」列。serverの説明文はmessageに入り、chatの案内はhintに入る
aachatさらに少数のcode(permission_denied・auth_required・prerequisite_missing・internal_errorなど)へ読み替える。aachat CLIのエラーコードを読む

chatの読み替えは次の規則で決まる。

  • HTTP 400・422はinvalid_argumentになる。例外はambiguous_id・AMBIGUOUS_PROJECT・AMBIGUOUS_USER・USER_NOT_FOUND・REPLY_TARGET_NOT_FOUND・INVALID_REPLY_TARGETで、それぞれ小文字の同名codeになる
  • 401はtoken_required、403はnot_authorized(ADMIN_REQUIREDなどの専用codeは除く)、409はconflict、429はnetwork_error、5xxはserver_errorになる
  • 404はmessageの語で決まる。sessionを含めばsession_not_found、agentを含めばagent_not_found、blueprint・repositoryを含めばunexpected_response、それ以外はproject_not_foundである
  • structuredなserver codeをstatusのfallbackより先に判定する。たとえばVALIDATION_ERRORはHTTP 413でもinvalid_argumentになる。一致するcodeがなければ、410・413・426などのstatusはunexpected_responseになる
  • Workflowの検証・状態のcode(invalid_workflow_yaml・draft_version_conflictなど)は、Workflow系のコマンドでは小文字のまま通る
  • 送信後に応答が得られなかった変更操作や、HTTP 408・429・5xxを受けた一部の変更操作(project create・project assign・workflow init・workflow run(--waitを含む)・workflow retry・workflow complete・wait・trigger create・trigger run。Workflowの変更操作は接続失敗でも同じ)はoperation_outcome_unknownになる。新しい要求を作らず、そのcommandのmessageとhintに従う。commandsがあれば各commandの用途を読む(同じ要求の再送)

operation_outcome_unknownからの回復はcommandごとに異なる。

  • workflow init/run/retryとwaitは、commandsの回復commandをそのまま使い、同じnonce・引数・入力を保つ。変更操作の場合もあり、新しいnonceを生成しない
  • workflow completeはcommandsがなくても、同一payloadを同じ閉じた非対話入力から再送し、応答のaccepted:trueを確認する。受付はWorkflowや製品の成功とは別である
  • project createとproject assignはcommandsが必須ではない。hintに従い、createは同じ引数とstdin、assignは同じProjectとagentで回復する。commandが対応していないnonce指定を足さない
  • trigger createとtrigger runのlist/show commandは現在のTriggerを照合する読取りである。現状態を確認してから次の操作を判断する

表の「chatでの表示」が「同じ」ならserverのcodeがそのまま出る。「—」はWebUI・人間専用の操作など、chatからは届かないcodeである。

汎用のcode

どの機能でも返るcode。まずHTTP statusで大まかに判断し、messageで原因を読む。

code(HTTP)chatでの表示意味次の操作
VALIDATION_ERROR(400・422)invalid_argument入力が不正である。理由はmessageにあるmessageに合わせて値や引数を直す
VALIDATION_ERROR(413)invalid_argument入力が大きすぎる小さくするか分割して送り直す(容量・実行条件)
NOT_FOUND(404)上の404の規則による(skill feedbackではsession_not_active、wait showではwait_not_found)対象がない、または見えない。存在しないのか権限がないのかは区別しないことがある一覧でIDや名前を確かめて指定し直す
CONFLICT(409)conflict(messageにsession is not runningを含めばsession_not_running)現在の状態と衝突した。他から参照されているものの削除はCannot delete: referenced by other recordsになる最新の状態を読み直してから判断し直す。同じ要求をそのまま繰り返さない
CONFLICT(412)conflict送ったversionなどの前提が古い最新を読み直し、新しいversionで要求を作り直す
UNAUTHORIZED(401)token_required認証がない・無効・使えない(Not authenticated・Invalid token・This account is no longer available)認証で失敗するを読む。Session内なら人間にaachat upの状態確認を依頼する
FORBIDDEN(403)not_authorized(edit・deleteではmessage_mutation_failed、skill feedbackではforbidden)権限がない。理由はmessageにある下の権限・範囲を読む
RATE_LIMITED(429)network_error短時間の要求が多すぎる。認証の入口ではToo many requests. Please try again later.になる時間をおいて再実行する。Retry-Afterがあればその秒数を待つ(Webhookだけが付ける)
GONE(410)unexpected_response期限切れ・無効になったものを使った(例:Wiki snapshot expired; refresh the list、This client entry link has expired. Ask the team to reissue it.)一覧を読み直す、またはリンクの再発行を依頼する
STORAGE_UNAVAILABLE(503)server_error保存先が一時的に使えない時間をおいて再実行する
INTERNAL_ERROR(500)server_errorserver内部の失敗(Internal server error・Database error)変更操作なら、再送の前に反映されたかを読んで確かめる。続く場合はsupportへ渡す
INTERNAL_ERROR(500、本文にdataあり)server_error一部は保存済みで、その後の処理が失敗した(例:Workflow changes were saved, but subsequent notification or observation failed; inspect the saved target before retrying.)保存された対象を読んでから、残りだけをやり直す
DATABASE_PROVISIONING_CONFLICT(500)など運用側の内部codeserver_error利用者側では直せない内部状態の不整合SQLや秘密情報を含めずに、時刻・Project・codeを添えて報告する

権限・範囲

code(HTTP)chatでの表示意味次の操作
FORBIDDEN(403)not_authorized(edit・deleteではmessage_mutation_failed、skill feedbackではforbidden)操作の権限がない。messageが理由を示す(Owner access required・Owner or admin access required・Only the session owner or session agent can access this session・Agent session does not cover this project・Cannot remove or leave as the last human project adminなど)messageの条件を満たす人に操作か権限付与を依頼する(拒否されたときの確認順)
ADMIN_REQUIRED(403)admin_requiredProject adminの権限が必要である(Admin access required)Project adminに操作か権限付与を依頼する
COLLABORATOR_REQUIRED(403)collaborator_required(edit・deleteではmessage_mutation_failed)Projectへの書込み権限(collaboratorまたはadmin)が必要である(Collaborator access required)書込み権限のあるmemberに追加を依頼するか、書けるProjectを選ぶ
PROJECT_OUT_OF_SCOPE(403)project_out_of_scope(edit・deleteではmessage_mutation_failed)現在のSessionが扱う範囲の外のProjectである(Project is outside the current session scope)そのProjectを扱うSessionから実行する
CROSS_PROJECT_READ_ONLY(403)cross_project_read_only他のProjectは読めるが、変更や仕事の開始はできない自分のProjectで報告し、人間かそのProjectのLeadに任せる(Sessionから他Projectを横断閲覧する)
owned_agent_required(403)owned_agent_required(project create・project assign)、他はnot_authorized元Sessionのownerが所有する、削除されていないagentだけを指定できる所有するagentを選ぶ。他のagentや人間は、権限のある人間の経路で追加する
project_lead_required(403)project_lead_required(project assign)、他はnot_authorized現在のProject LeadのSessionからだけ実行できる。Leadがいない場合はAssign an active Project Lead before delegating work.Project LeadのSessionから実行する。Leadがいなければ先にLeadを決める
project_lead_status_only(403)not_authorizedProject LeadがSessionから変えられるのはstatusのactive・completedだけであるほかの変更はProject adminに依頼する
project_launch_owner_parent_membership_required / project_lead_relation_membership_required(403)not_authorized子Projectの作成やLead変更に必要なmembershipが足りない(Add the parent Lead agent owner as a parent collaborator, then retry.など)messageのmembershipを追加してから再実行する(Leadを変更し、子Projectの成果を読む)

ask_cancel_not_authorizedはAsk・待機にある。

Project

code(HTTP)chatでの表示意味次の操作
PROJECT_NOT_FOUND(404)project_not_foundProjectがない、または見えない(Project not found)chat projects --status allで名前を確かめる(Projectや文書が読めない)
project_not_active(404)project_not_activeProjectがIn progressでないため、中身が隠れている。何も削除されていないProject adminにstatusをIn progressへ戻してもらう(statusと閲覧・実行の可否)
AMBIGUOUS_PROJECT(400)ambiguous_project同じ名前のProjectが複数見える(Multiple visible projects named '<name>')<team>/<project>の形で指定する
project_report_required_for_completion(409)conflictREPORT.mdが不足していてDoneにできない(Create or update REPORT.md, then retry completing this Project.)REPORT不足でDoneにできないを読む
active_child_projects_exist(409)conflictactiveな子ProjectがあるためArchiveできない子をDoneにする、付け替える、またはArchiveしてから再実行する(Archiveを受け付けられない・完了しない)
project_reparent_status_conflict(409)conflict付け替える子がplanning・activeでない、または新しい親がactiveでない子を開き直すか、activeな親を選ぶ
project_relation_cycle(409)conflict自分の子孫を親にしようとした(Choose a parent outside this Project's descendant chain.)子孫の外のProjectを親に選ぶ(引き継ぎBriefを渡して子を移す)
project_lead_membership_required(409)conflict現在のLeadを外す操作の前に、Leadを替える必要がある(Change the Project Lead before ...)先にLeadを変更してから、member削除やviewerへの変更をする
project_launch_idempotency_conflict / project_reparent_idempotency_conflict(409)conflict同じnonceが別の内容の要求ですでに使われている内容が違う要求なら新しいnonceで送る。同じ要求の再送なら引数を元と揃える
project_template_preview_changed(409)conflictpreviewの後にテンプレートや準備したAgentが変わった新しいpreviewを確認してから開始し直す
team_resource_protocol_mismatch(409)conflictクライアントとserverでTeam共有リソース(Workflow revisionなど)の版が合わないaachat updateの後、人間にaachat upとdaemonの再起動を依頼する

Archiveと削除は非同期で進み、途中の失敗はエラー応答ではなくProjectの処理状態に残る。WebUIのCould not complete Archive / Deletion failedに出る。

code(HTTP)chatでの表示意味次の操作
stop_unconfirmed(処理状態)—受付から300秒たってもSessionの停止を確認できない示されたSessionを確認してからRetryを選ぶ(Archiveを受け付けられない・完了しない)
run_cancel_failed(処理状態)—Workflow Runを取り消せなかった示されたRunを確認してからRetryを選ぶ
archive_retry_required(処理状態)—Archiveの処理が内部で失敗したRetryを選ぶ
project_deletion_step_failed(処理状態)—削除の途中の段階が失敗した(Project deletion failed in ... Retry after the dependency recovers.)同じProjectのRetryから再開する(Project削除が失敗した)

Session

code(HTTP)chatでの表示意味次の操作
SESSION_NOT_RUNNING(409)session_not_running(edit・deleteではmessage_mutation_failed、skill feedbackではsession_not_active)対象のSessionが実行中でない(Target session is not running. ...)chat session readで状態を読む。再開できるstopped・failedなら--resumeを付けて送る(Sessionが失敗した・途中で止まった)
session_not_running(409、小文字)session_not_running成果報告などを、実行が受け付けられたturnの外から送った(Session is not running with an execution-accepted turn)実行中のturnの中で報告し直す。turnが終わった後は送れない
stale_bootstrap_generation(409)conflict同じSessionの古いruntimeからの要求である(runtime再起動の後など)chat session readで現在の状態を読む。古いprocessからの記録は受け付けられない
AGENT_RUNTIME_OFFLINE(409)agent_runtime_offlineagentのruntimeが接続していない(Agent runtime is offline. Start or reconnect `aachat up`, then retry.)人間にそのagentのaachat up起動を依頼してから再実行する(Sessionが起動しない)
AGENT_RUNTIME_PROJECT_UNAVAILABLE(409)agent_runtime_project_unavailableruntimeは接続しているが、そのProjectを受け取っていない人間にaachat upの再接続か、agentのProject membershipの更新を依頼する
SESSION_COMMAND_UNDELIVERED(409)session_command_undelivered配送を確認できない、またはruntimeが指示を拒否したmessageを読み、Sessionの履歴・状態・適用結果を確認する。必要なら接続を復旧し、未到達・未適用を確認できた操作だけ一度再送する。許可への回答は専用の復旧手順を使う(runtimeへの配送)
SESSION_PENDING_FOLLOW_UPS(409)session_pending_follow_ups(session finish)、他はconflict送信待ちのfollow-upがあるため、Sessionを終えられない。Sessionは動き続けるこのturnを終え、次のturnで処理してからchat session finishを再実行する
workflow_session_managed(409)workflow_session_managed(session finish)Workflow Step Sessionの終了はWorkflowが管理するsession finishを再実行しない。turnを通常どおり終え、Workflowの完了指示に従う(Session Stepを完了する)
SESSION_ALREADY_STARTED(409)conflictそのSessionはすでに最初のturnを受け付けている動いているSessionを開くか、新しいSessionを始める
CONFLICT(409、existing_session_idあり)conflict(existing_session_idは表示されない)同じclient nonceが、別の内容の起動要求ですでに受け付けられているexisting_session_idのSessionを開く。別の仕事なら新しいnonceで起動する(起動結果の受付)
CONFLICT(409、This session is ready for its first run. ...)conflictまだ一度も実行していないSessionへfollow-upを送ったProjectのcomposerから最初の実行を始める
QUEUED_FOLLOW_UP_NOT_QUEUED / QUEUED_FOLLOW_UP_CHANGED(409)—編集しようとした送信待ちmessageが、もう待っていない、または別の場所で変わった会話とqueueを読み直してから操作する(送信待ちのfollow-upを編集・削除・先に実行する)

live表示のcode

WebUIのlive表示の取得で返る。chatからは届かない。画面にはLive updates could not keep up.やCould not update the live view.などの文が出る(live表示とTool出力の保存)。

code(HTTP)chatでの表示意味次の操作
live_snapshot_busy(429)—live表示の取得が混んでいるRetryで読み直す
live_snapshot_timeout(504)—取得が時間内に終わらなかったRetryで読み直す
stale_active_turn / live_snapshot_unavailable(409)—実行中のturnが変わった、またはlive表示を取れないRetryで読み直す。古いruntimeならDesktopを読む
live_snapshot_encode_failed(500)—live表示を組み立てられなかったRetryで読み直す。続く場合は報告する

成果報告の項目code

chat result reportは、項目ごとの結果をdata.items[]に返す。失敗した項目はstatus: errorで、code・message・retryableを持つ。1項目でも失敗すると、全体のerror.codeはresult_report_incompleteになる(報告の結果を読む)。

code(項目)chatでの表示意味次の操作
project_required同じ記録先のProjectを決められない。Sessionのturnが複数Projectにまたがる、または一つもないその項目にresults[].projectか--project <team>/<project>を付けて送り直す
result_project_conflict同じ指定したProjectが、その成果のProjectと食い違う既存の成果と同じProjectを指定する
invalid_ref同じrefが解決できない、または存在しないrefの形と対象の存在を確かめる
unsupported_ref同じ成果として記録できない種類のrefである対応するrefに変える
delivery_repository_mismatch同じPR・branchのrepositoryがこのSessionのrepositoryでない(<repo> is not a repository of this Session (accepted: ...))acceptedに出たrepositoryのPR・branchを報告する
duplicate_target / duplicate_input同じ同じ対象、または同じinputを一度の報告に重ねた。重なった項目はすべて拒否される一つにまとめて送り直す
version_conflict同じ読んだ後に成果が更新された。currentに現在の値が付くcurrentを読み、新しい通常の更新として送る
result_not_found同じ除外などの対象にした成果がまだない先に成果を記録するか、対象を確かめる
storage_unavailable同じ成果の保存先が一時的に使えない(retryable: true)data.retry_fileを使って再送する
invalid_report同じ上のどれにも当たらない項目の誤り。messageが理由を示す。廃止したdelivery入力を含む項目もこれになるmessageに従ってその項目だけを直す

報告そのものが受け付けられない場合は、項目codeではなく全体のエラーになる。turnの外からはsession_not_running、古いruntimeからはserverのstale_bootstrap_generation(chatではconflict。Session)である。

Ask・待機

code(HTTP)chatでの表示意味次の操作
invalid_ask(422)invalid_argumentAskの入力が不正である(options must be empty or contain 2 to 5 values、Ask creation requires an active regular Projectなど)messageに合わせて直す
invalid_ask_assignee(422)invalid_argument担当者がactiveな人間のProject memberでない。HTTPの本文には候補のcandidatesが付くProject memberの人間を担当者に選ぶ
invalid_ask_filter / invalid_ask_wait(422)invalid_argument一覧の条件やcursor、待ち時間が不正である(timeout_secs must be between 1 and 50など)値を直す。cursorは直前の一覧の値を使う
ask_nonce_reuse(409)conflict同じclient nonceが別の内容ですでに使われている別の要求なら新しいnonceで送る
ask_answer_conflict(409)—回答時に送ったrevisionが最新でない。本文に最新のAsk(latest_ask)が付く最新のAskと回答を読んでから回答し直す(Askへ回答したが続かない)
ask_cancel_not_authorized(403)同じAskを取り消せるのは作成者・担当者・Project adminだけであるそのいずれかに取り消しを依頼する
ask_conflict(409)conflictAskの状態と合わない操作である(Ask is already cancelled・Answered Ask cannot be cancelled・Cancelled Ask cannot be answered・Source Session is terminal・Project is not active)Askの現在の状態を読んでから判断する
ambiguous_id(400)同じ短いIDが複数の対象に一致した(`<prefix>` matches ... Pass one full ID.)candidatesから完全なIDを選ぶ(IDの指定)
VALIDATION_ERROR(400、chat wait)wait_targets_invalid待機の対象が条件に合わないcommandsの読取りで各IDを確かめ、正しい組み合わせを新しいclient nonceで作る(待機(chat wait))

文書・同期・Wiki

aachat upによる文書・HTML・Databaseのmigration・Wikiの同期の失敗は、エラー応答としてではなく、各フォルダの_errors.mdに出る。文書などはsync write attempt API error <status> (<code>): <message>、WikiはWiki write failed (HTTP <status>, <code>): <message>の形である。

code(HTTP)chatでの表示意味次の操作
sync_protocol_version_mismatch(426)unexpected_responseクライアントの版がserverと合わない。認証付きのGET以外の要求と、同期APIのすべての要求で検査されるaachat updateを実行するか、WebUIを再読込する。古い手元のworkspaceは保全してから人間にaachat upの再起動を依頼する(aachat upが起動失敗する・途中で止まる)
write_conflict(409)—手元の変更の元になった版が最新でない(projected file row version mismatch)最新版との照合結果を確かめて直す(ローカル投影での編集競合)
permission_denied(403)—このSessionまたはagentはそのProjectへ書けない(read-only membership、Sessionの範囲外など)。reason: session_closingはSessionの終了処理中で、手元の変更は未保存のまま残るmessageの条件を確かめる。session_closingなら終了処理の結果を確認し、未保存の変更は次のSessionで保存する
project_unavailable(404)—Projectがない、activeでない、またはTeamが使えない(project is unavailable for projected file sync)Projectのstatusを確かめる(Projectや文書が読めない)
invalid_path / invalid_content / invalid_operation(400。大きすぎる内容は413)—path・内容・操作が規則に合わない。理由はmessageにあるmessageに従ってファイルを直して保存し直す。生成された_errors.mdは編集しない(Shared Documentsが同期されない)
storage_unavailable(503) / internal—保存先が一時的に使えない、またはserver内部の失敗時間をおいて同期の再試行を待つ。続く場合は報告する
wiki_conflict(409)—先に他の人がWikiを保存した(The Wiki changed. Your draft is kept.)。原稿は残るWebUIのReview changesで差分を確かめ、解消稿を保存する(Team Wiki)
wiki_reference_conflict(409)—本文のWikiリンク先が移動・削除され、参照の確認が必要である参照先を確かめて解消稿を保存する

Media・添付

送信時のエラー

Sessionへの指示やmessageに添付・Project Mediaを付けたとき、問題があるとINVALID_ATTACHMENT(400)が返る。chatではinvalid_argumentになる(chat session run --attachなどのupload自体の失敗はattachment_upload_failed)。

message意味次の操作
a message can include at most 10 attachments1つのmessageの添付は10件までである件数を減らす
message attachments exceed the 250 MiB total limit添付の合計が250 MiBを超えた小さくするか、分けて送る
the same attachment cannot be included more than once同じ添付を二重に付けた重複を外す
attachment is unavailable; attach the file again添付が期限切れ、別Project・別送信者のもの、または未完了であるファイルを添付し直す
Project Media is unavailable; remove it and retry付けたProject Mediaがreadyでない、または別Projectのものである外して再送する。Mediaがreadyになってから付け直す
attachment metadata changed before the turn was accepted; retry the send ほかmessage attachment ...送信中に添付の情報が変わった、または形が不正であるもう一度送信する

ほかに、messageの先頭にcodeが付く失敗がある。

code(HTTP)chatでの表示意味次の操作
media_limit_exceeded: choose a file between 1 and <max> bytes(413)attachment_upload_failed(chatの添付)宣言したファイルサイズが0か、形式ごとの上限を超える上限内のファイルにする(対応形式と上限)
project_media_quota_exceeded: ...(413)—Project Mediaの合計が20 GiBを超える使わないMediaを削除するか、未完了のuploadを取り消してから再実行する
media_in_use: ...(409)media_delete_conflict現在のShared DocumentやProject HTMLがそのMediaを参照しているため削除できない参照を外してから削除する(削除)
attachment_upload_expired: ...(409)attachment_upload_failed添付のuploadの期限が切れた新しく添付し直す

Mediaと添付の失敗状態

Project Mediaがfailedになると、Mediaのerror.codeとerror.messageに理由が残る。Sessionへの添付の失敗も同じcodeで示される。WebUIのMediaタブや添付の表示で読む。

codechatでの表示意味次の操作
media_upload_failed—uploadされたサイズが宣言と一致しないファイルをもう一度追加する
media_type_not_supported—対応していない形式である画像(PNG・JPEG・WebP・GIF)、MP4、PDFにする
media_invalid—壊れている、途中で切れている、または暗号化PDFで、検証できない正しいファイル・暗号化していないPDFに置き換える
media_limit_exceeded—サイズ・寸法・ページ数・長さなどの上限を超える上限内のファイルに置き換える(容量・実行条件)
media_kind_mismatch—中身が宣言した種類と合わないファイルを置き換える。拡張子だけを変えても形式は変わらない
media_processing_failed—動画を処理できなかったファイルを置き換えて再実行する
media_upload_expired—uploadが期限内に完了しなかったMediaからもう一度追加する

WebUIでの追加の準備に失敗すると、upload_errors[]にupload_temporarily_unavailable(一時的。もう一度uploadする)、upload_preparation_failed(権限を確かめてからuploadし直す)、upload_not_prepared(準備が終わらなかった。もう一度uploadする)が返る。Sessionで同Projectのready一覧にないMediaを読もうとしたときのmedia_unavailableはchat CLIのエラーコードを読む。

Project HTML

Project HTMLのbuildの失敗は、codeではなく説明文でHTMLタブの診断に出る。文の形で探す。

説明文意味次の操作
Project HTML build failed in <path>. ... / ... at reference '<ref>'. ...そのファイル、またはMediaへの参照の書き方が不正である参照をcanonical formに直して同期し直す(同じProjectのMediaを参照する)
Project HTML references Media that is missing or not ready: ...参照したMediaがない、またはまだreadyでないMediaがreadyになれば自動で作り直される。ない・失敗・削除済みなら置き換えを公開し、参照を直す
Project HTML build failed because <path> is <size> bytes after Media references are rewritten; ... / ... the rewritten delivery is <size> bytes; ...参照の書き換え後に、1ファイルまたは全体が上限を超えたファイルや繰り返しの参照を減らして同期し直す(HTMLとShared Documents)

共有とpreviewの操作では、次の文が返る。

code(HTTP)chatでの表示意味次の操作
CONFLICT(409、Project HTML delivery build is not ready. ...)conflict最新buildが使えないため、共有やpreviewができないHTMLタブの最新buildの診断を解消してから再実行する
CONFLICT(409、This project already has a public HTML link. ...)conflictpublic linkはProjectに一つだけである既存のlinkを更新またはresetする(共有する)
CONFLICT(409、Extend the expired public HTML link before resetting its URL.)conflict期限切れのlinkはURLをresetできない先に期限を延ばす
VALIDATION_ERROR(400、expires_in_days must be between 1 and 30 など)invalid_argument期限やpasswordの指定が不正、または何も変更していない1〜30日の期限かpasswordを指定する
STORAGE_UNAVAILABLE(503、Project HTML storage is temporarily unavailable. ...)server_errorHTMLの保存先が一時的に使えない時間をおいて再実行する

Project Database

chat dbでは、DATABASE_SQL_EXECUTION_FAILEDとDATABASE_RESULT_TOO_LARGEだけが小文字の同名codeになる。ほかはHTTP statusで決まる共通のcodeになり、次の操作はhintに入る。

code(HTTP)chatでの表示意味次の操作
DATABASE_NOT_INITIALIZED(409)conflictまだmigrationが一つもない最初のdb/migrations/<id>.sqlを作り、chat db migrate <file>を実行する(tableを作り成果を1件保存する)
DATABASE_PREPARING / DATABASE_OVERLOADED(503)server_errorDatabaseの準備中、または混んでいる少し待って同じコマンドを再実行する
DATABASE_RECONCILING(503)server_errorschemaの状態を照合中である。SELECTとDMLは続けられる照合が終わるのを待って、schemaやmigrateを再実行する
PROJECT_DATABASE_SOURCE_CONFLICT(409)conflictserverにそのmigrationファイルがまだない。同期が終わっていないか、同期で拒否されたdb/_errors.mdにそのmigrationがあれば理由を直して保存する。なければ同期を待つ。その後同じmigrateを再実行する
PROJECT_DATABASE_FROZEN(409)conflictProjectがArchivedのため使えないProjectをarchive解除してから使う
DATABASE_SQL_INVALID / DATABASE_VALUE_UNSUPPORTED(422)invalid_argumentSQLが規則に合わない、または結果に扱えない値がある(BLOBはhex()で変換する)SQLか位置指定の文字列parameterを直す(queryとmigrationのSQL規則は異なる)
DATABASE_SQL_EXECUTION_FAILED(422)database_sql_execution_failedSQLまたは渡した値がDatabaseに拒否された制約と現在の行を確かめ、SQLか値を直す
DATABASE_SQL_RESOURCE_LIMIT(422)invalid_argumentSQLの実行コストが上限を超えた文・parameter数・結果を小さくする
DATABASE_RESULT_TOO_LARGE(413)database_result_too_large結果が大きすぎる列や行を減らす(Project Database)
MIGRATION_ID_CONFLICT(409)conflict同じmigration IDが、違う内容ですでに適用済みである元の内容に戻すか、新しいmigration IDで作る
MIGRATION_VERSION_CONFLICT(409)conflictmigrationの親versionが古いchat db schemaを読み、現在のversionから作り直す
OPERATION_OUTCOME_UNKNOWN(409)conflict書込みが反映されたかわからない同じ書込みを送らない。SELECTで現在の値を確かめる(書き込みを重複させずに復旧する)
DATABASE_SCHEMA_CHANGED(409)—WebUIで見ている間にschemaが変わったDatabase画面を読み直してtableを選び直す
DATABASE_PROVISIONING_CONFLICT(500)server_errorDatabaseの準備で不明な状態が見つかった。運用側の修復が必要SQLや資格情報を含めずに報告する

Workflow

定義と入力の検証

Workflow系のコマンドでは、下のcodeが小文字のままchatに出る。終了コードは2で、invalid_outputとrendered_prompt_too_largeだけは1である。位置はgot、理由はmessageにある。

code(HTTP)chatでの表示意味次の操作
invalid_workflow_yaml / invalid_bundle_path / cyclic_dependency / unknown_step_reference / invalid_prompt_variable / missing_completion_instruction / invalid_completion_instruction(422。client_nonceの誤りは400)同じWorkflow定義・Bundleの検証エラーmessageの箇所を直して検証し直す(定義のfield)
invalid_input / invalid_output(422。128 KiBを超える入力は413)同じ入力・出力がschemaに合わないschemaに合わせて値を直す(入力・出力schemaの対応範囲)
bundle_too_large / rendered_prompt_too_large(413)同じBundle、または展開後のpromptが上限を超えた小さくする(上限と超過時の対応)

Draft・公開・Run・完了

code(HTTP)chatでの表示意味次の操作
draft_version_conflict(409)同じ読んだ後にDraftが変わった最新のDraftを読み直してから変更し直す
workflow_unpublished(409)同じWorkflowが公開されていないDraftを公開してから再実行する(検証・試行・公開)
workflow_archived(409)conflictWorkflowがarchiveされているchat workflow restoreで戻してから、編集・公開・Runの開始をする(アーカイブと復元)
workflow_revision_changed(409)conflict読んだ後にrevisionが変わったrevisionを読み直す
invalid_run_state(409)同じRunの状態がその操作を受け付けない(取消中、retryできないStep、取消できない状態、子Runの直接取消、古い形式の読取専用の履歴など)。理由はmessageにあるRunの状態を読む。古いRunなら新しいRunを始める(状態別の次の操作)
completion_already_submitted(409)同じそのStepはすでに別の完了を受け付けているRun詳細で受け付けた完了を確かめる
completion_session_mismatch(409。Sessionが違うときは403)同じ(403ではnot_authorized)完了を送ったSessionが、担当のWorkflow Sessionでない、またはすでに終了処理に入っている担当のWorkflow Sessionの中で送る。終了済みならRun詳細を読む
workflow_completion_not_ready(409)conflictまだ完了を送る段階でない(Finish the task messages first. ...)作業を続け、Workflowが完了の指示を送ってから完了を送る
workflow_access_revoked(409)同じStepのagentが、そのProjectのactiveなcollaboratorでないagentをcollaboratorに戻してから、そのStepをretryする
workflow_not_found / workflow_run_not_found(404)同じWorkflow、またはRunが見つからないchat workflow listや現在のProjectのRun IDで指定し直す
version_unavailable(404)project_not_found指定したrevision、またはRunの定義を読めないrevisionを指定し直す。Runなら現在の公開版から新しいRunを始める

Stepの失敗code

失敗したStepのerror.codeとerror.messageに残る。Run詳細やchat workflow statusで読む(Runを読み、復旧する)。Sessionが起動の準備中に失敗した場合のconfig_not_offeredなどはSessionの失敗と起動時のcodeを読む。

codechatでの表示意味次の操作
agent_reported_failure同じagentが失敗として完了を送ったSessionの記録で理由を読み、原因を直してからretryする
completion_missing同じSessionが完了を送らずに止まったSessionを読み、retryする
session_failed同じStep Sessionが失敗したSessionのエラーを読んで原因を直し、retryする
workflow_session_rejected同じStep Sessionの作成が拒否された。理由はmessageにあるmessageの原因を直してからretryする
workflow_access_revoked同じ実行中に、Stepの実行に必要な権限が失われた権限を戻してからretryする
workflow_decision_cancelled同じ人間の判断(Decision)のAskが取り消されたretryして新しいAskを作る
workflow_completion_limit_exceeded同じ子Workflowの出力が完了の上限を超えた大きな成果はProjectに保存して参照だけを返すように子を直して公開し、親を新しいRunで始める

Trigger・Webhook

code(HTTP)chatでの表示意味次の操作
time_trigger_request_conflict(409)同じ(trigger create)同じrequest_idが別の内容の作成要求ですでに使われているchat trigger listで照合する。別の作成なら新しいrequest IDで送る
time_trigger_request_deleted(409)同じ(trigger create)その要求で作ったTriggerが削除済みで、作り直されなかった必要なら新しいrequest IDで作る
CONFLICT(409、Trigger changed or is dispatching. Refresh and retry.)time_trigger_changed読んだ後にTriggerが変わった、または起動中である最新のstate_versionを読み直して判断し直す(競合、pause、成否不明から復旧する)
NOT_FOUND(404、Trigger IDを指定するコマンド)time_trigger_not_foundそのProjectにTriggerがないchat trigger list --project <project>でIDを確かめる
CONFLICTほか409(Trigger IDを指定するコマンド、上の文以外)time_trigger_conflictTriggerの現在の状態や権限と衝突したcommandsのchat trigger showで状態と理由を読み直してから操作を選ぶ
invalid_input(422、Webhook)—Webhook要求のJSON・Content-Type・field・metadata・promptが不正である要求を直して送る(応答と再送)
VALIDATION_ERROR(413、Webhook)—本文が256 KiBを超えた(Webhook body exceeds 256 KiB)本文を小さくする
RATE_LIMITED(429、Webhook)—受付の上限に達した(Webhook capacity reached; retry with the same idempotency_key)。Retry-After: 60が付く60秒待ち、同じidempotency keyで再送する

Triggerがpausedのときはpause_reasonが理由を示す。値はmanual・project_inactive・permission_revoked・target_unavailable・input_contract_invalid・workflow_archivedで、それぞれの復旧は競合、pause、成否不明から復旧するにある。

起動の記録(occurrence)はreasonを持つことがある。previous_run_active(前回の仕事が動いているためskip)、superseded_during_downtime(停止中に過ぎた予定をまとめてskip)、previous_run_superseded(前回の仕事を置き換えて受付)である。failedのoccurrenceのreasonには、pauseした理由の説明文が入る。

メッセージ・宛先

code(HTTP)chatでの表示意味次の操作
REPLY_TARGET_NOT_FOUND(400)reply_target_not_found返信先のmessageがないchat read <project>で存在するseqを選ぶ
INVALID_REPLY_TARGET(400)invalid_reply_target返信先がroot messageでない、または別Projectのものである同じProjectのroot messageを選ぶ
MESSAGE_NOT_FOUND(404)thread_message_not_found(thread)、post_type_message_not_found(post-type update)、message_mutation_failed(編集・削除)messageがないchat read <project>でseqを選び直す
MESSAGE_NOT_ROOT / MESSAGE_DELETED(400)post_type_requires_root_message / post_type_message_deleted(post-type update)、編集・削除ではmessage_mutation_failed返信にはpost typeがない、または削除済みのmessageは変更できないroot messageや削除されていないmessageを選ぶ
MESSAGE_POST_TYPE_FORBIDDEN(403) / INVALID_MESSAGE_POST_TYPE(400)message_post_type_forbidden / invalid_message_post_typepost typeを変える権限がない、または値が不正である書けるProjectで、対応する値を指定する
USER_NOT_FOUND / AMBIGUOUS_USER(400)user_not_found / ambiguous_user名前に一致するmemberがいない、または複数いる。agentは<agent>.<owner>の形であるmemberの正確な名前で指定する

Secrets(Tools > Secrets)

WebUIのTools > Secretsの操作は、本文が{"code": ...}だけの応答を返す。説明文は付かない。値の保存や使用許可は、選んだComputerで動くaachatが行う。chatからは使わない(Environment)。

code(HTTP)chatでの表示意味次の操作
invalid_request(400)—要求の形が不正である画面を読み込み直して操作し直す
too_large(413)—要求や値が大きすぎる値を小さくする
not_found / owner_mismatch(404)—対象のComputerやAgentが見つからない、またはそのComputerのSecrets設定が別のownerのものである自分が接続しているComputerを選ぶ
busy(409)—同じComputerで同じ種類の操作が進行中である終わるのを待って再実行する
conflict(409)—操作中に手元の設定や使用許可が変わったRefreshで読み直してから操作する
unavailable(503)—Computerが接続していない、または一つに決まらないそのComputerでaachat upを起動し、Refreshする
unsupported(503)—そのComputerのaachatが古く、この操作に対応していないそのComputerでaachat updateを実行する
local_setup_required(503)—旧形式のlocal設定が残っている認証済みの人間が端末でaachat env adoptを実行する(旧local設定を採用する)
timeout(504)—40秒以内に終わらなかった状態をRefreshで確かめてから再実行する
invalid_data / already_exists / permission_denied / cancelled / unknown(400)—手元の設定・Keychain・.envを読めない、すでに項目がある、OSの許可がない、取り消された、または分類できない失敗対象Computerのファイル権限やKeychainの状態を確かめてRefreshする(要求の確認と反映時点)

Skill

code(HTTP)chatでの表示意味次の操作
skill_not_found / ambiguous_skill同じ(skill feedback)feedbackの対象skillがない、または同名が複数ある。feedbackは保存されていないcandidatesから正確な名前を選ぶ。同名なら--sourceを付ける
skill_source_authorization_required(403)—Skillのrepositoryを読むGitHub接続がない、または失効したConnect repositoryで接続し直す(Skill Ledger)
skill_source_changed / skill_source_revision_conflict(409)—開いた後にsourceや版が変わった一覧から開き直す
skill_source_file_missing(404) / skill_source_ref_missing(502)—ファイル、またはbranchなどの参照が見つからないbranchとファイルの場所を確かめ、一覧から開き直す
skill_source_rate_limited(429) / skill_source_timeout(504) / skill_source_fetch_failed(502)—repositoryの取得が制限された、時間内に終わらなかった、または失敗した時間をおいてRetryする
skill_source_limit_exceeded(413)—取得する内容が上限を超えたSkillのファイルを小さくする

GitHub連携

GitHub APIの失敗は、GitHubのstatusに応じて読み替えられる。401・403・404・429はaachatのUNAUTHORIZED・FORBIDDEN・NOT_FOUND・RATE_LIMITEDになり、messageがGitHub authentication failed.・GitHub access denied.・GitHub resource not found.・GitHub API rate limit exceeded. Please try again later.で始まる。それ以外はGITHUB_ERROR(502)になる。

messageがGitHubで始まるUNAUTHORIZEDは、aachatのサインインではなくGitHubの認証の問題である。chatではどちらもtoken_requiredになるので、messageで区別する。

code(HTTP)chatでの表示意味次の操作
UNAUTHORIZED(401、GitHub authentication failed. ...)token_requiredGitHubの認証が失敗した人間にGitHubの再認証を依頼する(認証で失敗する)
FORBIDDEN(403、GitHub access denied. ...や... requires the `<scope>` GitHub permission. Please re-authorize.)not_authorizedGitHubの権限やscopeが足りない必要な権限で再認証する。repositoryの接続ならGitHub repositoryを接続できない、cloneならDiscoverのcloneが失敗するを読む
RATE_LIMITED(429、GitHub API rate limit exceeded. ...)network_errorGitHub APIの利用制限に達した時間をおいて再実行する
GITHUB_ERROR(502)server_errorGitHub APIが想定外の応答を返した(GitHub API returned an unexpected error (<status>). ...)時間をおいて再実行する

外部AI接続(OAuth)

Connected apps(リモートMCP)のOAuthの入口は、OAuthの標準の形{"error": "<code>"}で失敗を返す。codeはinvalid_request・invalid_client(401)・invalid_client_metadata・invalid_grant・invalid_scope・unsupported_grant_type・temporarily_unavailable・server_error(503)である。これは外部AIのクライアントが扱うもので、利用者は外部AIの接続をやり直す(Connected apps)。

aachat CLIのエラーコード

aachatの通常コマンドは、失敗するとstdoutに一つのJSONを返す。形は{"ok": false, "error": {"code": ..., "message": ..., "field"?, "expected"?}, "data"?, "warnings"?, "next_actions"?}である。まずnext_actionsを読み、次にmessageを読む。dataは部分結果やchange.state(not_applied・applied・unknown)があるときだけ付く。

終了コードは、invalid_argument・missing_argument・conflicting_argumentsが2、それ以外の失敗は1である。aachat up・対話型のaachat support・aachat manage-agent・aachat env --interactive・aachat doc check --hookはJSONを返さない(出力形式)。

serverが返したcode(FORBIDDEN・AGENT_RUNTIME_OFFLINEなど)は、aachatでは下表の少数のcodeに読み替えられる。serverの説明文はmessageに残る。元のserver codeで探すときは、server APIコードの節を読む。

code意味次の操作
auth_requiredaachatの認証が使えない。サインインの期限切れや、serverが認証を拒否した(HTTP 401)場合に出るaachat auth statusを読む。ghが認証済みならaachat auth loginで更新できる。GitHubへのログインが必要なら人間にgh auth loginを依頼する(認証で失敗する)
authentication_requiredaachat auth loginがGitHub CLIの認証tokenを取得できなかった人間にgh auth loginを依頼し、aachat auth loginを再実行する
team_requiredTeamを決められない。接続済みrepoの外で--teamがない、または見えるTeamが一つもない--team <slug>を渡すか、接続済みrepoの中で実行する。aachat statusで接続を確認する
ambiguous_team候補のTeamが複数ある--team <slug>を渡す
team_not_foundrepoの接続先Teamが、今のアカウントから見えないTeamのownerにアクセスを依頼し、aachat statusで確認する
repo_not_connected接続済みrepoが必要な操作を、aachat/README.mdがないrepoやrepoの外で実行した接続済みrepoのrootで実行する。未接続なら人間にaachat initを依頼する
connection_invalidrepoの接続情報(aachat/README.mdの内容や版)が不正で読めないaachat statusのconnection.reasonとnext_actionsに従って直し、aachat initを実行する
permission_denied操作の権限がない(HTTP 403など)。--outputの書込み先の権限不足でも出るTeam・Projectのownerに権限を依頼する。--outputなら書込み先を変える
admin_requiredProject adminの権限が必要な操作であるProject adminに操作か権限付与を依頼する
collaborator_requiredProjectへの書込み権限(collaboratorまたはadmin)が必要である書込み権限のあるmemberに追加を依頼するか、書けるProjectを選ぶ
project_out_of_scope今の資格情報で扱える範囲の外のProjectを指定した対象を扱えるProjectを指定し直す
cross_project_read_only他のProjectは読むだけで、変更できない自分のProjectで報告し、そのProjectの人間かLeadに任せる
project_not_foundProjectが見つからない。存在しないか、見えないaachat project listなどで名前とTeamを確認する(Projectや文書が読めない)
session_not_foundSessionが見つからないaachat session list --agent <name>でIDを確認する
agent_not_foundagentが見つからない。Projectのmemberでないagentを指定した場合も出るagent名を確認し、必要ならProjectへ追加する
blueprint_not_found取得元のrepositoryやblueprintが見つからない・読めない指定した取得元と、GitHubでの閲覧権限を確認する
session_not_running対象のSessionが実行中でないaachat session read <id> --project <project>で状態を読む。再開はSessionが失敗した・途中で止まったを読む
not_found指定した文書path・保存済みの本文・選んだmessageなどが存在しないmessageとfieldを読み、一覧から指定し直す
conflict現在の状態と衝突した(HTTP 409など)。Archiveを妨げるProjectやSessionがある場合も出る状態を読み直し、dataに示された原因を解消してから再実行する
invalid_argument引数・値が不正。Agent Session内で人間専用のaachat操作を実行した場合も出るmessage・field・expectedに合わせて直す。Session内ならnext_actionsのchatコマンドを使う(出力形式)
missing_argument必須の引数やsubcommandがないaachat <command> --helpで必要な引数を確認する
conflicting_arguments同時に使えない引数を渡したどちらか一方だけを渡す
prerequisite_missing前提が欠けている。必要なtool(npxなど)がPATHにない、agentのruntimeが未接続でSessionを始められない、serverとsync protocolの版が合わない、などで出るmessageで原因を区別する。toolを入れる、人間にaachat upを依頼する、aachat updateを実行する、のいずれかを行う
interactive_required端末(TTY)が必要な操作を非対話で実行した。aachat skills addで--skillを指定していない場合も出る人間に端末で実行してもらう。skills addなら--skill <name>を指定する
confirmation_required確認が必要な操作に、確認の指定がない(--yesがない削除、未完了Runがある非対話Archiveでの--cancel-runsなし)人間の承認を得てから、--yesまたは--cancel-runsを付けて再実行する。何も変わっていない(Archiveを受け付けられない・完了しない)
content_changed--fullで続きを読む間に、本文が変わった--offset 0から読み直す
already_exists / io_error--outputの書込みに失敗した。前者は同名ファイルが既にある新しいpathを指定する。既存ファイルは上書きしない
capacity空き容量が足りずに書込みが失敗した、またはaachat statusの容量検査を時間内に片付けられなかったaachat doctorで容量と保持workspaceを確認する(空き容量不足でSessionが始まらない)
network_errorserverへ接続できない。HTTP 429(送信が多すぎる)もこのcodeになる通信を確認し、時間をおいて再実行する。変更操作なら、再実行の前に最初の操作が受け付けられたかを確認する
server_errorserverが5xxを返した時間をおいて再実行する。続く場合はaachat reportで報告する
internal_error上のどれにも当てはまらない失敗。ローカルのファイル・Gitの失敗や、想定外の応答で出るmessageを読み、aachat supportへcodeとmessageを渡す

chat CLI(Session内)のエラーコード

Session内のchatは、失敗するとstdoutに{"ok": false, "error": {"code": ..., "message": ..., ...}, "data"?: {...}}を一つ返す。errorには、あればcommand・project・name・field・got・expected・candidates・available_agents・commands・reply_to・hintが付く。commandsは次に実行できるcommand locatorの配列である。

messageは、serverの説明文があればその文、なければ次の操作の案内である。serverの説明文がmessageに入ったときだけ、案内がhintに分かれて付く。

終了コードは、invalid_argument・missing_argument・conflicting_argumentsと、Workflowの検証エラー(invalid_input・invalid_workflow_yaml・invalid_bundle_path・bundle_too_large・cyclic_dependency・unknown_step_reference・invalid_prompt_variable・missing_completion_instruction・invalid_completion_instruction)が2、それ以外は1である。

chatはserverのcodeを小文字のcodeへ読み替える。たとえばserverのAGENT_RUNTIME_OFFLINEはagent_runtime_offline、FORBIDDENはnot_authorizedになる。

共通のcode

code意味次の操作
session_requiredAA_SESSION_IDがない環境で、Session専用のコマンドを実行したaachat Sessionの中で実行する。Session外ではaachatを使う
token_requiredagentのtokenがない(AA_TOKEN_FILE・AA_TOKENが未設定)、またはserverがtokenを拒否した(HTTP 401)aachat upが起動したSessionの中で実行する。続く場合は人間にaachat upの状態確認を依頼する
invalid_argument引数・値が不正。入力ファイルやstdinが読めない、AA_SESSION_IDがUUIDでない、serverが入力を拒否した場合も出るfield・got・expected・messageに合わせて直す
missing_argument必須の引数やsubcommandがないchat <command> --helpで確認する
conflicting_arguments同時に使えない引数を渡したどちらか一方だけを渡す
not_authorized権限がない(HTTP 403)現在のSessionのtokenで実行しているかを確認し、Project memberに権限を依頼する
admin_requiredProject adminの権限が必要であるProject adminに操作か権限付与を依頼する
collaborator_requiredProjectへの書込み権限(collaboratorまたはadmin)が必要である書込み権限のあるmemberに追加を依頼するか、書けるProjectを選ぶ
ask_cancel_not_authorizedAskを取り消せるのは作成者・担当者・Project adminだけであるそのいずれかに取り消しを依頼する
project_not_foundProjectが存在しないか、このagentから読めない。二つは区別されないchat projects --status allで名前を確認する(Projectや文書が読めない)
project_not_activeProjectがIn progress(active)でないProjectのstatusを In progress にするか、Project adminに依頼する(Sessionが起動しない)
project_out_of_scope現在のSessionが扱うProjectの外である対象を扱うProjectを選ぶか、そのProjectを扱うSessionを始める
cross_project_read_only他のProjectは読むだけで、変更できない自分のProjectで報告し、人間かそのProjectのLeadに任せる
session_not_found / ask_not_found指定したProjectに、一致するSession・Askがないcommandsの一覧でIDを確認するか、別の--projectを選ぶ
session_not_running対象のSessionが実行中でないchat session readで状態を読む。再開できるstopped・failedなら--resumeを付けて送る(Sessionが失敗した・途中で止まった)
agent_not_found / ambiguous_agent名前に一致するactiveなagentがない、または複数あるavailable_agents・candidatesから正確な名前を選ぶ
agent_runtime_offlineagentのruntimeが接続していない人間にそのagentのaachat up起動を依頼してから再実行する(Sessionが起動しない)
agent_runtime_project_unavailableruntimeは接続しているが、そのProjectを扱えない人間にaachat upの再接続か、agentのProject membershipの更新を依頼する
session_command_undelivered配送を確認できない、またはruntimeが指示を拒否したmessageを読み、Sessionの履歴・状態・適用結果を確認する。必要なら接続を復旧し、未到達・未適用を確認できた操作だけ一度再送する。許可への回答は専用の復旧手順を使う(runtimeへの配送)
ambiguous_id短いIDに一致する対象が複数あるcandidatesから完全なIDを一つ選ぶ(IDの指定)
ambiguous_project / ambiguous_user / user_not_foundProject名・user名が複数に一致する、または一致しないchat projects --status allや、より具体的な名前で指定し直す
reply_target_not_found / invalid_reply_target / thread_message_not_found返信先やスレッドのmessageがない、またはroot messageでないchat read <project>で存在するseqを選ぶ
operation_outcome_unknown変更の要求がserverで受け付けられたかわからない。送信後に応答が得られなかった場合や、HTTP 408・429・5xxで出る新しい要求を作らない。そのcommandのmessageとhint、上記のcommand別の回復案内に従う。commandsは変更操作・読取りの場合も、省略される場合もある(同じ要求の再送)
conflict現在の状態と衝突した(HTTP 409)Sessionなどの状態を読み直し、衝突が解消してから再実行する
network_errorserverへ接続できない。成否不明として扱わない操作でのHTTP 429もこのcodeになる通信を確認し、時間をおいて再実行する
server_errorserverが5xxを返した時間をおいて再実行する。続く場合は報告する
unexpected_response応答がchatの想定と合わない、または分類できない失敗chat --versionを記録し、codeとmessageをsupportへ渡す
output_write_failed結果をstdoutへ書けなかった出力先(pipeなど)を確認する

機能ごとのcode

code意味次の操作
ask_wait_timeout指定した待ち時間が過ぎても、Askが開いたままであるcommandsのchat ask showで現在の状態を読む
wait_targets_invalid待機の対象(Session・Workflow Run・Ask)が条件に合わないcommandsの読取りで各IDを確認し、正しい組み合わせを新しいclient nonceで作る(待機(chat wait))
wait_not_found指定した待機が見つからない待機ID・元Session・Projectが作成時の受領と一致するか確認する
workflow_not_found / workflow_run_not_foundWorkflow、またはそのRunが見つからないchat workflow listや現在のProjectのRun IDで指定し直す(Workflows)
workflow_bundle_not_readyworkspaceのmirrorが、Bundleの最新状態を時間内に確認できなかった。何も開始・公開されていない編集を加えずにcommandsの同じコマンドを再実行する
draft_version_conflict待つ間にserverのDraftが変わった、または衝突マーカーが残っている。何も送られていないdata.conflict_files・data.changed_filesを読んでマーカーを解消し、同じコマンドを再実行する
workflow_validation_failedWorkflow Bundleが検証に通らなかったdataの検証結果を読んで直す
invalid_workflow_yaml・invalid_bundle_path・bundle_too_large・cyclic_dependency・unknown_step_reference・invalid_prompt_variable・missing_completion_instruction・invalid_completion_instruction・invalid_input・invalid_output・rendered_prompt_too_largeWorkflowの定義・入力・出力の検証エラーfield・gotの位置とmessageを読んで直す(Workflows)
workflow_session_managedWorkflow Step SessionはWorkflowが終了を管理するchat session finishを再実行しない。このturnを通常どおり終え、Workflowの完了指示に従う
session_pending_follow_ups送信待ちのfollow-upが残っているため、Sessionを終えられないこのturnを終え、次のturnで処理してからchat session finishを再実行する
time_trigger_not_found / time_trigger_changed / time_trigger_conflictTriggerが見つからない、読んだ後に変わった、または現在の状態と衝突したcommandsで最新のTriggerとstate_versionを読み直してから決める(競合、pause、成否不明から復旧する)
time_trigger_request_conflict / time_trigger_request_deleted同じ作成要求IDが別内容で使われた、または作成済みのTriggerが削除されているmessageとdata.mutation_stateを読み、chat trigger listで照合する
trigger_target_unavailable / trigger_agent_not_foundTriggerの起動先が使えない、またはagent名に一致するmemberがいないcommandsの一覧から正確な起動先を選ぶ
webhook_request_requiredWebhook Triggerには時刻のpreviewがない認証付きのJSON要求をwebhook URLへ送って確認する(Triggers)
media_unavailableそのMediaはまだreadyでないか、このProjectにないcommandsのchat media <project>に出るまで使えない(Media)
media_download_failedMediaの取得に失敗した。ファイルは書かれていない一度だけ再実行する。再び失敗したら報告する
media_delete_conflict現在の状態ではMediaを削除できない。Shared DocumentやProject HTMLがまだ参照している場合などに出るmessageを読み、参照しているファイルから参照を外す。commandsのchat media <project>で読み直し、一覧にある場合だけ削除を再実行する
attachment_upload_failed添付のuploadに失敗した。Sessionへの指示は送られていない添付のpathと通信を確認して再実行する
project_lead_not_parent_member / ambiguous_project_lead指定したLeadが親Projectのactiveなmemberでない、または複数に一致するcommandsのchat project assignで親Projectへ追加するか、candidatesから選ぶ
owned_agent_required元Sessionのownerが所有する、削除されていないagentだけを指定できる所有するagentを選ぶ。それ以外は権限のある人間の経路で追加する
project_lead_required現在のProject LeadのSessionからだけ実行できるProject LeadのSessionから再実行する
skill_not_found / ambiguous_skillfeedbackの対象skillがない、または同名が複数ある。feedbackは送られていないcandidatesから正確な名前を選ぶ。同名なら--sourceを付ける
session_not_active / forbiddenskill feedbackを送れるSessionの状態でない、またはtokenが現在のSessionのものでない実行中のSessionから、そのSessionのtokenで送る
message_mutation_failedmessageを変更できない(存在しない、削除済み、自分のmessageでない、書込み範囲の外など)hintに従い、chat read <project>で対象のseqを選び直す
post_type_message_not_found / post_type_requires_root_message / post_type_message_deleted / message_post_type_forbidden / invalid_message_post_typepost typeを変更できないmessageや値を指定したchat read <project>で存在するroot messageを選び、許可された値を指定する
database_sql_execution_failed / database_result_too_largeSQLの実行に失敗した、または結果が大きすぎる制約と値を確認してSQLを直す。結果が大きければ列や行を減らす(Database)
result_report_incomplete成果の一部が記録されなかった示された再送用のpayloadをそのまま再送し、失敗した項目のmessageに従う。元の作業は繰り返さない
result_retry_persistence_failed再送用ファイルの作成または更新に失敗した。送信前後の両方で起こるdata.mutation_state・retry_file_state・items・retry_payloadを読む。元batchやstaleなfileを再送しない(成果報告の復旧)
inbox_mark_incomplete既読の更新の一部が確認できなかったdata.unconfirmedを読み、一覧を読み直す
publication_preparation_failedDiscover公開の準備に失敗したmessageの原因を直して再実行する

aachat doctorの項目とcode

aachat doctorのdata.diagnostics.issues[](--view checksではchecks[])の各項目はidとcodeを持つ。codeは既定でidと同じで、原因がわかるときだけ別の値になる。状態はstate(pass・fail・unknown・skipped)、重さはcategory(blocker・preservation・maintenance・information)で読む。overallの読み方はまず診断するにある。

診断自体が中断した、または子プロセスの回収を確認できなかった場合は{"ok": false}・終了コード1になり、error.codeはinternal_error、error.messageはcancelledやprobe_cleanup_unverifiedである。取得済みの項目はdataに残る。

項目(id)

id何を見るかfailやunknownのときの次の操作
platformaachatの版とOS情報のみ
user_jwt保存されたサインイン情報の期限と形式。User JWT: expiredは期限切れ人間の承認を得てaachat auth loginを実行する(認証で失敗する)
github_clighがあるかghを入れる
github_authgh auth statusを確認できたか。unknownは未認証の証拠ではないgh auth statusを読む
github_scopesGitHub tokenにrepo・read:userのscopeがあるかfailなら人間にgh auth refresh -s repo,read:userを依頼する
nodeNode.jsがruntime adapterの最低版を満たすか対応版のNode.jsを入れる
chat_companion同梱のchatがあり、CLIと同じ版かCLIの導入を確認し、aachat doctorを再実行する
runtime_path / login_shell_pathruntimeのPATHを組み立てられるか、login shellのPATHを取得できたかPATHの設定を確認する。値は共有しない
provider_readiness常に未検査(not_applicable)。providerのログインやモデル呼出は行わない情報のみ
wsl2_systemd / loginctl_lingerLinux・WSL2のuser service設定。他のOSではnot_applicablemessageの手順で確認する。設定変更は人間の承認を得る
api_health / api_workspace_handshakeAPIへ届くか、保存済みサインイン情報でworkspace APIを呼べるか。失敗時のcodeはnetwork_error・auth_required・server_errorなどaachat CLIのcodeになるaachat statusで接続と認証を確認する
daemonaachat upのprocessが動いているか停止中なら人間にaachat upを依頼する
project_workspace_host / project_workspace_repo投影(Project文書などを手元に写す仕組み)の配置に障害がないか。codeは下の投影の配置codeになる下の表を読む
projection / projection_observation / projection_write / projection_project / projection_team / projection_sync_time同期の状態。codeは下の同期codeになる下の表を読む
session_workspace_capacitySession workspaceの置き場所に20 GiBの空きがあるか空き容量不足でSessionが始まらないを読む
session_workspace_maintenance / session_workspace_retained / session_workspace_artifact保持されたSession workspaceの検査結果。codeは下のworkspace保守codeになる作業を保全してから、各項目のnext_actionsに従う

検査が終わらなかったときのcode

code意味次の操作
probe_timeout検査が時間内に終わらなかった。その項目は未確認である他の項目は有効である。対象を絞って確認する
probe_output_limit検査の出力が上限を超えた同上
probe_failed検査を完了できなかった。必要な実行ファイルがない場合も出るreasonを読み、該当する依存を確認する
cancelled中断された。後の検査はskippedになるもう一度実行する
probe_cleanup_unverified検査の子プロセスの回収を確認できなかった。後の検査はskippedになるもう一度実行する。続く場合はsupportへ渡す
not_applicableこの環境では対象外(他のOS、aachat up停止中の同期項目など)。未完了扱いにはならない不要
workspace_inspection_complete / workspace_inspection_incompleteworkspace検査の要約。completeは観測範囲の分類と計測が終わったという意味で、問題なしではないincompleteならcoverageを読み、未確認の範囲を絞って調べる

同期のcode

code意味次の操作
sync_protocol_version_mismatchCLIの同期protocolがserverと合わず、同期が止まった。最後に同期したファイルは残るが最新ではない自動更新の途中かを確認し、aachat updateの後に人間にaachat upの再起動を依頼する(aachat upが起動失敗する・途中で止まる)
workspace_mirror_error最後に観測したrepo側のmirrorがerrorだった。今の同期は未確認であるaachat statusで現在の状態を読む
projection_write_blocked手元の書込み、または診断ファイル(_errors.md)で同期が止まっている診断の原因を直す。生成された_errors.mdは編集しない(Shared Documentsが同期されない)
projection_pending手元の書込みが未送信である送信の完了を待ち、aachat statusで確認する
projection_observation_failedこのpathの観測に失敗した。件数は一部だけであるpathの権限とfilesystemを確認する
project_sync_failed / sync_list_unstable / invalid_sync_listProjectの同期に失敗した。後の二つはserverから受け取った一覧が安定しない・不正な場合であるaachat statusで対象Projectの状態を読み、時間をおいて確認する
project_sync / projection / team_projection該当する問題のcodeがない同期項目の既定値stateとreasonを読む
team_projection_revokedTeamへのアクセスが取り消され、Teamの投影が止まった人間にTeamへのアクセス回復を依頼する
projection_sync_time同期の成功時刻がない・不正・未来であるaachat statusで確認する

投影の配置のcode

project_workspace_host・project_workspace_repoのcode、およびaachat statusのprojection.reasonの先頭に出る。

code意味次の操作
projection_namespace_migration_required旧形式の投影の状態が残っている。通常の起動では移行しないlayout移行が必要と言われるを読み、aachat supportを起動する
projection_namespace_migration_pending旧形式からの移行が途中で止まっているrootを保全し、aachat supportで復旧する
projection_namespace_split_brain旧形式の状態と新形式の状態が同時にあるworkspaceを保全し、aachat upを再起動する前に復旧する
projection_unknown_top_level_entry投影の管理領域に未知のファイルがあるそのファイルを管理領域の外へ移し、aachat upを再起動する
projection_root_invalid / projection_owner_root_invalid投影の管理領域がlocal directoryでない(symlinkなど)local directoryに置き換え、aachat doctorを再実行する
projection_root_unreadable / projection_owner_root_unreadable / projection_entry_unreadable投影の管理領域を読めない読取り権限を戻し、aachat doctorを再実行する
project_workspace_projection_invalidProject workspaceの投影の状態が不正であるaachat supportを起動する。生成されたbaselineや診断を直接編集しない
project_workspace_layout_upgrade_availablelayout 7をlayout 8へ上げられる(通知のみ)不要。次のSession起動で記録だけが更新される

workspace保守のcode

session_workspace_maintenance・session_workspace_retainedのcodeに出る。どれも削除の許可ではない。手元の作業を保全してから対応する。

code意味
uncommitted_workspace_changes / uncommitted_agent_changes未commitの変更がある
local_workspace_commits / local_agent_commitspushが確認できないcommitがある(手元のremote-tracking refだけで判定)
non_git_workspace_filesGit管理でないworkspaceにファイルがある
wiki_local_work未保存のWiki下書きがある
builtin_agent_local_work組み込みAgentのsnapshotに編集がある
agent_owned_workspace_headHEADがaachat管理のbranchでないため、agentのGit状態として保持した(session_workspace_retained、情報のみ)
agent_cleanup_metadata_missing片付けに必要な記録がない
git_inspection_failed / cache_lock_failed / common_git_dir_missingGitの状態を確認できなかった
worktree_remove_failed / branch_remove_failed / scratch_workspace_remove_failed / builtin_agent_remove_failed / workspace_identity_remove_failed削除に失敗した
workspace_repository_mismatch / workspace_repository_unknownworkspaceのrepositoryが記録と違う、または確認できない
workspace_identity_missing / workspace_identity_invalid / workspace_identity_mismatch / orphan_workspace_identityworkspaceの所有Sessionの記録がない・不正・食い違う、または対応するworkspaceがない
workspaces_dir_unreadable / workspace_entry_unreadable / workspace_identities_dir_unreadable / workspace_identity_entry_unreadable / workspace_identity_target_unreadable / workspace_identity_unreadable / scratch_workspace_unreadable / scratch_workspace_entry_unreadable読取り権限などで読めない
workspace_inventory_boundary_unknown / scratch_workspace_boundary_unknownfilesystemの境界を確認できない
wiki_inspection_failedWiki下書きの確認に失敗した

次の操作は各項目のnext_actionsに出る。未commit・未pushの作業は、commit・pushするか別の場所へ保存する。「読めない」「確認できない」系は権限とpathを確認し、aachat doctorを再実行する。

aachat statusのwarnings[]と状態の値

aachat statusは成功してもwarnings[]とnext_actionsを返すことがある。次に行う操作はnext_actionsに出る。

warnings[].code意味次の操作
project_sync_unavailable一部のProjectの同期が使えない。最後に同期したファイルは残り、そのProjectへの書込みは止まるaachat doctorのprojection_projectで対象と原因を読む
session_workspace_capacitySession workspaceの空きが20 GiBを下回る、または測れないmessageの指示に従う(空き容量不足でSessionが始まらない)
session_workspace_capacity_incomplete / session_workspace_capacity_unavailable容量の検査が時間内に終わらなかった、または実行できなかったaachat doctorで容量を確認する
session_workspace_maintenance過去のworkspaceに手元の作業や要確認のものがあり、保存された。runtimeの起動は妨げないaachat doctorでpathと手順を読む
field値意味
connection.stateready / connected / missing / invalid / unavailable接続とTeamアクセスを確認済み / 手元の接続だけ確認 / repo外か接続なし / 接続情報が不正 / 未登録・Teamが見えない・確認できない
auth.statevalid / expired / missing / invalid / unavailable保存されたサインイン情報の状態。unavailableは読めなかった
daemon.staterunning / stopped / unknownaachat upの稼働状態
projection.staterunning / stopped / error / blocked / missing / unknown同期中 / 停止中 / 同期に障害がある(protocol不一致を含む) / 投影の配置に障害がある / 投影先が未作成 / 確認できない
gaps[].codeunavailableそのfieldを観測できなかった。問題がないという意味ではない

projection.stateがblockedのとき、projection.reasonは<code> at <path>: <説明> Next: <次の操作>の形で、<code>は投影の配置のcodeである。errorのときの読み方はaachat upが起動失敗する・途中で止まるにある。

Launch Reportのカテゴリ

aachat upは、agentごとの起動結果をLaunch Reportとしてup.logに書く。失敗したagentは[failed] <agent>の下にError [<カテゴリ>]: ...とaction:が並ぶ。agentの[failed]があってもaachat up自体は動き続ける。

aachat up自体が失敗して終了したときは、同じカテゴリがup.logに出て、終了コードはカテゴリで決まる。

カテゴリaachat up自体が終了したときの終了コード見る場所
PREREQ2aachat doctorの指示。不足しているtool
CONFIG2表示されたagent repoのファイルや設定
AUTH3gh auth status。必要なら人間がgh auth loginを実行する
NETWORK4通信とserverの状態
API1serverの状態とmessage
PERMISSION_DENIED1Team・Projectのアクセス権
GIT1GitHubへの接続・認証・branch設定と、agent repoの状態
CAPACITY1aachat doctorの保持workspaceと空き容量(20 GiB)
IO1表示されたpathのファイル

カテゴリごとの対処とRuntime Healthの読み方はaachat upが起動失敗する・途中で止まるを読む。

Sessionの失敗と起動時のcode

Sessionが起動の準備中に失敗すると、Sessionのruntime_facts.bootstrap.failureにstep(失敗した準備の段階)・message・code・subjectが残る。WebUIはmessageとInitialization step: <step>を表示する。codeは次の4つで、ほかの失敗では付かない。どれもpromptを送る前の失敗である。Workflow Stepでは、同じcodeがAttemptの失敗として出る。Step SessionがこれらのcodeなしでSession失敗したときは、Attemptの失敗codeはsession_failedになる。

code意味次の操作
workspace_capacity_insufficientSession workspaceの空きが20 GiBに足りない。toolの実行やworkspaceの作成は始まっていない空き容量不足でSessionが始まらないを読む
config_not_offered指定したRuntime設定(subjectのoption)をruntimeが提供していない設定を外すか、別のRuntimeを選ぶ。Workflowならchat project members <project> --runtime-profilesで確認してworkflow.yamlを直す(Runtimeとモデルの既定値)
config_value_not_accepted指定した値をruntimeが受け付けない提供されている値を選ぶ
config_not_proven設定が適用されたことを確認できなかった(拒否・timeout・読めない応答を含む)runtimeとadapterを確認する。Workflowで同じ設定のままでよければ、retryできるStepだけをretryする

aachat session list・session readの結果では、失敗したSessionのerrorが{"code": "session_failed", "message": ...}となる。一覧のattention.items[].codeはpermission_pending(許可の回答待ち)・submission_pending(未処理の依頼がある)・failure(失敗した)である。失敗したSessionの続け方はSessionが失敗した・途中で止まったを読む。