Hybrid factory: what was built on 2026-10-05, and what is proven
2026-10-06
Board: ETA board done ~Tue 19:18 (range Tue 18:38 - Tue 19:18), 59 of 83 done, pace 2.3/h; 4 need David first (MUSIC-01, CHEF-03, ART-06, ART-07)
One day of factory upgrades after the overnight merge jam. Every upgrade below is built and its tests pass. The question for each is whether it has been seen working on the real factory - the live proof is the diary line that shows it. Rung 3 needs that proof and your ACCEPT.
12 of 18 have live proof and wait for your verdict (updated 06:0x: F-065 AI audit gave 4 verdicts - 2 PASS, 2 real FAILs re-opened).
4 are built but have not met their situation live yet (no conflict-free self-heal, no red live branch, no graceful yield, pacing is off on purpose).
Tonight's run: 52 of 83 WeatherFarmer tickets done (63%); ETA board done ~Tue 19:20.
13 / 20
upgrades with live proof
23 / 23
factory test suites passing
52 / 83
WeatherFarmer tickets done
~11
bugs found by live testing today (Claude's count)
Upgrades by rung
not built
1
building
0
built + tests pass
19
proven live + accepted
0
signed off
0
table
Upgrades by rung
count
not built
1
building
0
built + tests pass
19
proven live + accepted
0
signed off
0
Where the day's bugs were found
live testing / watching
9
offline tests
3
David noticed
3
table
Where the day's bugs were found
count
live testing / watching
9
offline tests
3
David noticed
3
The upgrades
Tap ACCEPT when the proof convinces you (that moves it to rung 3), NOT YET otherwise, then Copy my verdict and paste it to Claude.
F-056A lane fixes its own merge conflict or red merge
rung 2 · built + tests pass - proven live, awaiting your ACCEPT
what changesa conflicted or red merge relaunches the lane that built the ticket with a MERGE-NOTE (files + the other side's tickets); parked only after 2 roundsenforced byLanes.py (code) - test_lanes S15-S17fires whenMerge-Lane exits 3 (conflict) or 4 (red)what a lane / Qwen seeslane-notes/<ticket>/MERGE-NOTE.mdhow we know it workslane_conflict_relaunch in the diary, then lane_merged for the same ticket
Live proof
15:10:21 [o1] merge of BUG-04 CONFLICTED - relaunching the lane to resolve it (round 1)
15:30 lane_merged o1 BUG-04 - ticket done
23:32:20 [s1] merge of ICON-01 went RED - relaunching the lane to resolve it (round 1)
10 relaunches today, 0 needed Claude
BLDG-01 conflicted 4 times in one day - lanes keep editing the same game files; F-062 (batch merges) would cut this.
F-059The GPU makes art without Qwen
rung 2 · built + tests pass - proven live, awaiting your ACCEPT
what changesLanes.py runs drain_run.py when art waits; drain.lock / merge.lock take turns; never two drains; a refused drain retries in 10 minenforced byLanes.py drain_tick + drain_run.py + Merge-Lane wait_for_drain (code) - S21, S24fires whenart requests pending and no Qwen jobwhat a lane / Qwen seesnew sprites in android/assets, committedhow we know it worksdrain rows by=lanes in the diary; the pending count falls
Live proof
16:34 drain by=lanes - 25 generated
17:24 drain by=lanes - 25 generated
18:4x a second drain refused: 'another drain (pid 41708) is running'
11 drains today, ~150 images, all committed
Found and fixed live: the drain starved behind merges for an hour (18:40), and a refused drain was read as stuck (22:30). The 10-min retry is live since 00:17 - not yet seen.
F-060The Qwen switch: one decision, holds veto it
rung 2 · built + tests pass - proven live, awaiting your ACCEPT
what changesQwen runs on spare capacity or when Claude is out/silent; any hold (art, dirty folder, a lane waiting, gaming, David) keeps it offenforced byLanes.py qwen_may_run + own holds (code) - S18-S22, test_qwen_autofires whenevery minutewhat a lane / Qwen seesQwen starts, or stops at its job endhow we know it worksevery flip is a qwen_switch row with its reason
Live proof
16:28:25 switch off - hold: assets (35 art requests waiting)
16:33:55 claude_usage_back - a hand-set outage handed back by the real probe in 5 s
17:45:46 switch ON - 17 tickets waiting with no free Claude lane
17:55:48 switch off - hold: waiting-on-qwen
23:30 Qwen started after your game closed (check_mem had refused it during the game)
Unproven: a REAL Claude usage limit (only a hand-set one); the silence trigger is the backstop. Fixed tonight: its 'silence' clock froze behind holds (22:30 false 213 min) - live since 00:17, check owed.
F-066Qwen yields gracefully (your idea)
rung 2 · built + tests pass - proven live, awaiting your ACCEPT
what changesa hold mid-job raises the wrap-up flag with the reason: Qwen commits, writes its form, stops in minutesenforced byLanes.py request_wrapup + the wrapup hook (code) - S25fires whena hold appears while a Qwen job runswhat a lane / Qwen sees'SUPERVISOR WRAP-UP ... A HOLD NEEDS YOU OUT OF THE WAY - <reason>' in every commandhow we know it worksqwen_wrapup_requested, then job_end within ~10 min
Live proof
09:11:31 hold waiting-on-qwen (two Claude merges waited) -> qwen_wrapup_requested
09:25:49 Qwen job_end exit_reason self_stop, 24 min, 20 min before its 09:46 deadline; form committed, tree clean
Qwen's last words: 'Stopping now; a HOLD needs me out of the way.'
14 minutes from request to stop - Qwen finished its current step first, by design.
F-064Finish-time estimate (ETA) in every health line and report
rung 2 · built + tests pass - proven live, awaiting your ACCEPT
what changesETA.py: board done/left weighted by est, 6-h/24-h pace, ETA + range, the tickets that need Davidenforced bya script (no AI) - test_eta.pyfires whenevery HEALTH line; the top of every reportwhat a lane / Qwen seesnothinghow we know it worksback-test: as of 18:00 it said Tue 20:24 - Wed 12:34; the range should hold the real finish
Live proof
00:58 HEALTH ... ETA board done ~Tue 23:21 (range Tue 20:54 - Tue 23:21), 43 of 83 done, pace 1.9/h; 7 need David first
02:40 HEALTH ... ETA ~Tue 20:47, 47 of 83 done, pace 2.0/h
Early in a run the 24-h pace includes idle hours, so the first estimates are pessimistic (as of 12:00 it said Friday); the range covers it.
F-065AI audit of every merged ticket (rung 3 for app tickets)
rung 2 · built + tests pass - proven live, awaiting your ACCEPT
what changesan auditor lane (Opus) runs a merged ticket's T0/T1 checks on the live build, writes AUDIT.md; PASS marks tested-AI, FAIL re-opens, 2 FAILs blockenforced byLanes.py start_audit + Lane-Runner --audit-job + Merge-Lane --audit (code) - S26, merge G/Hfires whena ticket merges done after auditSincewhat a lane / Qwen seesthe auditor: an AUDIT JOB prompt; a builder: AUDIT.md findings when its ticket is re-openedhow we know it workslane_audited rows with a verdict; board rows gain tested-AI
Live proof
03:24:42 BLDG-03 FAIL - the generated shrine has no feather totem; re-opened, lane s1 fixing it
04:09:56 DROP-02 PASS -> tested-AI
04:44:31 ZEN-03 PASS -> tested-AI
05:05:43 ICON-01 FAIL - marked done before its icons were judged; re-opened
4 verdicts, 2 real defects caught that the builder lanes had marked done
The first verdict was misread as 'NO' (a wrapped line); the parser is now strict (AUDIT: PASS|FAIL), BLDG-03 corrected. Network outages killed 2 audits; fixed (NET rule).
F-068Audit the backlog, easiest first
rung 2 · built + tests pass - not proven live yet
what changeswhen no new merge waits, the auditor takes the oldest-merged backlog ticket with the fewest device checksenforced byLanes.py audit_target (code) - test_lanes S29fires whenthe auditor is idle and auditBacklog is onwhat a lane / Qwen seesthe auditor: the same AUDIT JOB prompthow we know it workslane_audit_job on a ticket merged before auditSince
Live proof: none yet
Not met live yet - new merges keep the auditor busy (by design they go first).
NETA network outage is never a lane death
rung 2 · built + tests pass - not proven live yet
what changes'can't reach the API' / ENOTFOUND / ECONNRESET... -> the lane waits 2 min and retries the same ticket; no death counted, no hand-over to Qwenenforced byLanes.py NET rule (code) - test_lanes S30fires whena lane run ends with a network errorwhat a lane / Qwen seesnothinghow we know it workslane_requeued with network=true, the same lane continues
Live proof
found live: 05:29-05:48 two outages counted as deaths, handed RAIN-01 to Qwen in quiet hours and gave up CHEF-02's audit (repaired by hand)
fix live 05:55 (commit 5765771)
Waiting for the next outage to show the new line.
F-067This page: Factory Reports
rung 2 · built + tests pass - proven live, awaiting your ACCEPT
what changesfactory_report.py: JSON -> this page, published by one commandenforced bya script; CLAUDE.md: rung-3 reports go herefires whenClaude publishes a reportwhat a lane / Qwen seesnothinghow we know it worksyou are reading it
Live proof
https://prettycooldudes.com/factory-reports
Your verdict comes back by copy-paste, not automatically.
F-055A dirty main folder no longer jams merges
rung 2 · built + tests pass - not proven live yet
what changesMerge-Lane commits only the factory's own files (asset queue, generated art, ATTRIBUTION) then retries; anything else is never touchedenforced byMerge-Lane self_heal_dirty (code) - test_merge_lane E/Ffires whena fast-forward is refused by uncommitted factory fileswhat a lane / Qwen seesnothinghow we know it worksmerge_self_heal row, then the merge lands
Live proof: none yet
Not needed live yet: the drain now commits everything itself, so the situation has not come back.
F-057A red live branch is one alarm
rung 2 · built + tests pass - not proven live yet
what changesMerge-Lane emits live_red once per failing set per hour; the watcher wakes Claudeenforced byMerge-Lane + Watch-Problems (code)fires whenthe live branch fails tests on its ownwhat a lane / Qwen seesnothinghow we know it worksa live_red row
Live proof: none yet
Live has not gone red since it was built.
WATCHClaude watches: problems at once, a look after 7.5 quiet minutes
rung 2 · built + tests pass - proven live, awaiting your ACCEPT
what changesWatch-Problems.py under the Monitor tool; HEALTH shows each lane live / SILENTenforced bythe script + CLAUDE.md on-duty rulefires whena problem event; 7.5 min of a quiet diarywhat a lane / Qwen seesnothinghow we know it worksClaude answered every problem line today
Live proof
caught: BUG-04, TALK-01, BLDG-01 conflicts; the red live branch 10:31; the Qwen merge freeze 14:16; the dead merge lock 16:57; the drain starving 18:40
Rested on Claude re-arming it every 30 min; a Claude Code restart (20:08) stopped it until the next wake.
LOCKSDead merge locks and duplicate Lanes.py fix themselves
rung 2 · built + tests pass - proven live, awaiting your ACCEPT
what changesa merge.lock whose holder is dead is taken over at once; a second Lanes.py refuses to startenforced byMerge-Lane pid_alive, Lanes.py lanes.pid (code)fires whena restart killed a merge / an accidental second startwhat a lane / Qwen seesnothinghow we know it works'merge.lock held by N, which is not running - taking it over'; 'already running (pid N)'
Live proof
19:0x second Lanes.py start: 'already running for this project (pid 41264)' - exit 3
The lock takeover was coded after the 16:58 jam - not yet seen live.
WIPQwen's unfinished work is saved on a stop
rung 2 · built + tests pass - proven live, awaiting your ACCEPT
what changesthe supervisor stashes Qwen's uncommitted work to wip/qwen-<time> before exitingenforced byFactory-Supervisor.ps1 (code)fires whenthe supervisor is told to stopwhat a lane / Qwen seesnothinghow we know it worksqwen_wip_saved row; the main folder clean
Nothing hands that branch to the next builder automatically (Claude left s2 a note for DECOR-01).
DIARYLanes record their tokens again
rung 2 · built + tests pass - proven live, awaiting your ACCEPT
what changesLane-Runner's event() crashed on every run end since F-049enforced bycode + test_diary_eventfires whenevery lane run endwhat a lane / Qwen seesnothinghow we know it workslane_end rows with tokens
Live proof
15:48:53 lane_end p1 plan tokens cost_usd 3.28
BURSTOpus bursts before each usage reset, and gaming mode
rung 2 · built + tests pass - proven live, awaiting your ACCEPT
what changesburst.py: a detached scheduler (last 30 min of each 5-h window) + a gaming watcherenforced byburst.py in its own tabs (survives a Claude restart)fires when00:50, 05:50, ... ; the game closed 10 minwhat a lane / Qwen seeslanes switch modelhow we know it worksburst and gaming_mode rows
Live proof
20:20:04 burst off - lanes back to normal
21:32:39 gaming_mode off - Minecraft Dungeons closed
Brittle by design: the window times assume back-to-back windows. The gaming watcher only knows one game - Rocket League ran with gaming mode off (check_mem still protected it). F-063.
F-061Budget pacing
rung 2 · built + tests pass - not proven live yet
what changesnear the window limit only one builder starts new workenforced byLanes.paced + Usage-Pace.pyfires whenafter calibration, at 85%what a lane / Qwen seesother lanes waithow we know it worksbudget_pace row
Live proof: none yet
Off on purpose - brittle (cost is recorded only at run end; your chats are not counted).
F-062Merges stop re-running the suite for art and config commits
rung 2 · built + tests pass - proven live, awaiting your ACCEPT
what changeswhen the live branch moves during a merge check only by art / the asset queue / .factory config, that move is folded into the tested merge and it lands at onceenforced byMerge-Lane fold_factory_move (code) - test_merge_lane I/Jfires whenlive moves mid-checkwhat a lane / Qwen seesnothing - tickets merge soonerhow we know it workslane_merge_folded rows; 'moved during the check' refusals drop from 11 a night to ~0; done->merged median under 18 min
Live proof
measured last night: 39 merges, 11 re-ran the full suite (6-8 min each) because a drain or a lanes.json switch committed mid-check; median wait 18 min, p90 58
06:25:24 lane_merge_folded s4 ICON-01 - live moved by factory files only, folded in, no second suite run
Part 2 (batch merges) waits for a re-measure after one night with part 1.
F-063Gaming mode for any game, by itself
rung 2 · built + tests pass - not proven live yet
what changesa watcher sees any game start (Windows' own game list, Steam, Xbox games) -> Qwen held, no art drain, models unloaded; 10 min after the game closes it lifts. Holds expire, so a forgotten 'on' heals.enforced bygaming.py watch (own tab) + Lanes / drain_run / supervisor drain gates (code) - test_gaming A-E, test_lanes S31fires whena recognised game startswhat a lane / Qwen seesQwen: the wrap-up line, then no new jobhow we know it worksdiary gaming_mode on auto=true game=<exe>, off ~10 min after; no drain row in between
Live proof
watcher running since 06:1x (tab gaming-watch)
Live proof is your next game. A launcher-only open (League client) counts as gaming.
F-058Qwen in its own folder
rung 0 · not built
what changesparked
Live proof: none yet
The real fix for merges waiting up to 45 min behind a Qwen job.
Stability matrix
state change
mechanism
offline test
live proof
rung
Claude out of usage
F-040 mark + F-060 switch
S19
16:33:55 hand-set outage handed back
2 (real limit unproven)
Claude silent 45 min
F-060 silence trigger
S20
22:30 fired - falsely (clock bug, fixed 9f17bc7)
2
art waiting
assets hold + drain
S21, S24, S25
16:28 hold + drain
2
lane blocked on Qwen
waiting-on-qwen hold, F-066 wrap-up
S25
09:11 wrap-up requested -> 09:25 Qwen self-stopped, tree clean
2
dirty main folder
dirty-main hold, F-055 self-heal, WIP save
E/F
17:38 hold kept Qwen off; 19:35 WIP saved
2
gaming
gaming hold + check_mem
S18
19:50 on, 21:32 off; 22:30 check_mem refused during Rocket League
2
merge conflict
F-056
S15, S16
15:10 BUG-04 relaunched and landed
2
red merge
F-056
S17
23:32 ICON-01 relaunched
2
red live branch
F-057 live_red
-
none yet
2
dead merge lock
pid_alive takeover
-
none yet (fixed by hand 16:58)
2
two Lanes.py
lanes.pid
-
19:0x second start refused
2
drain busy / refused
drain.lock, exit 3/4 = retry
S24
18:4x second drain refused
2
night (quiet hours)
quiet-hours hold 23:00-09:00
S27
00:35:28 hold appeared
2
a hold while a lane is busy (the frozen clock)
track_alive every tick
S28
no false silence since 02:02
2
network / API unreachable
NET rule: wait 2 min, retry, no death
S30
05:29-05:48 outages counted as deaths (old code); fix live 05:55 - new line not seen yet
2
a merged ticket is wrong
F-065 audit re-opens it
S26, merge G/H
03:24 BLDG-03 and 05:05 ICON-01 re-opened
2
Opus burst / usage reset
burst.py scheduler
-
00:50 and 05:50 bursts on, 01:21 off
2
Next
Your verdict: ACCEPT what convinces you.
Owed live proofs: F-066 Qwen complying with a wrap-up (Qwen is off until 09:00, quiet hours), the 10-minute drain retry, F-068's first backlog audit, the NET line on the next outage.
5 tickets need you first: ICON-01, MUSIC-01, CHEF-03, ART-06, ART-07.