Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
230 commits
Select commit Hold shift + click to select a range
d1d4ee7
feat(ci): add --compare-checkpoint to ci-status-only script
th3w1zard1 May 24, 2026
943ae2d
test(ci): add unit tests for checkpoint compare parsing
th3w1zard1 May 24, 2026
77779a7
feat(ci): add --exit-on-defer for unchanged checkpoint
th3w1zard1 May 24, 2026
79224ad
docs(testing): document agent defer check in closeout doc
th3w1zard1 May 24, 2026
e761c4f
feat(ci): add --monitor-preflight shorthand for defer check
th3w1zard1 May 24, 2026
4598ba7
feat(ci): add --strict-defer-exit for LFG monitoring gate
th3w1zard1 May 24, 2026
e4beac6
feat(ci): detect verify sha drift and refresh dispatch
th3w1zard1 May 24, 2026
c6091c4
fix(ci): print checkpoint bug and emit snippet helper
th3w1zard1 May 25, 2026
929a87c
feat(ci): fc docs-only stale benign and checkpoint validate
th3w1zard1 May 25, 2026
d9c9f8e
docs(agents): document validate-checkpoint-doc and fc_sha_stale_benign
th3w1zard1 May 25, 2026
46f2439
feat(ci): enrich preflight doc validation and checkpoint snippet
th3w1zard1 May 25, 2026
01abda2
feat(ci): queue age hints and default preflight snippet
th3w1zard1 May 25, 2026
3de25bb
feat(ci): apply checkpoint snippet dry-run and write
th3w1zard1 May 25, 2026
456c9c1
feat(ci): extend apply to plan020 table and proceed reason
th3w1zard1 May 25, 2026
8e9b228
feat(ci): auto apply docs on proceed and lfg_proceed signal
th3w1zard1 May 25, 2026
040adf0
feat(ci): add dispatch-on-proceed gh workflow helpers
th3w1zard1 May 25, 2026
447dc3b
feat(ci): add include-proceed-actions and post-dispatch doc sync
th3w1zard1 May 25, 2026
aafa396
feat(ci): add lfg-refresh alias and dispatch poll retry
th3w1zard1 May 27, 2026
80b8fce
fix(ci): resolve check-file-size permissions and devskim false positives
th3w1zard1 May 27, 2026
0f141ef
feat(ci): add lfg-refresh dry-run and noop guardrails
th3w1zard1 May 27, 2026
7983102
feat(ci): add lfg-preflight shorthand and proceed hints
th3w1zard1 May 27, 2026
29bf625
feat(ci): add lfg-gate, lfg-closeout, and agent loop docs (079-080)
th3w1zard1 May 27, 2026
42bc59b
fix(ci): accurate doc patches and closeout proceed hints (081)
th3w1zard1 May 27, 2026
9c3291f
feat(ci): add monitoring complete gate and git prefetch (082)
th3w1zard1 May 27, 2026
6af374b
docs(ci): sync plan 020 plan cap to 082
th3w1zard1 May 27, 2026
50355bd
feat(ci): add prefetch recompare and pr merge readiness (083)
th3w1zard1 May 27, 2026
ebebedb
fix(ci): improve pr merge readiness rollup and exit codes (084)
th3w1zard1 May 27, 2026
5b2d0c5
docs(plan): add lfg merge gate and pr watch plan 085
th3w1zard1 May 27, 2026
99fd2a1
feat(ci): add lfg merge gate and pr check watch (085)
th3w1zard1 May 27, 2026
4f974c9
docs(ci): document lfg merge gate and pr watch (085)
th3w1zard1 May 27, 2026
896fdcc
docs(plan): add pr check details and merge watch plan 086
th3w1zard1 May 27, 2026
283261e
feat(ci): enrich pr check details and add merge watch (086)
th3w1zard1 May 27, 2026
bb9b0c4
docs(ci): document merge watch and check details (086)
th3w1zard1 May 27, 2026
3af5516
docs(plan): add merge conflicts and exit code plan 087
th3w1zard1 May 27, 2026
d1ba3f0
feat(ci): add merge conflict gate and lfg exit code (087)
th3w1zard1 May 27, 2026
61ee172
docs(ci): document lfg exit code and merge conflicts (087)
th3w1zard1 May 27, 2026
84b8c54
docs(plan): add exit reason and ci progress plan 088
th3w1zard1 May 27, 2026
27e94c7
feat(ci): add lfg exit reason and pr ci progress (088)
th3w1zard1 May 27, 2026
9701555
docs(ci): document exit reason and ci progress (088)
th3w1zard1 May 27, 2026
098ba29
docs(plan): add statuscontext and unified exit plan 089
th3w1zard1 May 27, 2026
351fda6
feat(ci): statuscontext rollup and unified lfg exit (089)
th3w1zard1 May 27, 2026
9ca925a
docs(ci): document statuscontext and unified exit (089)
th3w1zard1 May 27, 2026
40fd877
docs(plan): add no open pr and exit legend plan 090
th3w1zard1 May 27, 2026
f4aa6be
feat(ci): no open pr gate and lfg exit legend (090)
th3w1zard1 May 27, 2026
e3db71f
docs(ci): document no open pr gate and exit legend (090)
th3w1zard1 May 27, 2026
2e8af3d
docs(plan): add merge actions and pr lifecycle plan 091
th3w1zard1 May 27, 2026
5e2359f
feat(ci): merge actions and pr lifecycle states (091)
th3w1zard1 May 27, 2026
39f06f9
docs(ci): document merge actions and pr lifecycle (091)
th3w1zard1 May 27, 2026
d056a7f
docs(plan): add next failed and in progress plan 092
th3w1zard1 May 27, 2026
95a0c12
feat(ci): next failed check and in progress priority (092)
th3w1zard1 May 27, 2026
5a75de9
docs(ci): document next failed and in progress priority (092)
th3w1zard1 May 27, 2026
efc75b8
docs(ci): add pr watch stall bottleneck plan (093)
th3w1zard1 May 27, 2026
a748af5
feat(ci): add pr watch stall detection and bottlenecks (093)
th3w1zard1 May 27, 2026
0dd8b69
test(ci): cover pr watch stall and bottleneck helpers (093)
th3w1zard1 May 27, 2026
ea62c19
docs(ci): document watch stall polls and bottlenecks (093)
th3w1zard1 May 27, 2026
2dcc785
docs(ci): add pr queue stall detection plan (094)
th3w1zard1 May 27, 2026
13f3289
feat(ci): distinguish queue backlog from job hang stalls (094)
th3w1zard1 May 27, 2026
8746176
test(ci): cover queue vs job watch stall paths (094)
th3w1zard1 May 27, 2026
80affa6
docs(ci): document queue stall signals and bump cap (094)
th3w1zard1 May 27, 2026
cc65823
docs(ci): add watch continue queue stall plan (095)
th3w1zard1 May 27, 2026
bd1dccf
feat(ci): continue watch through queue backlog by default (095)
th3w1zard1 May 27, 2026
90ed78a
test(ci): cover queue stall continue and timeout paths (095)
th3w1zard1 May 27, 2026
c78f2cc
docs(ci): document watch continue queue stall behavior (095)
th3w1zard1 May 27, 2026
35d5a56
docs(ci): add pr watch summary plan (096)
th3w1zard1 May 27, 2026
5a8c846
feat(ci): add pr watch summary and merge-watch 2h default (096)
th3w1zard1 May 27, 2026
63b503d
test(ci): cover pr watch summary and timeout defaults (096)
th3w1zard1 May 27, 2026
5fd0127
docs(ci): document pr watch summary and 2h default (096)
th3w1zard1 May 27, 2026
5680877
docs(ci): add pr queue age crosscheck plan (097)
th3w1zard1 May 27, 2026
a667f76
feat(ci): add queue age and pr checks crosscheck (097)
th3w1zard1 May 27, 2026
02e9661
test(ci): cover queue age and checks crosscheck (097)
th3w1zard1 May 27, 2026
045467a
docs(ci): document queue age and crosscheck fields (097)
th3w1zard1 May 27, 2026
0257ab1
docs(ci): add queue backlog severity plan (098)
th3w1zard1 May 27, 2026
09fcedf
feat(ci): add queue backlog severity and deduped stalls (098)
th3w1zard1 May 27, 2026
b1e5208
test(ci): cover queue backlog severity and summary (098)
th3w1zard1 May 27, 2026
bce258c
docs(ci): document queue backlog severe flag (098)
th3w1zard1 May 27, 2026
563dfd2
docs(ci): add pr ci recommendation plan (099)
th3w1zard1 May 27, 2026
5b9f54a
feat(ci): add pr ci recommendation and queue notes (099)
th3w1zard1 May 27, 2026
d3ae04e
test(ci): cover pr ci recommendation helpers (099)
th3w1zard1 May 27, 2026
6a9bf05
docs(ci): document pr ci recommendation fields (099)
th3w1zard1 May 27, 2026
d30136f
test(ci): use recent queue timestamp in backlog hint test
th3w1zard1 May 27, 2026
14ed8de
docs(ci): add lfg exit recommendation plan (100)
th3w1zard1 May 27, 2026
0d978cb
feat(ci): compound pr ci recommendation in lfg exit reason (100)
th3w1zard1 May 27, 2026
18c4746
test(ci): cover lfg exit reason recommendation suffix (100)
th3w1zard1 May 27, 2026
11ece4d
docs(ci): document lfg exit reason recommendation suffix (100)
th3w1zard1 May 27, 2026
98ec3db
docs(ci): add compact unchanged watch poll plan (101)
th3w1zard1 May 27, 2026
b7cffd3
feat(ci): compact unchanged pr watch poll stderr (101)
th3w1zard1 May 27, 2026
1757e27
test(ci): cover compact unchanged watch polls (101)
th3w1zard1 May 27, 2026
dceee85
docs(ci): document compact unchanged watch polls (101)
th3w1zard1 May 27, 2026
5293295
docs(ci): add pr checks crosscheck note plan (102)
th3w1zard1 May 27, 2026
b3816c8
feat(ci): add pr checks crosscheck note for rollup gh delta (102)
th3w1zard1 May 27, 2026
36f2a58
test(ci): cover pr checks crosscheck note helpers (102)
th3w1zard1 May 27, 2026
3f75ceb
docs(ci): document pr checks crosscheck note field (102)
th3w1zard1 May 27, 2026
4e9ea9c
docs(ci): add lfg agent briefing plan (103)
th3w1zard1 May 27, 2026
68ae6e6
feat(ci): add consolidated lfg agent briefing json (103)
th3w1zard1 May 27, 2026
f3d591a
test(ci): cover lfg agent briefing helpers (103)
th3w1zard1 May 27, 2026
7300ffa
docs(ci): document lfg agent briefing field (103)
th3w1zard1 May 27, 2026
c65abdb
docs(ci): add watch heartbeat polls plan (104)
th3w1zard1 May 27, 2026
204fd32
feat(ci): add watch heartbeat polls for full stderr refresh (104)
th3w1zard1 May 27, 2026
1e81a52
test(ci): cover watch heartbeat poll behavior (104)
th3w1zard1 May 27, 2026
616a2d9
docs(ci): document watch heartbeat polls flag (104)
th3w1zard1 May 27, 2026
4e30913
docs(ci): add preflight dry-run briefing plan (105)
th3w1zard1 May 27, 2026
c6df45c
fix(ci): preflight dry-run json and blocked agent briefing (105)
th3w1zard1 May 27, 2026
63f308c
test(ci): cover blocked refresh agent briefing (105)
th3w1zard1 May 27, 2026
e19f3ad
docs(ci): document preflight dry-run briefing fix (105)
th3w1zard1 May 27, 2026
cfb3d3e
docs(ci): add plan 106 ci drift before fc classify gap
th3w1zard1 May 27, 2026
658d230
fix(ci): prioritize run id drift over fc stale classify gap
th3w1zard1 May 27, 2026
c0c56eb
docs(ci): document plan 106 drift routing and track cap
th3w1zard1 May 27, 2026
186fbc9
docs(ci): add plan 107 defer classify gap when fc active
th3w1zard1 May 27, 2026
9cd3cc4
fix(ci): defer classify fc stale gap while fc run active
th3w1zard1 May 27, 2026
2781a9a
docs(ci): document plan 107 active fc defer routing
th3w1zard1 May 27, 2026
9d7c17a
docs(ci): add plan 108 lfg defer reason fc active pending
th3w1zard1 May 27, 2026
558c74f
fix(ci): add semantic lfg defer reason for fc active pending
th3w1zard1 May 27, 2026
0e55e23
docs(ci): document plan 108 defer reason semantics
th3w1zard1 May 27, 2026
6d81c61
docs(ci): add plan 109 gh lookup failure briefing
th3w1zard1 May 27, 2026
c17f6b9
fix(ci): add agent briefing for gh lookup failures
th3w1zard1 May 27, 2026
4081f0a
docs(ci): document plan 109 gh unavailable briefing
th3w1zard1 May 27, 2026
aebfca3
docs(ci): add plan 110 doc snapshot on gh unavailable
th3w1zard1 May 28, 2026
7f3ac42
fix(ci): add doc checkpoint snapshot when gh unavailable
th3w1zard1 May 28, 2026
4ecc751
docs(ci): document plan 110 doc snapshot fallback
th3w1zard1 May 28, 2026
025bd2d
docs(ci): add plan 111 defer closeout until fc terminal
th3w1zard1 May 28, 2026
caea172
fix(ci): defer closeout until verify and fc runs terminal
th3w1zard1 May 28, 2026
3ae0b67
docs(ci): document plan 111 closeout defer routing
th3w1zard1 May 28, 2026
9dd5ae5
docs(ci): add plan 112 defer briefing active run refs
th3w1zard1 May 28, 2026
fa6871e
fix(ci): add fc run url and id to defer agent briefing
th3w1zard1 May 28, 2026
627388c
docs(ci): document plan 112 defer briefing run refs
th3w1zard1 May 28, 2026
b3d4e5c
feat(verify-pypi): add defer monitor commands for fc watch
th3w1zard1 May 28, 2026
b0fb9de
Merge branch 'master' into feat/ci-status-checkpoint-compare
th3w1zard1 May 28, 2026
d6404e6
feat(verify-pypi): add lfg preflight watch polling mode
th3w1zard1 May 28, 2026
1ff4a6a
fix(verify-pypi): wait on active runs during ci drift
th3w1zard1 May 28, 2026
98a60a2
fix(verify-pypi): route defer fc-active command to preflight-watch
th3w1zard1 May 28, 2026
fe8dcfe
fix(verify-pypi): add defer sha gap detail and fix preflight retry
th3w1zard1 May 28, 2026
55e9da4
feat(verify-pypi): add lfg gate-watch and post-terminal commands
th3w1zard1 May 28, 2026
f6de8fd
fix(verify-pypi): prefer gate-watch as primary defer wait command
th3w1zard1 May 28, 2026
88df696
fix(verify-pypi): add defer queue context for fc-active path
th3w1zard1 May 28, 2026
194bce0
fix(verify-pypi): gate-watch poll labels and defer queued stderr
th3w1zard1 May 28, 2026
d563b08
checkpoint before checking out master
th3w1zard1 May 28, 2026
ce0a5c0
test(verify-pypi): cover plan 122 defer expected-after-terminal
th3w1zard1 May 28, 2026
c115cef
fix(verify-pypi): drift expected-after-terminal and primary action
th3w1zard1 May 28, 2026
45b14da
fix(verify-pypi): defer active_runs and closeout expected-after
th3w1zard1 May 28, 2026
fab5b54
fix(verify-pypi): enrich strict exit and verify_run stderr
th3w1zard1 May 28, 2026
ec08cca
fix(verify-pypi): add gh_watch multi-run and watch summary active_runs
th3w1zard1 May 28, 2026
1ae4717
fix(verify-pypi): propagate gh_watch to strict exit and watch summary
th3w1zard1 May 28, 2026
ef187ee
fix(verify-pypi): add gh_watch to preflight watch summary json
th3w1zard1 May 28, 2026
d95a643
fix(verify-pypi): mirror gh_watch to gate json and watch polls
th3w1zard1 May 28, 2026
d08f5c2
fix(verify-pypi): mirror active_runs json and queued on strict exit
th3w1zard1 May 28, 2026
7880235
fix(verify-pypi): mirror queue_context and watch summary queued
th3w1zard1 May 28, 2026
015d6eb
fix(verify-pypi): mirror expected_after and primary_action json
th3w1zard1 May 28, 2026
c8d3bb5
fix(verify-pypi): enrich watch poll stderr with queued and expected_a…
th3w1zard1 May 28, 2026
42b0a0a
fix(verify-pypi): mirror watch_recommended to gate json and stderr
th3w1zard1 May 28, 2026
40efe83
fix(verify-pypi): mirror post_terminal_commands and poll watch flag
th3w1zard1 May 28, 2026
3e6abe7
fix(verify-pypi): mirror wait_command and monitor_commands json
th3w1zard1 May 28, 2026
7dd0404
fix(verify-pypi): mirror verify and fc run ids to gate json
th3w1zard1 May 28, 2026
effe42f
fix(verify-pypi): mirror run urls to gate json (plan 138)
th3w1zard1 May 28, 2026
3d770a3
fix(verify-pypi): mirror run status to gate json (plan 139)
th3w1zard1 May 28, 2026
ff90f11
fix(verify-pypi): mirror blocked to gate json (plan 140)
th3w1zard1 May 28, 2026
b5bc846
fix(verify-pypi): flatten queue flags to gate json (plan 141)
th3w1zard1 May 28, 2026
2348d11
fix(verify-pypi): mirror briefing action to gate json (plan 142)
th3w1zard1 May 28, 2026
b23df0a
fix(verify-pypi): mirror briefing notes to gate json (plan 143)
th3w1zard1 May 28, 2026
6dcc766
fix(verify-pypi): mirror briefing reason to gate json (plan 144)
th3w1zard1 May 28, 2026
1fab8e7
fix(verify-pypi): mirror briefing merge ready to gate json (plan 145)
th3w1zard1 May 28, 2026
03fc2ca
fix(verify-pypi): flatten queue backlog note to gate json (plan 146)
th3w1zard1 May 28, 2026
cf07dba
fix(verify-pypi): mirror sha gap to gate json (plan 147)
th3w1zard1 May 28, 2026
07becb8
feat(ci): mirror gh_watch_command to top-level gate json (plan 148)
th3w1zard1 May 28, 2026
a4b4053
feat(ci): mirror briefing_command to top-level gate json (plan 149)
th3w1zard1 May 28, 2026
0b1f7d0
feat(ci): add queue_note to defer watch poll stderr (plan 150)
th3w1zard1 May 28, 2026
317dd1c
feat(ci): add blocked to defer watch poll stderr (plan 151)
th3w1zard1 May 28, 2026
2455b54
feat(ci): add briefing_reason to defer watch poll stderr (plan 152)
th3w1zard1 May 28, 2026
7504c54
feat(ci): add briefing action to defer watch poll stderr (plan 153)
th3w1zard1 May 28, 2026
f10c697
feat(ci): add briefing notes count to defer watch poll stderr (plan 154)
th3w1zard1 May 28, 2026
5f2684a
feat(ci): add merge_ready to defer watch poll stderr (plan 155)
th3w1zard1 May 28, 2026
739316a
feat(ci): add verify_run fc_run to defer watch poll stderr (plan 156)
th3w1zard1 May 28, 2026
a2e416e
feat(ci): mirror run status on defer watch poll stderr (plan 157)
th3w1zard1 May 28, 2026
a9509e3
feat(ci): mirror gh_watch_summary on defer watch poll stderr (plan 158)
th3w1zard1 May 28, 2026
2d676c6
feat(ci): mirror queue flags on defer watch poll stderr (plan 159)
th3w1zard1 May 28, 2026
c343264
feat(ci): mirror active_runs on defer watch poll stderr (plan 160)
th3w1zard1 May 28, 2026
2df4f87
feat(ci): mirror run URLs on defer watch poll stderr (plan 161)
th3w1zard1 May 28, 2026
44422a8
feat(ci): skip legacy verify/fc ids on defer watch poll (plan 162)
th3w1zard1 May 28, 2026
e821e5b
feat(ci): skip per-run queued tokens on defer watch poll (plan 163)
th3w1zard1 May 28, 2026
cd6f1aa
feat(ci): mirror sha_gap_short on defer watch poll stderr (plan 164)
th3w1zard1 May 28, 2026
a2cba5d
feat(ci): mirror primary_action on defer watch poll stderr (plan 165)
th3w1zard1 May 28, 2026
ea08ac7
feat(ci): mirror watch commands on defer watch poll stderr (plan 166)
th3w1zard1 May 28, 2026
d9ef400
feat(ci): mirror notes and merge_ready on defer watch poll (plan 167)
th3w1zard1 May 28, 2026
2c22b87
feat(ci): add run refs to watch summary one-liner stderr (plan 168)
th3w1zard1 May 28, 2026
4f155a9
feat(ci): prefer top-level queue fields on watch summary stderr (plan…
th3w1zard1 May 28, 2026
e6eb436
feat(ci): mirror watch summary from top-level status (plan 170)
th3w1zard1 May 28, 2026
e53ef04
feat(ci): share strict exit stderr mirror helper from status (plan 171)
th3w1zard1 May 28, 2026
19ffaf5
feat(ci): reuse mirror helper on watch summary stderr (plan 172)
th3w1zard1 May 28, 2026
77583f4
merge(master): resolve verify-pypi track conflicts keeping plan 172 b…
th3w1zard1 May 28, 2026
a42eb20
feat(ci): mirror briefing stderr from top-level status (plan 173)
th3w1zard1 May 28, 2026
7b59b3b
feat(ci): mirror wait_recommended and ci_drift to top-level status
th3w1zard1 May 28, 2026
1d66b3b
feat(ci): emit wait and drift_fields in shared mirror stderr
th3w1zard1 May 28, 2026
d9e1f4e
refactor(ci): extract shared lfg flat field mirror helper
th3w1zard1 May 28, 2026
fad79d1
feat(ci): export lfg_flat_field_keys in gate JSON
th3w1zard1 May 28, 2026
b7d453e
feat(ci): add lfg_flat_field_values compact gate snapshot
th3w1zard1 May 28, 2026
045fbbb
feat(ci): add flat_fields stderr token for poll scans
th3w1zard1 May 28, 2026
4b58c59
fix(ci): strict-exit stderr when flat fields lack nested briefing
th3w1zard1 May 28, 2026
5ae5a23
feat(ci): add lfg_flat_field_keys_present to gate JSON
th3w1zard1 May 28, 2026
6060e61
feat(ci): add flat_keys stderr token for poll diffs
th3w1zard1 May 28, 2026
9c8a1f2
feat(ci): omit unchanged flat_keys on gate-watch polls
th3w1zard1 May 28, 2026
88fdf0b
feat(ci): track unchanged_flat_keys_polls in watch summary
th3w1zard1 May 28, 2026
34e41ee
feat(ci): flat_keys heartbeat on gate-watch polls (plan 185)
th3w1zard1 May 28, 2026
0b4ba2b
refactor(ci): relocate _mirror_lfg_flat_fields helper (plan 186)
th3w1zard1 May 28, 2026
f226092
refactor(ci): relocate preflight watch summary mirror (plan 187)
th3w1zard1 May 28, 2026
3f3e74f
feat(ci): gate flat-keys heartbeat summary stderr (plan 188)
th3w1zard1 May 28, 2026
c9d00fa
feat(ci): emit watch heartbeat interval on preflight summary (plan 189)
th3w1zard1 May 28, 2026
416f418
feat(ci): flat-field stderr helper and heartbeat_every polls (plan 190)
th3w1zard1 May 28, 2026
0faafb3
feat(ci): heartbeat_every on preflight summary stderr (plan 191)
th3w1zard1 May 28, 2026
132e08b
feat(ci): heartbeat_every json alias and flat_hb summary (plan 192)
th3w1zard1 May 28, 2026
5c6de44
feat(ci): flat_hb poll stderr and json alias (plan 193)
th3w1zard1 May 28, 2026
547d037
feat(ci): flat_unchanged summary stderr and json alias (plan 194)
th3w1zard1 May 29, 2026
4e9eea9
feat(ci): use flat_unchanged=1 on gate-watch poll stderr (plan 195)
th3w1zard1 May 29, 2026
f98ea86
feat(ci): flat_unchanged streak in preflight watch history (plan 196)
th3w1zard1 May 29, 2026
8dbed9a
feat(ci): max_flat_unchanged on preflight watch summary (plan 197)
th3w1zard1 May 29, 2026
7841f19
feat(ci): flat_unchanged streak on gate-watch poll stderr (plan 198)
th3w1zard1 May 29, 2026
fc1da54
feat(verify-pypi): cumulative flat_hb on heartbeat poll stderr (plan …
th3w1zard1 May 29, 2026
0708e86
feat(verify-pypi): flat_hb_total on watch summary stderr (plan 200)
th3w1zard1 May 29, 2026
4b0f1b3
feat(verify-pypi): flat_hb_total in watch history snapshots (plan 201)
th3w1zard1 May 29, 2026
3720105
feat(verify-pypi): flat_hb_total history fallback in watch summary (p…
th3w1zard1 May 29, 2026
0e5a8ff
refactor(verify-pypi): co-locate preflight watch history helpers (pla…
th3w1zard1 May 29, 2026
86f1b8f
refactor(verify-pypi): extract preflight poll flat stderr parts (plan…
th3w1zard1 May 29, 2026
a486c32
refactor(verify-pypi): extract preflight summary flat stderr parts (p…
th3w1zard1 May 29, 2026
96885a7
feat(verify-pypi): flat_unchanged max-streak summary fallback (plan 206)
th3w1zard1 May 29, 2026
247004d
refactor(verify-pypi): resolve preflight watch summary counters (plan…
th3w1zard1 May 29, 2026
e4bf587
refactor(verify-pypi): co-locate preflight flat stderr helpers (plan …
th3w1zard1 May 29, 2026
4294b18
refactor(verify-pypi): preflight max_flat_unchanged resolver (plan 209)
th3w1zard1 May 29, 2026
a8d6f31
refactor(verify-pypi): preflight max_flat_unchanged stderr gate (plan…
th3w1zard1 May 29, 2026
d9950fa
refactor(verify-pypi): preflight flat_hb_total stderr gate (plan 211)
th3w1zard1 May 29, 2026
5fe832d
refactor(verify-pypi): preflight heartbeat_every stderr gate (plan 212)
th3w1zard1 May 29, 2026
27cb2ce
refactor(verify-pypi): extract summary unchanged flat stderr parts (p…
th3w1zard1 May 30, 2026
d84785d
refactor(verify-pypi): extract summary heartbeat flat stderr parts (p…
th3w1zard1 May 30, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,365 changes: 1,320 additions & 45 deletions .github/scripts/local_verify_pypi_slice.py

Large diffs are not rendered by default.

6,434 changes: 4,587 additions & 1,847 deletions Libraries/PyKotor/tests/test_utility/test_local_verify_checkpoint.py

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ Plan 019 landed via PR #268 but remained `in_progress` without post-merge verifi
| Stale branch cleanup | `fix/pypi-verify-regression-concurrency` deleted (merged #275, stray docs) | ✅ plan 026 |
| Local CLI PyPI parity (plan 042) | holopatcher/kotormcp install from PyPI; kotordiff not on PyPI; `--help` rc=1 (workflow continue-on-error) | ✅ pass (parity with CI skip semantics; py3.14 local) |
| Local PyPI parity (plan 041) | ephemeral venv `pip install pykotor[all]` + workflow import scripts | ✅ pass (Linux/py3; CI matrix still queued) |
| Verify PyPI CI (post-#277) | https://github.com/OpenKotOR/PyKotor/actions/runs/26372746392 | ✅ success — **Check trigger** on `8916e2f`|
| Forward Commits (post-#306) | https://github.com/OpenKotOR/PyKotor/actions/runs/26547345351 | ⏳ pending — merge on `44ccf2a`|
| Verify PyPI CI (post-#277) | https://github.com/OpenKotOR/PyKotor/actions/runs/26549547772 | ✅ success — **Check trigger** on `ca61ce8`|
| Forward Commits (post-#306) | https://github.com/OpenKotOR/PyKotor/actions/runs/26549293445 | ❌ failure — merge on `ca61ce8`|
| Local FC dry-run (plan 051) | cherry-pick `49da28057`→bleeding-edge + workflow restore | ✅ pass (`d8dc53968`; docs conflict auto-resolved) |
| Solution doc (plan 050) | `docs/solutions/testing/verify-pypi-regression-closeout.md` | ✅ prefer/defer/avoid + local command |
| Local verify script (plan 048) | `python3 .github/scripts/local_verify_pypi_slice.py` | ✅ pass (replaces manual plan 047 slice) |
Expand All @@ -62,9 +62,9 @@ Plan 019 landed via PR #268 but remained `in_progress` without post-merge verifi

**Track status (plan 051):** **Monitoring-only.** Code and local parity complete (#268–#306, plans 019–066). Await CI green on [26372746392](https://github.com/OpenKotOR/PyKotor/actions/runs/26372746392) and FC [26365648344](https://github.com/OpenKotOR/PyKotor/actions/runs/26365648344); no further workflow changes unless CI reports new failures.

**Last CI check (plan 114):** 2026-05-27 — verify [26372746392](https://github.com/OpenKotOR/PyKotor/actions/runs/26372746392) success on `8916e2f`; FC [26547345351](https://github.com/OpenKotOR/PyKotor/actions/runs/26547345351) pending on `44ccf2a`.
**Last CI check (plan 214):** 2026-05-29 — verify [26549547772](https://github.com/OpenKotOR/PyKotor/actions/runs/26549547772) success on `ca61ce8`; FC [26549293445](https://github.com/OpenKotOR/PyKotor/actions/runs/26549293445) failure on `ca61ce8`.

**Plans:** 019–114 document the closeout track; authoritative learning in `docs/solutions/testing/verify-pypi-regression-closeout.md`.
**Plans:** 019–214 document the closeout track; authoritative learning in `docs/solutions/testing/verify-pypi-regression-closeout.md`.

---

Expand Down
37 changes: 37 additions & 0 deletions docs/plans/2026-05-24-115-investigate-drift-active-wait-plan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
---
title: "fix: investigate ci drift briefing wait on active runs"
type: fix
status: active
date: 2026-05-28
origin: docs/solutions/testing/verify-pypi-regression-closeout.md
---

# fix: Investigate CI Drift Active-Run Wait (plan 115)

## Summary

When `proceed_reason` is `investigate_ci_drift` but FC/verify runs are still active, agents should wait before `--lfg-refresh --dry-run`. Enrich drift briefing with structured fields and route to `--lfg-preflight-watch`.

---

## Problem Frame

Live: FC run IDs churn while queued; drift briefing only has text notes and suggests refresh dry-run prematurely.

---

## Requirements

- R1. `_build_ci_drift_detail` exposes doc vs live drift fields and `wait_recommended`.
- R2. `_build_drift_refresh_commands` lists refresh/closeout/preflight-watch commands.
- R3. `investigate_ci_drift` briefing includes `drift`, `refresh_commands`, active run refs, `monitor_commands` when waiting.
- R4. `_build_proceed_hint` prefers `--lfg-preflight-watch` when drift + active runs.
- R5. stderr `wait=true` and drift field hints; tests; `PLAN_TRACK_CAP` `115`; docs.

---

## Test scenarios

- T1. Drift + FC queued → `wait_recommended` true, command includes preflight-watch.
- T2. Drift + both terminal → `refresh_commands.closeout` present.
- T3. stderr includes `wait=true` when active.
36 changes: 36 additions & 0 deletions docs/plans/2026-05-24-116-defer-preflight-watch-command-plan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---
title: "fix: defer fc-active command routes to preflight-watch"
type: fix
status: active
date: 2026-05-28
origin: docs/solutions/testing/verify-pypi-regression-closeout.md
---

# fix: Defer Preflight-Watch Command (plan 116)

## Summary

When deferred on active FC (`fc_active_pending`), `monitor_commands` includes `preflight_watch` but `command`/`proceed_hint` still suggest manual `--lfg-preflight` retry. Route primary command to **`--lfg-preflight-watch`**.

---

## Problem Frame

Live: `fc_active_pending`; agents get watch_fc_run but command says re-run preflight manually.

---

## Requirements

- R1. `_defer_preflight_watch_recommended` true for fc/verify active defer reasons.
- R2. `_build_proceed_hint` uses `--lfg-preflight-watch` for those defers.
- R3. Defer briefing sets `watch_recommended` and `command` to preflight-watch.
- R4. Defer stderr includes `watch_recommended=true`; tests; `PLAN_TRACK_CAP` `116`; docs.

---

## Test scenarios

- T1. fc_active_pending proceed_hint → preflight-watch.
- T2. Defer briefing command matches preflight_watch monitor command.
- T3. stderr includes watch_recommended=true.
36 changes: 36 additions & 0 deletions docs/plans/2026-05-24-117-defer-sha-gap-detail-plan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---
title: "fix: defer briefing sha gap detail and preflight retry"
type: fix
status: active
date: 2026-05-28
origin: docs/solutions/testing/verify-pypi-regression-closeout.md
---

# fix: Defer SHA Gap Detail (plan 117)

## Summary

Defer `monitor_commands.preflight_retry` incorrectly copies the watch `command`. Fix to always single-shot preflight. Add structured **`sha_gap`** on defer when FC SHA lags master.

---

## Problem Frame

Live: `fc_active_pending`; `preflight_retry` duplicates preflight-watch; agents lack structured SHA fields beyond text notes.

---

## Requirements

- R1. `_build_defer_monitor_commands` always sets `preflight_retry` to `--lfg-preflight --json`.
- R2. `_build_defer_sha_gap_detail` exposes fc_head, master_sha, queued_hours.
- R3. Defer briefing attaches `sha_gap` when FC stale gap pending.
- R4. Defer stderr includes `sha_gap=` short form; tests; `PLAN_TRACK_CAP` `117`; docs.

---

## Test scenarios

- T1. Watch defer → preflight_retry is single-shot, command is watch.
- T2. fc_active_pending briefing includes sha_gap with head SHAs.
- T3. stderr includes sha_gap= prefix.
37 changes: 37 additions & 0 deletions docs/plans/2026-05-24-118-lfg-gate-watch-plan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
---
title: "feat: lfg gate-watch and defer post-terminal commands"
type: feat
status: active
date: 2026-05-28
origin: docs/solutions/testing/verify-pypi-regression-closeout.md
---

# feat: LFG Gate-Watch + Post-Terminal Commands (plan 118)

## Summary

Agents repeatedly run `--lfg-gate` (exit 2) while FC is queued. Add **`--lfg-gate-watch`** (gate + preflight-watch) and defer **`post_terminal_commands`** for after FC completes.

---

## Problem Frame

Live: `fc_active_pending` with watch_recommended; gate exits 2 without polling; no structured next steps after FC terminal.

---

## Requirements

- R1. `--lfg-gate-watch` enables `--lfg-gate --lfg-preflight-watch`.
- R2. `_build_defer_post_terminal_commands` with preflight/prefetch-gate hints.
- R3. Defer briefing attaches `post_terminal_commands`; monitor_commands includes `gate_watch`.
- R4. `preflight_watch_summary.next_hint` from proceed_hint after watch.
- R5. `lfg_mode` `gate_watch`; tests; `PLAN_TRACK_CAP` `118`; docs.

---

## Test scenarios

- T1. `--lfg-gate-watch` sets gate + preflight-watch flags.
- T2. Defer briefing includes post_terminal_commands.prefetch_gate when fc_sha_stale.
- T3. Watch summary includes next_hint when defer clears.
36 changes: 36 additions & 0 deletions docs/plans/2026-05-24-119-defer-gate-watch-primary-plan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---
title: "fix: defer and drift wait prefer gate-watch command"
type: fix
status: active
date: 2026-05-28
origin: docs/solutions/testing/verify-pypi-regression-closeout.md
---

# fix: Prefer Gate-Watch as Primary Wait Command (plan 119)

## Summary

Defer and drift-wait briefings still primary-route to `--lfg-preflight-watch`. Prefer **`--lfg-gate-watch`** so agents poll once and get strict gate exit semantics.

---

## Problem Frame

Live: `fc_active_pending`; `gate_watch` exists in monitor_commands but `command`/`proceed_hint` use preflight-watch.

---

## Requirements

- R1. Defer `command` and `_build_proceed_hint` use `gate_watch` when watch recommended.
- R2. Drift wait uses `refresh_commands.gate_watch` as primary command.
- R3. Preflight watch poll stderr includes `sha_gap=` when present.
- R4. Tests; `PLAN_TRACK_CAP` `119`; closeout + plan 020 docs.

---

## Test scenarios

- T1. fc_active_pending defer → command is gate-watch.
- T2. investigate_ci_drift + active FC → command is gate-watch.
- T3. Watch poll line includes sha_gap when checkpoint stale.
36 changes: 36 additions & 0 deletions docs/plans/2026-05-24-120-fc-active-queue-backlog-plan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---
title: "fix: fc-active defer queue backlog context"
type: fix
status: active
date: 2026-05-28
origin: docs/solutions/testing/verify-pypi-regression-closeout.md
---

# fix: FC-Active Defer Queue Backlog (plan 120)

## Summary

`fc_active_pending` defer returns before `queue_backlog_note` is set. Surface queue backlog on that path and attach **`queue_context`** + **`primary_action`** to defer briefing.

---

## Problem Frame

Live: FC queued 0.2h (not severe yet); fc_active_pending path skips backlog note logic used by other defer branches.

---

## Requirements

- R1. fc_active_pending checkpoint sets `queue_backlog_note` when FC queued ≥ 4h.
- R2. `_build_defer_queue_context` exposes backlog flags and max queued hours.
- R3. Defer briefing includes `queue_context`, `primary_action: gate_watch`, and queue note in notes.
- R4. stderr `queue_backlog=true` when severe; tests; `PLAN_TRACK_CAP` `120`; docs.

---

## Test scenarios

- T1. FC active stale gap + queued 4.5h → checkpoint has queue_backlog_note.
- T2. Defer briefing queue_context.queue_backlog true when severe.
- T3. stderr includes queue_backlog=true.
54 changes: 54 additions & 0 deletions docs/plans/2026-05-24-121-gate-watch-poll-labels-plan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
---
title: "fix: gate-watch poll labels and defer queued stderr"
type: fix
status: active
date: 2026-05-28
origin: docs/solutions/testing/verify-pypi-regression-closeout.md
---

# fix: Gate-Watch Poll Labels and Defer Queued Stderr (plan 121)

## Summary

When agents run **`--lfg-gate-watch`**, poll stderr still says "preflight watch". Add mode-aware watch labels, surface **`max_queued_hours`** on defer briefing stderr, and include **`next_hint`** in watch summary lines.

---

## Problem Frame

Live defer: FC queued ~0.3h on `573c9d4` vs master `8916e2f`; primary wait is **`--lfg-gate-watch`**. Poll lines and summary stderr use preflight naming, and defer briefing stderr omits queued hours unless backlog is severe (≥4h).

---

## Requirements

- R1. `_format_preflight_watch_poll_line` accepts a watch label; gate mode prints `LFG gate watch poll`.
- R2. `_watch_lfg_preflight_defer` accepts `watch_label`; summary/next stderr use gate vs preflight naming.
- R3. `_emit_lfg_agent_briefing_stderr` adds `queued=0.3h` from `queue_context.max_queued_hours` on defer.
- R4. `_format_preflight_watch_summary_line` appends truncated `next_hint` when present.
- R5. Tests; `PLAN_TRACK_CAP` `121`; closeout doc bullet for plan 121.

---

## Scope Boundaries

- No change to exit codes, defer logic, or FC terminal classification.
- No browser/UI work.

---

## Implementation Units

- U1. **Watch label plumbing** — `watch_label` param on poll formatter and watch loop; main passes `gate` when `lfg_gate_watch`.
- U2. **Defer stderr queued hours** — emit `queued=X.Xh` from queue_context when defer action.
- U3. **Watch summary next_hint** — summary line suffix; gate vs preflight summary stderr prefix.
- U4. **Tests and docs** — unit tests; bump `PLAN_TRACK_CAP`; closeout Prefer bullet.

---

## Test scenarios

- T1. Poll line with `watch_label="gate"` contains `gate watch poll`.
- T2. Defer stderr with `queue_context.max_queued_hours=0.33` contains `queued=0.3h`.
- T3. Summary formatter with `next_hint` includes truncated hint in line.
- T4. Plan patch test expects `019–121`.
45 changes: 45 additions & 0 deletions docs/plans/2026-05-24-122-defer-expected-after-terminal-plan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
---
title: "fix: defer expected-after-terminal and queue warn"
type: fix
status: active
date: 2026-05-28
origin: docs/solutions/testing/verify-pypi-regression-closeout.md
---

# fix: Defer Expected-After-Terminal and Queue Warn (plan 122)

## Summary

During **`fc_active_pending`** defer, agents need explicit post-FC guidance and early queue warnings before the 4h severe threshold. Add **`expected_after_terminal`** to defer briefing, **`queue_backlog_warning`** at ≥2h queued, and defer-reason transition in watch summary stderr.

---

## Problem Frame

Live: FC queued 0.5h on stale SHA; agents must gate-watch then run prefetch+gate after terminal. Briefing has **`post_terminal_commands`** but no single primary **`expected_after_terminal`** field. Queue severity only surfaces at 4h.

---

## Requirements

- R1. Defer briefing includes **`expected_after_terminal`** `{action, command}` preferring `prefetch_gate` → `gate` → `preflight`.
- R2. **`queue_context.queue_backlog_warning`** when `max_queued_hours` ≥ 2 and < 4.
- R3. Defer stderr **`queue_warn=true`** when warning active.
- R4. Watch summary line includes **`reason=start->end`** when defer reasons differ across watch.
- R5. Tests; `PLAN_TRACK_CAP` `122`; closeout doc bullet.

---

## Scope Boundaries

- No change to defer exit codes or FC classification logic.
- No doc auto-apply while deferred.

---

## Test scenarios

- T1. Defer briefing with `prefetch_gate` post_terminal → `expected_after_terminal.action=prefetch_gate`.
- T2. queue_context warning at 2.5h queued, not severe.
- T3. stderr includes `queue_warn=true` and `expected_after=prefetch_gate`.
- T4. Summary line with differing start/end defer reasons includes `reason=`.
32 changes: 32 additions & 0 deletions docs/plans/2026-05-24-123-drift-expected-after-terminal-plan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
---
title: "fix: drift expected-after-terminal and primary action"
type: fix
status: active
date: 2026-05-28
origin: docs/solutions/testing/verify-pypi-regression-closeout.md
---

# fix: Drift Expected-After-Terminal and Primary Action (plan 123)

## Summary

Live gate reports **`investigate_ci_drift`** with active FC/verify runs. Parity with defer briefing: add **`expected_after_terminal`**, **`primary_action: gate_watch`**, and **`queue_context`** on drift-wait paths; surface on stderr.

---

## Requirements

- R1. `_build_drift_expected_after(refresh_commands)` prefers closeout → refresh_dry_run → gate → preflight.
- R2. Drift briefing with `wait_recommended` sets `primary_action: gate_watch`, `expected_after_terminal`, and `queue_context`.
- R3. Drift briefing without wait sets `expected_after_terminal` to closeout when available.
- R4. Stderr for `investigate_ci_drift` includes `primary_action`, `expected_after`, and `queued=` when queue_context present.
- R5. Fix `expected_after` variable shadowing `action` in stderr emitter; tests; `PLAN_TRACK_CAP` 123; docs.

---

## Test scenarios

- T1. Active FC drift → `wait_recommended`, `primary_action=gate_watch`, `expected_after.action=refresh_dry_run`.
- T2. Terminal drift → `expected_after.action=closeout`.
- T3. stderr drift includes `expected_after=refresh_dry_run` and `primary_action=gate_watch`.
- T4. Plan patch expects `019–123`.
Loading
Loading