議題建立
核心規則
在提議或發佈之前,先探索目標倉庫的貢獻工作流程。YAML 議題表單是預設自動化路徑的格式權威:將審查過的答案具體化為私有的 BODY_FILE,並使用 --body-file 發佈。
安全探索
先執行唯讀檢查:
gh auth status
REPO="$(gh repo view --json nameWithOwner -q .nameWithOwner)"
REPO_URL="$(gh repo view --json url -q .url)"
HOST="${REPO_URL#*://}"
HOST="${HOST%%/*}"
TARGET="$HOST/$REPO"
gh repo view --json nameWithOwner,url,hasDiscussionsEnabled,hasIssuesEnabled,isBlankIssuesEnabled
git ls-files README.md CONTRIBUTING.md CONTRIBUTING.* .github/CONTRIBUTING.md .github/ISSUE_TEMPLATE .github/ISSUE_TEMPLATE/config.yml
gh api --hostname "$HOST" --paginate "repos/$REPO/labels?per_page=100" --jq '.[].name'
檢查 README.md、貢獻說明、.github/ISSUE_TEMPLATE/config.yml 聯絡連結、表單、標籤,以及已開啟和已關閉的議題。對於問題/支援,如果可用,請遵循倉庫規定的 Discussions/聯絡路由;否則請詢問或停止。完成 REPO、HOST 和 TARGET 的目標驗證。當身份驗證、目標驗證、議題可用性、政策、表單選擇或必要中繼資料遺失或不明確時,在進行變更前請失敗關閉。僅當 isBlankIssuesEnabled 明確為 true 時,才允許使用空白後備方案。
僅從已審查過且政策允許參與者套用的標籤建立 LABEL_ARGS:
LABEL_ARGS=()
LABEL_ARGS+=(--label "$LABEL") # 僅對每個允許發現的標籤重複。
重複與表單決定
-
用一句話描述報告,推導出
QUERY,然後在已開啟和已關閉的議題中完成一次重複搜尋:gh issue list --repo "$TARGET" --state all --search "$QUERY" --limit 1000代理人必須主動完成重複搜尋並保留其結果的證據。如果結果已飽和或完整性不確定,請縮小唯讀搜尋範圍或停止。如果確認重複,請在該議題上留言,而不是建立新議題。在已確認的重複議題上留言之前,請對確切的留言內容執行與發佈時相同的隱私掃描/編輯。
-
僅當倉庫提供的某個表單的聲明用途相符時,才選擇它。如果多個表單相符且政策未區分它們,請停止並要求決策。
-
對於 YAML 表單,讀取其架構並按聲明順序建立控制項。僅支援
input、textarea、dropdown和checkboxes。Markdown 控制項是非答案指導:在收集和具體化相鄰答案時,請遵守其可見指示,但不要將其渲染為回應區段。如果必要的結構或答案格式錯誤、不受支援、遺失或不明確,請在變更前失敗關閉。格式錯誤的架構,或遺失或不明確的必要答案,都會失敗關閉:請勿開啟瀏覽器或進行變更。僅當使用者明確要求瀏覽器完成,或自動化路徑無法安全/忠實地呈現語法有效的所選表單時,瀏覽器轉交才可用;否則請報告自動化不安全的原因並停止。
| 控制項 | 必要處理方式 |
|---|---|
input / textarea | 保留可見標籤。當 validations.required 為 true 時需要回答;否則渲染 _No response_。 |
dropdown | 保留可見標籤和選項。需要確切的所選選項文字;單選有一個選項,多選則按聲明的選項順序保留選取。必要的下拉選單需要至少一個有效選取;可選的下拉選單若無選取則渲染 _No response_。 |
checkboxes | 保留可見標籤和每個選項,格式為 - [x] 或 - [ ] 並按聲明順序排列。強制執行個別必要的核取方塊。對於代理人可驗證的操作選項,請主動完成動作並僅以保留的證據標記;代理人只能明確證明其自身有證據支持的工作,且不得將其行動歸因於使用者。個人事實、同意、法律聲明及其他第一人稱的使用者斷言需要明確的使用者確認;對於此類使用者聲明,需要明確的第一人稱確認。不要全部勾選核取方塊:發佈請求並不確認任何核取方塊。 |
對於每個答案,渲染 ### <visible label> 及其具體化的值。對於 textarea.attributes.render,請使用聲明的語言和足夠長的圍欄來包裹答案。切勿編造答案、選取、確認或標籤。
Markdown 範本只能從已知證據完成到同一個私有的 BODY_FILE。如果沒有相符的範本,則僅在明確啟用空白議題時使用審查過的結構化空白後備方案;否則停止而不發佈。
審查與發佈
在單次建立嘗試之前,審查目標、標題、所選表單或允許的後備方案、確切內文以及允許的標籤。代理人必須在發佈前立即完成對確切內文的隱私掃描/編輯並保留其證據:將私有專案名稱、使用者名稱、主機名稱、家目錄路徑、憑證和私有網路位址替換為有用的預留位置,同時保留重現結構。
在倉庫外部建立一個僅限擁有者的暫存目錄,用於存放兩個私有檔案;限制為目前使用者,並在每次退出/結束時清理這兩個檔案:
umask 077
REPO_ROOT="$(git rev-parse --show-toplevel)" || exit 1
REPO_ROOT="$(cd "$REPO_ROOT" && pwd -P)" || exit 1
if [ "$REPO_ROOT" = "/" ]; then
printf '%s\n' "Temporary directory is inside the repository" >&2; exit 1
fi
TMP_DIR="$(TMPDIR=/tmp mktemp -d /tmp/gentle-ai-issue.XXXXXXXX)" || exit 1
trap 'rm -rf -- "$TMP_DIR"' EXIT
TMP_DIR_REAL="$(cd "$TMP_DIR" && pwd -P)" || exit 1
case "$TMP_DIR_REAL/" in
"$REPO_ROOT/") printf '%s\n' "Temporary directory is inside the repository" >&2; exit 1 ;;
esac
chmod 700 "$TMP_DIR_REAL"
BODY_FILE="$TMP_DIR_REAL/body.md"
READBACK_FILE="$TMP_DIR_REAL/readback.json"
透過自動化路徑進行一次變更嘗試,並僅發佈一次:
gh issue create --repo "$TARGET" --title "$TITLE" --body-file "$BODY_FILE" "${LABEL_ARGS[@]}"
當根據上述表單決定允許瀏覽器完成時,可選的、獨立的瀏覽器轉交可以開啟倉庫表單。它絕不能證明已發佈,也絕不能回應格式錯誤的架構或遺失/不明確的必要答案:
gh issue create --repo "$TARGET" --web
請勿重試逾時、網路失敗、遺失身份或其他不確定的結果。擷取返回的議題編號,然後在報告成功之前從已驗證的目標主機讀回該議題:
gh issue view "$NUMBER" --repo "$TARGET" --json number,url,title,body,state,labels >"$READBACK_FILE"
確認回讀能識別目標主機上的議題,且標題和內文在僅進行 CRLF 轉 LF 和結尾換行正規化後相符。僅在目標主機回讀之後才報告 confirmed。否則,當權威性的拒絕證明未建立議題時報告 no_write,或報告 unknown 並停止所有後續變更。
分類
在核准或關閉議題之前,請驗證其是否具體、不重複、有充分證據、在範圍內,且與倉庫的標籤/狀態政策一致。如果任何點不確定,請保留倉庫審查狀態,並請求最小的遺失證據。