chenyunda218
|
1d9092cdde
|
fix:stalled 分類同步 agents#47——assignee 交付報告待確認改判 waiting-outside
與 agents 86f570a(PR alterminal/agents#48)同語義:最後一則 assignee
留言符合交付報告特徵(結構訊號:逐項查核/驗收結果、彙總 verdict、內文
含「完成定義」段落時簡式交付語也算;∧ 交棒訊號:回報/關閉他件 #N、
或請/可由/待他人確認關閉)時,assignee-idle 改判 waiting-outside。
兩訊號同時命中才翻轉:認領/進度/預告式留言(無交棒對象)保持
assignee-idle,不製造「認領後棄置永不被催」的新死角。
驗證:TestIsDeliveryReport(8 案例,與 gitea.py 離線驗證同集)+
TestScanStalledDeliveryReport(stalled 整合:交付報告翻轉、認領不翻轉)
+全套 go test 綠;live A/B 對安裝版二進位:bear#52 assignee-idle →
waiting-outside,bear#39 parent-tracking 不變。
|
2026-09-15 04:28:08 +08:00 |
|
ydc3148
|
540718dda7
|
feat: teai role
|
2026-09-14 16:13:02 +08:00 |
|
alex
|
8735e35db6
|
Merge pull request 'fix:stalled 分類同步 agents#44——子項全關閉的父追蹤項一律標 parent-tracking(#47)' (#48) from fix/stalled-parent-wrapup-parity into main
|
2026-09-14 08:07:55 +08:00 |
|
ceo
|
d89caf4af2
|
fix:stalled 分類同步 agents#44——子項全關閉的父追蹤項一律標 parent-tracking(#47)
considerIssue 原先僅在 anyOpen(children) 時標 parent-tracking,子項全關閉時
退回通用原因(如 assignee-idle),與 gitea.py(agents#44 修正)不一致,
導致巡邏「父項收尾」規則永不觸發。改為 children 非空一律 parent-tracking,
並移除已無引用的 anyOpen。
回歸測試 TestScanStalledParentWrapup 補子項全關閉 fixture;
fakeSource.OpenIssues 過濾 closed 以對齊真實 API 語義。
|
2026-09-14 08:04:37 +08:00 |
|
chenyunda218
|
8e358185f4
|
Merge pull request 'feat:增加 teai organizations 指令(#45)' (#46) from feat/issue45-organizations into main
Reviewed-on: #46
|
2026-09-13 21:29:18 +08:00 |
|
ceo
|
8d446ed62b
|
feat:新增 organizations 指令(#45)
tea organizations 對等的日常操作:
- organizations list:GET /user/orgs,輸出 name/full_name/website/
location/description/visibility(與 teai orgs 工作流命令同一
端點,但輸出完整欄位)
- organizations create:POST /orgs,--name 必填,可選 --full-name/
--description/--website/--location/--visibility;寫入需 --yes
- organizations delete:DELETE /orgs/{org},組織名為位置參數
(tea 相容);寫入需 --yes
驗收測試涵蓋端點、payload、--yes 閘門(未確認不發請求)與
值域檢查;並以本機建置對 Gitea 實測 list 輸出欄位與 tea 一致。
|
2026-09-13 19:32:34 +08:00 |
|
alex
|
d45a8243c8
|
Merge pull request 'fix:next 漏掉空倉庫中分派給自己的 issue(#43)' (#44) from fix/issue43-next-empty-repo-issues into main
|
2026-09-13 08:51:11 +08:00 |
|
ceo
|
d0334434c5
|
fix:next/mine 漏掉空倉庫中的分派 issue(#43)
iterOrgRepos(issue 掃描,供 Mine 與 members --has-work)不再跳過
empty=true 的倉庫——Gitea 允許空倉庫持有 open issue(「初始化項目」
型工作),行為基準 gitea.py 的 for_all_repositories 掃 issue 時
本來就不檢查 empty;teai 先前過度套用了空倉庫跳過條件,導致
teai next 對 colony-tick-demo issue #1 回 null。
PR 掃描(iterOpenPulls)、stalled、milestone overview 維持跳過
空倉庫不變(與 gitea.py 一致)。附回歸測試兩則。
|
2026-09-13 08:45:48 +08:00 |
|
alex
|
5506daa5f5
|
Merge pull request 'feat+docs:tag 安裝支援(#38)——version 讀 build info、README 安裝章節改以 go install 為主' (#42) from feat/issue38-versioned-install into main
|
2026-09-13 00:32:55 +08:00 |
|
ceo
|
9a4887a677
|
docs:修正安裝章節版本顯示說明(複審 #42)——@v0.1.0 仍顯示 0.1.0-dev、clone 建置為 pseudo-version
|
2026-09-13 00:28:40 +08:00 |
|
ceo
|
02fad53aa4
|
Merge pull request 'dailyops:補齊 tea 對等指令(#40)' (#41) from feat/issue40-tea-parity into main
|
2026-09-13 00:14:17 +08:00 |
|
ceo
|
5a48fdd590
|
feat+docs:tag 安裝支援(#38)——version 讀 build info、README 安裝章節改以 go install 為主
|
2026-09-13 00:09:56 +08:00 |
|
max
|
d01108bda3
|
移除建置產物 teai-bin,加入 .gitignore
|
2026-09-13 00:00:43 +08:00 |
|
max
|
3470a96392
|
dailyops:補齊 tea 對等指令(#40)— pulls approve/close/checkout、通用 comment、issues list --labels
|
2026-09-13 00:00:40 +08:00 |
|
ceo
|
36a50b95ed
|
Merge pull request 'docs+test:空清單輸出判決定案(維持 []/null,補 stalled 空輸出測試)(#37)' (#39) from fix/issue37-empty-output-docs into main
v0.1.0
|
2026-09-12 23:56:52 +08:00 |
|
chenyunda218
|
9e699f3b4e
|
docs+test:空輸出判決 #37——維持 []/null、補 stalled 空輸出測試
|
2026-09-12 23:43:29 +08:00 |
|
queena
|
d689107eea
|
Merge pull request 'internal/workflow:directLastActivity 排除跨 issue 引用事件(#34)' (#36) from fix/issue34-direct-last-activity into main
|
2026-09-12 15:24:23 +08:00 |
|
ceo
|
027ed1ade9
|
workflow_test:fakeSource.OpenIssues 依 number 排序,消除 map 迭代隨機性
審核意見(PR #36):issue 1 與 issue 3 在新邏輯下同為 10h,
sort.SliceStable 平手時順序取決於 map 迭代隨機順序,
TestScanStalledIssueReasons 的 got[0].Number != 1 斷言不穩定。
採建議修法 1:fakeSource.OpenIssues 回傳前依 number 遞增排序,
對齊真實 Gitea API(issues 依 id 遞增)行為。實作未動。
go build / go vet / go test ./... 全綠;
TestScanStalledIssueReasons -count=50 重跑全綠。
|
2026-09-12 15:21:21 +08:00 |
|
ceo
|
e4212b9c90
|
internal/workflow:directLastActivity 排除跨 issue 引用事件(#34)
同步 agents #34/#38/#40 三個停滯判定修補到 Go 端:
- Source 介面新增 IssueTimeline(GET /repos/{o}/{r}/issues/{n}/timeline,分頁),
giteaapi.go 與 cmd/xcheck 同步實作
- 新增 directLastActivity:updated_at 晚於全部已知直接活動時拉 timeline 核對,
排除 comment_ref/issue_ref 引用事件後取最晚;全為引用事件回退已知直接活動
最晚時刻(agents #40);timeline 失敗保守沿用 updated_at
- considerIssue/considerPull 對自身 updated_at、childActivity 對子項 updated_at
(含子項 created_at 入已知活動)套用同一排除邏輯(agents #38)
- 回歸測試:子項 updated_at 被引用刷新(TestRunStalledChildXrefRefresh)、
timeline 全引用事件回退與拉取失敗保守路徑(TestRunStalledTimelineAllXrefFallback)
- 修正 workflow_test.go:timelines 須在 ScanStalled 呼叫前設定
驗證:go build/vet/test 全綠;xcheck 對真實 API 掃描,
stalled 輸出與 gitea.py(agents @ 78769ec)位元組一致(5833 bytes)。
|
2026-09-12 15:10:31 +08:00 |
|
queena
|
a2baf55fce
|
Merge pull request 'dailyops:list 命令 --state all 明確帶 state=all(#33)' (#35) from fix/issue33-state-all into main
|
2026-09-11 11:32:53 +08:00 |
|
chenyunda218
|
1f6806ff99
|
dailyops:list 命令 --state all 明確帶 state=all(#33)
issues/milestones 端點省略 state 時 API 預設 open,closed 項目漏列;
pulls 端點省略時雖回全部,仍明確帶上避免依賴端點預設。三處同修並補
回歸測試(TestStateAllSendsExplicitParam)。
|
2026-09-11 11:29:00 +08:00 |
|
ceo
|
87d00ae440
|
Merge pull request 'milestones:跨倉庫里程碑總覽命令(#31)' (#32) from feat/issue31-milestones-overview into main
|
2026-09-10 21:26:39 +08:00 |
|
chenyunda218
|
744e7ad809
|
milestones:新增跨倉庫里程碑總覽命令(#31)
- teai milestones(不帶 --repo)輸出跨所屬組織各倉庫 open 里程碑概況,
對應 gitea.py milestones(管理者巡邏,agents AGENTS.md 10.1):
欄位 repo/id/title/url/open_issues/closed_issues/due_on/due_hours/
overdue/unassigned/updated_at,排序期限近者在前、無期限最後。
- internal/workflow.MilestoneOverview:判定核心(Source 注入、離線可測);
MilestoneEntry 自訂 MarshalJSON,鍵集鍵序與 gitea.py 全等
(null 表示、due_hours 定點一位、unassigned PR 條目帶 author)。
- internal/workflow.APIClient 增 OpenMilestones/MilestoneOpenIssues
(issues 端點刻意不帶 type=issues,PR 條目保留供覆蓋檢查,同 gitea.py)。
- milestones --repo a/b 維持現行單倉庫 list 語義不變。
- 空清單輸出 [](gitea.py 無輸出;#26 慣例差異,README 已文件化)。
- 交叉驗證:同帳號同時跑 gitea.py milestones 與 teai milestones,
含逾期/未到期/無期限里程碑與未分派 issue/PR 條目,輸出位元組全等。
|
2026-09-10 21:20:19 +08:00 |
|
chenyunda218
|
fd3b8cbd6b
|
Merge pull request 'docs:已知輸出差異補 mine/pulls 欄位集差異(#26)' (#27) from docs/issue26-output-fieldset-diff into main
Reviewed-on: #27
|
2026-09-10 18:51:29 +08:00 |
|
queena
|
3a587f60ad
|
Merge pull request 'internal/cli:允許命令旗標與位置參數交錯(#25)' (#28) from fix/issue25-interleaved-flags into main
|
2026-09-10 15:38:37 +08:00 |
|
alex
|
3ed20b6aba
|
internal/cli:允許命令旗標與位置參數交錯(#25)
parseFlags 改為先分離旗標與位置參數、再剖析旗標串、最後以第二次
Parse 把位置參數設回 fs.Args;Go 標準 flag 遇位置參數即停止的問題
不再影響「位置參數在前、旗標在後」的用法(teai api --method、
issues/pulls view --comments 等照 README 範例可用了)。
- login.go/workflow_commands.go 直接呼叫 fs.Parse 的六處改走
parseFlags,行為一致(login default/remove 的名稱也可與旗標交錯)。
- errHelp(命令 -h/--help)在 exitCodeFor 視為成功,與其既有註解
宣稱一致;命令層 -h 結束碼由 1/2 修正為 0。
- 新增 interleaved_flags_test.go 回歸測試:api/issues view/
pulls view/stalled/login default/login remove 的交錯組合。
|
2026-09-10 15:35:16 +08:00 |
|
ceo
|
3d555e38d9
|
docs:已知輸出差異補 mine/pulls 欄位集差異(#26)
gitea.py 的 mine/pulls 輸出完整 API 物件是 _dump 直接傾倒的副作用,
欄位集隨 Gitea 版本浮動;teai 維持策展摘要欄位(機器可讀優先),
交叉驗證比對項目集合與判定語義,不逐欄位比對。判定 #26。
|
2026-09-10 15:24:09 +08:00 |
|
alex
|
ffae335e62
|
Merge pull request 'internal/cli:stalled 與 xrefs 命令接線,完成 #7 CLI 層(堆疊於 #23)' (#24) from feat/issue7-cli-stalled-xrefs into main
|
2026-09-10 12:30:10 +08:00 |
|
ceo
|
ab94cdce9f
|
internal/cli:stalled 與 xrefs 命令接線,完成 #7 CLI 層(堆疊於 #23)
- workflow 新增 StalledSource 介面(Source+CurrentUser+GetIssue)與
高階入口 RunStalled/ResolveIssueXrefs(xrefs 輸出附 source 出處)
- APIClient 補上 StalledSource 面向(GetIssue/TryGetIssue 等)
- CLI 新增 teai stalled [--hours N](JSON 與 gitea.py 位元組相容:
停用 HTML 轉義、縮排 2)與 teai xrefs <owner>/<repo> <number>
(404 → exit 3);table 模式 stalled_hours 定點一位小數
- 接線層與 workflow 層單元測試(注入假資料源、固定時刻)
- README 狀態行更新
驗證:go build/vet/test 全綠;對真實 API 並行掃描,stalled 輸出
與 gitea.py 位元組一致(2169 bytes);xrefs 邊界案例(PR#50/
issue#49 略過、CJK 緊鄰、跨倉庫 owner/repo#N)與 Python 版一致。
|
2026-09-10 12:20:39 +08:00 |
|
chenyunda218
|
32c3b30934
|
Merge pull request 'internal/workflow:統一型別宣告,修復 main 編譯失敗(#21)' (#23) from fix/issue21-workflow-types into main
Reviewed-on: #23
|
2026-09-10 11:45:39 +08:00 |
|
ceo
|
5f323a685e
|
合併 main(47056dd)保持 #23 分支最新
|
2026-09-10 11:41:49 +08:00 |
|
ceo
|
4582dfaa4e
|
internal/workflow:統一型別宣告,修復 #12 合併後 main 編譯失敗(#21)
#12 的 workflow.go 與 #13 的 types.go 各自宣告 User/Comment/Issue/
PullRequest/Repository,文字合併無衝突但語意衝突,main 自 a8c1f3e 起
go build 失敗。
統一採 #13 的字串模型(types.go 為唯一型別來源):
- Issue/Comment 補 State/Body/ClosedAt 欄位,新增 parseMoment
(對應 gitea.py _parse_iso8601;保留原時區偏移,輸出與 Python
isoformat 位元組一致)
- workflow.go 移除重複宣告,stalled/xref 邏輯改用該模型與 judge.go
既有輔助(AssigneeNames/ReviewerNames/LastComment/containsString)
- Source 介面 number 改 int64(與 types.go 對齊),cmd/xcheck 同步
- workflow_test.go 測試資料改新型別模型(字串時刻、指標欄位)
驗證:
- go build/go vet/go test ./... 全綠(#6 與 #7 案例皆未回歸)
- xcheck 對真實 API 並行掃描,stalled 輸出與 gitea.py 位元組一致(含
bear-cli#9 父追蹤項子項摘要、+08:00 時區偏移)
- xref 邊界案例(nope#9/PR#50 略過、bear-cli#9 內嵌解析)與 Python 一致
|
2026-09-10 11:32:40 +08:00 |
|
alex
|
47056dda43
|
Merge pull request 'docs:README 補上完整安裝指南(#15)' (#22) from docs/issue15-install-guide into main
|
2026-09-10 11:26:25 +08:00 |
|
ceo
|
9948357f52
|
docs:README 補上完整安裝指南(#15)
|
2026-09-10 10:48:12 +08:00 |
|
alex
|
0b0c3cefcb
|
Merge pull request 'internal/cli:命令保留旗標機制,修正 login add 旗標被全域剖析搶走(#18)' (#20) from fix/issue18-reserved-flags into main
|
2026-09-10 10:37:20 +08:00 |
|
queena
|
a8c1f3e018
|
Merge pull request 'internal/workflow:xref 解析與 stalled 掃描核心邏輯(#7)' (#12) from feat/issue7-stalled-xrefs into main
|
2026-09-10 10:35:35 +08:00 |
|
max
|
0ed6f262c8
|
合併 main(4a34def)並把 exitcode_test.go 四處 extractGlobals 呼叫補上第三參數 nil(#20)
|
2026-09-10 10:32:53 +08:00 |
|
max
|
fb2990dc04
|
Merge remote-tracking branch 'origin/main' into fix/issue18-reserved-flags
|
2026-09-10 10:32:19 +08:00 |
|
ceo
|
67cafcff59
|
cmd/xcheck:帳號改由 /user API 取得,移除 USERNAME 預設 ceo(審核意見)
依 #12 第二輪審核意見:xcheck 原以 USERNAME 環境變數取帳號、
未設時靜默退回 ceo,與 gitea.py find_stalled_work 的
get_current_username()(打 /user 取 token 實際帳號)不同源。
非 ceo 帳號跑 xcheck 時催促冷卻會以錯誤身分套用,造成漏掃,
兩版輸出表面位元組相同實則基準錯誤。
改法:apiSource 新增 CurrentUser(),呼叫 /user 並依
username → login 取值;失敗或取不到帳號即報錯退出,
不靜默退回任何預設。移除 USERNAME 環境變數與 ceo fallback。
驗證:go build/go vet/go test 全綠(16 個測試函式);
USERNAME 未設下 xcheck 與 gitea.py stalled 並行交叉驗證,
輸出位元組相同(1749B cmp IDENTICAL)。
|
2026-09-10 10:30:46 +08:00 |
|
ceo
|
4a34def1f5
|
Merge pull request 'gitea.py 工作流命令 Go 化:whoami/orgs/members/pulls/mine/next(#6)' (#13) from feature/issue6-workflow-commands into main
|
2026-09-10 10:24:21 +08:00 |
|
ceo
|
15c2d35935
|
合併 main(#16/#17)並解 cli.go 衝突
衝突原因:#13(本分支 927855d)與 #16(main 7badd9e)各自實作了
同一問題(帶旗標命令被全域剖析攔下)的抽取式修正。採 main 現行
架構(dispatch 內 extractGlobals)為準,並保留本分支的:
- runVersion 參數檢查(version 不接受參數,TestWiringVersionRejectsArgs)
- workflow 命令與接線層測試(workflow_commands_test.go)
go build/vet/gofmt 綠;單元測試僅餘 main 既有回歸
(3 個 login 測試,#16 合併後即失敗,與本 PR 無關)。
|
2026-09-10 10:22:42 +08:00 |
|
max
|
c4fb641094
|
internal/cli:命令保留旗標機制,login add 的 --url/--token 不再被全域剖析搶走(#18)
|
2026-09-10 10:22:39 +08:00 |
|
queena
|
f7d63d6e8f
|
Merge pull request '測試改斷言具體結束碼數值,對照 README 規格(#10)' (#19) from fix/issue10-exitcode-tests into main
|
2026-09-10 10:20:23 +08:00 |
|
chenyunda218
|
f481377b9a
|
測試改斷言具體結束碼數值,對照 README 規格(#10)
cli_test、dailyops_commands_test、login_test、exitcode_test 原以
int(ExitUsage)/int(ExitAPI)/int(ExitInternal) 常數互比,常數若再
與 README 脫鉤測試仍會綠。改為直接斷言 0/2/3(內部錯誤 1)。
常數本體已隨 #5(6951817)改為明確數值,未知命令實測回 2。
|
2026-09-10 10:12:35 +08:00 |
|
ceo
|
c5d5c37eae
|
Merge pull request '日常操作命令:issues/pulls/labels/milestones/releases/repos/api(#8)' (#16) from feature/issue8-dailyops into main
|
2026-09-10 09:54:23 +08:00 |
|
alex
|
a2be70ea7d
|
Merge pull request '實現 login 指令(#14):tea 相容組態管理' (#17) from feature/issue14-login into main
|
2026-09-10 09:48:43 +08:00 |
|
ceo
|
b2dd2f3aac
|
修正 JSON 位元組相容與 xref Unicode 邊界(審核意見)
依 #12 審核意見修正四項偏差,並補一項同源問題:
1. iterXrefs 前一字元檢查改 Unicode:isWordChar 改用
unicode.IsLetter/IsDigit,且以 utf8 正確解碼前一 rune
(原版只認 ASCII 又取單一位元組)。另補齊 Python finditer
的重試語義:起點被 lookbehind 擋下時從下一 rune 重試,
否則「修復bear-cli#9」會整段丟失(Python 匹配後半 cli#9);
lookbehind 字元集含 #(##5 不匹配)。
2. writeJSON 改 json.Encoder + SetEscapeHTML(false):
Python ensure_ascii=False 不轉義 <、>、&,json.Marshal 預設
會,標題含這些字元即失去位元組相容。
3. stalled_hours 改 strconv.FormatFloat(v,'f',1,64):整數值輸出
48.0(原 %g 輸出 48,極大值還會變 1e+06)。
4. Child.last_activity_at 無可解析時刻時輸出 null(原輸出 ""),
型別改 *string;格式對齊 FormatMoment(UTC 記 +00:00 非 Z)。
5. cmd/xcheck 輸出同樣停用 HTML 轉義(Marshal* 對自訂
MarshalJSON 的輸出仍會轉義)。
驗證:go build/vet/test 全綠(16 測試函式,新增 CJK、##5、
全形數字、HTML 字元、48.0、null 等案例);cmd/xcheck 與
gitea.py stalled 對真實 API 並行掃描輸出位元組相同(1749B,
含 bear-cli#9 父追蹤項與 5 子項摘要);--xrefs 對 CJK
邊界輸入與 Python 一致。
|
2026-09-10 09:47:46 +08:00 |
|
chenyunda218
|
927855d3ca
|
cli:修正帶旗標命令被全域剖析攔下的阻斷問題(#13 審核)
- parseGlobals 改為抽取式 extractGlobals:只取走已知全域選項,非全域
選項(--has-work/--mine/--reviewer/--repo)原樣交回子命令 flagset,
任何順序(含與全域選項交錯)皆可解析;-- 之後停止抽取。
- runVersion 補參數檢查:version --wat 仍回 exit 2。
- workflow:commentsFor 對 number<=0 視為無留言,不打 API(對齊 gitea.py
在 number 缺漏時跳過留言檢查,避免 issues/0/comments 404 中斷掃描)。
- 新增 internal/cli/workflow_commands_test.go:以注入假 client 的接線層
測試補上 workflow 單元測試覆蓋不到的分派路徑(members --has-work、
pulls --mine/--reviewer/--repo、全域選項交錯、next null/table)。
- README:註明與 gitea.py 的已知輸出差異(空清單 [] vs 無輸出;
全域選項可出現在命令前後)。
實機交叉驗證(alex):members --has-work、pulls --mine/--reviewer、
pulls --repo、next、mine 兩者輸出一致;go vet/test 全綠。
|
2026-09-10 09:41:53 +08:00 |
|
ceo
|
f8fc16ae49
|
實現 login 指令(#14):tea 相容組態管理
- internal/gitea/config.go:tea 組態的行級編輯引擎(新增/更新/
設預設/移除),未知欄位與 preferences 區段逐字保留;原子寫入
(暫存檔 + rename,0600)。
- internal/cli/login.go:teai login list/add/default/remove。add 先以
token 呼叫 GET /user 驗證,成功才寫入並記下帳號;未給 --token 時
自 stdin 讀一行;401 結束碼 3。未給 --name 時同站既有項目就地更新。
- 輸出欄位 name/url/user/default,永不輸出 token。
- 測試:編輯引擎 12 項、指令層 11 項(httptest 假 API),並以真 tea
驗證 teai 寫出的組態可互通(tea whoami 讀出同帳號)。
Closes #14
|
2026-09-10 09:32:53 +08:00 |
|
alex
|
c311f02e0f
|
合併 main(#4 藍圖修訂)並整合 README:日常操作段落以 #8 實作內容為準
|
2026-09-10 09:20:44 +08:00 |
|