action: backfill

event: restructure+inspector

details: Studio→Build→Print→Review IA; core/inspector.py (O'Brien proposes, La Forge grades; dispute gates PRINT); part-class inference; sticky footer. make test green.


event: zerogpu-fallback-fix

details: @spaces.GPU moved to inference only (core/llm_zerogpu._generate), NOT build_job — quota-out now falls back instead of erroring. UI widened to 1600px. Rename to Microfactory Node: 3D Printer.


event: reset+logging

details: In-UI Reset to Baseline (ledger.reset_to_baseline + policy.reset). field_log.log_event for ALL runs (build/second_opinion/simulate/print/record), unified flat 26-col schema for the HF dataset viewer.


event: deploy-tooling

details: scripts/deploy_preflight.py D1–D10 + make deploy (--push upload_folder + reboot) + D10 field-log dataset check. RUNBOOK rewritten clean; history → reference/RUNBOOK-FINDINGS.md; judge tour folded into RUNBOOK §2.


event: voice+writeup+metadata

details: Saved VOICE.md canonical. Rewrote 01-SUBMISSION, 04-SOCIAL, 06-FIELD-NOTES in Practical Polymath voice (0 em/en dashes). README hero + value-prop + screenshot placeholders. Dataset cards (ledger+field-log). REVIEW.md packet.


event: finetune-scaffold+warmup

details: learn/finetune/ scaffold (prep/train_modal/eval) + dataset (400/80) + kickoff prompt. MODAL-USAGE.md + Modal credited in submission. Space UI warm-up button + live model status (core/llm.warm_up).


action: checkpoint

event: catch-up

details: Pulled latest. Adopted the activity-logging protocol (BUDGET.md). Reviewed fine-tune state: v1 parroted (Not Well-Tuned, honest); v2 (gemma-4-E4B r=4 1ep rich 960-ex) + v3 (QAT) training; Gemma4ClippableLinear bug fixed; smoke loss 2.31→1.57 no collapse; budget ~$7.21/$100. make test green, app builds.


action: audit

event: submission-readiness

details: Submission-day gap sweep vs 03-CHECKLIST + SUBMISSION-AUDIT. Blockers: video upload+link, social publish+link, Field Notes publish (field-notes tag is already in README frontmatter — claim-integrity risk until published), re-deploy Space so README=latest (hero/voice/links/warm-up), upload the 2 dataset cards to their repos, Off-Brand screenshot, Tiny-Titan org ruling, then submit+confirm+tag.


action: decision

event: badges-tiny-titan+well-tuned

details: Per Kyle: added tiny-titan + well-tuned to README frontmatter; reconciled README badges/frontier + 01-SUBMISSION footer. Well-Tuned framed as end-to-end system tuning (prompt steering + Spine + Brain/Inspector) with the LoRA training as the weights-level version. FLAGGED to Kyle: well-tuned commonly means weight fine-tuning (the v2/v3 LoRA is the stronger basis, hours away); tiny-titan counts total params (e4b 8B raw) so the ~4B-effective claim rests on MatFormer effective-param reading.


action: docs

event: competitive-update+video-own-prints

details: Per Kyle 'I agree with your additions go ahead and update the docs'. Appended dated 2026-06-14 final-weekend update to docs/plan/07-COMPETITIVE-LANDSCAPE.md (fuller roster: GigScan/Lolaby/Tashi/Pakistan Helper/ClinIQ/NeuroBait; trends: MiniCPM-V vision king, llama.cpp/GGUF default, scaffolding now table-stakes; win-ranking + risk-ranking with simulated-outcome as #1 exposure; tactical last-hour moves; section is 0 em/en dashes). Added the own-prints + OctoPrint-history beat to docs/writeup/02-VIDEO.md (Beat 3 narrative, shot-list row 3a, new narration-cue row): demo on a real own-printed STL, narrate 'fed it my own OctoPrint print history'.


event: video-rewrite-two-track

details: Kyle: 'I hate the video script, cheesy and hard to follow.' New direction: stick to the judges runbook but emphasize beats; two portions = screen recording + camera; he shoots story/ending end caps + optional camera-on-demo; UI update notes pending. Rewrote docs/writeup/02-VIDEO.md from the theatrical beat-script into a lean two-track plan (Track A camera end caps, Track B screen recording that defers to RUNBOOK §2 for clicks so it won't rot when the UI changes). Talking points are short/paraphrasable, not lines to recite. Kept the own-prints/OctoPrint beat, the compounding-as-climax, the honesty split, the climbing-job tip, and added the optional 'one real print' beat that reframes the sim as a demo convenience (per the earlier real-knowledge/real-utility discussion).


action: implement

event: ui-overhaul

details: Implemented the walkthrough UI spec (54 items, 4 tabs). Resolved 3 open Qs via AskUserQuestion: one default Print action (slider=1 single print, La Forge grades inline), inline Engineer's-Read<->Second-Opinion segmented toggle, two-zone outcome (dominant SIMULATED RESULT + compact ~20% LOG A REAL PRINT). Global: no-emoji icon set + colored-dot status (core/theme.py icon()/_ICONS, llm.py/llm_zerogpu.py backend_status, viewer.py), single consolidated custom loader + progressive reveal, top-right primary + persistent Reset on every tab, contained .ce-card blocks, mirrored tab_intro/footer. Studio: header model switcher (Live/LoRA/QAT, honest 'training not yet serving'), warm-up to header, Job Log up top, env+materials side by side, part full-width with stacked sources. Build: slice|preview side-by-side + vertical layer slider, Engineer's Read full section w/ validation folded, toggle reveals La Forge, dispute gate held. Print: merged action, progressive reveal, curve+log side by side, two-zone outcome, scroll-to-top. Review: collapsible mesh, carded ledger, reset top-right. Verified: make test 10/10, deploy-check D1-D7 green, app.build() OK, emoji scan clean, offline E2E pipeline OK. Deferred (flagged in changelog): build-08 image preload, review-04 printable config, print-09 duration, studio-01 tab rename. Docs: RUNBOOK §2/§4 updated (+ Chrome-app/Cap-Studio 1080p recording tips per Kyle), 02-VIDEO toggle+recording note, new docs/dev/UI-OVERHAUL-CHANGELOG.md + UI-OVERHAUL-GUIDE-REVIEW.md.


event: model-switcher-ui-wiring

details: Pulled the fine-tune agent's serving merge (SERVING.md handoff: backend done — llm_zerogpu_lora.py, _apply_model_choice, MODEL_OPTIONS/MODEL_LORA_MAP, build_job(model_choice); UI left to me). Wired the UI: replaced my placeholder Live/LoRA/QAT Radio with the real gr.Dropdown(MODEL_OPTIONS) [Retrieval (default)/LoRA v2/LoRA v3 QAT/Modal API], select_model applies the backend + reports active model, build_job now receives model_choice (fixed the 6-vs-7 arg merge bug), added missing 'import os' (backend used it un-imported -> would crash on selection), added local-user adapter note. Verified make test 10/10, deploy-check D1-D7 green, app.build() OK, all 4 backends apply without crash, build_job(7 args)->15 outputs. Flagged (NOT touched, fine-tune agent's domain): llm.py::_zerogpu() imports llm_zerogpu not _lora and only special-cases BACKEND=zerogpu (not modal) — LoRA/Modal live routing may need a small llm.py follow-up. Updated docs/dev/UI-OVERHAUL-CHANGELOG.md addendum.


action: review+fix

event: local-agent-ui-check

details: Per Kyle: pulled, reviewed the fine-tune agent's UI-touching changes (MODEL_OPTIONS reorder -> default LoRA v3 QAT; startup _apply_model_choice at import; re-added model_choice_state placeholder+NOTE which I removed again). Verified offline: app builds, all 4 selections apply via select_model without crash, status line honestly shows requested-choice + real backend, full E2E works. FIXED the real defect their changes left: core/llm.py::_zerogpu() always imported llm_zerogpu (base E4B) and ignored CHIEF_ENGINEER_LORA_REPO, so the dropdown's LoRA/Modal picks would silently serve base on the Space (UI says LoRA, serves base = truthfulness break, and LoRA is the Well-Tuned story). One-line router fix: _zerogpu() now prefers llm_zerogpu_lora when LORA_REPO set (dynamic read); base path unchanged. make test 10/10, build OK. FLAGGED (not touched, fine-tune domain): (1) llm_zerogpu_lora caches LORA_REPO at import, imported before startup _apply_model_choice sets the env -> served adapter depends on init order, verify on deploy that status shows the LoRA not base; (2) Modal API option not wired into llm.py (no modal HTTP path) -> falls through; wire or mark experimental. Noted in docs/dev/UI-OVERHAUL-CHANGELOG.md Addendum 2.


action: fix

event: dynamic-backend-switch

details: Kyle's catch: ZeroGPU<->Modal switch can't be a frozen Space var. core/llm.py read BACKEND once at import and routed on the cached value; the dropdown's _apply_model_choice only set the env at runtime (its importlib.reload reloaded the core package not the llm submodule, so BACKEND never updated) -> a fixed CHIEF_ENGINEER_BACKEND Space var would freeze the switch (pick Modal, still serve ZeroGPU). Fix: added llm._backend() reading the env dynamically each call; _zerogpu() and _modal_api() now use it; Space var becomes the initial default only; removed the redundant package reload from _apply_model_choice. Verified: runtime env flip changes _backend()/_modal_api(); make test 10/10, build OK, deploy-check D1 green. Remaining (fine-tune domain): llm_zerogpu_lora caches LORA_REPO + _model, so live v2<->v3 re-swap needs a small change there; ZeroGPU<->Modal<->base switching now works. Noted in docs/dev/UI-OVERHAUL-CHANGELOG.md Addendum 3.


action: refine

details: Per Kyle screenshots+notes (dev-tools mockup = target, replicate in code; go fully custom, ditch standard gradio for Off-Brand). Renamed tabs STUDIO->BUILD, BUILD->TEST (ids unchanged). Restructured define tab env band to the mockup: readout | RANDOMIZE | OVERRIDE expanded inline (no accordion) | MATERIAL, equal-height row. GLOBAL loader kill: comprehensive CSS hiding all stock gradio progress/loading/generating/status indicators (the orange artifacts in number inputs) - single global switch. Model info block -> hover callout (icon('info') + .ce-tip) next to the switcher. Custom blank part/model viewer: _viewer_placeholder() with Kyle's exact copy ('Define the part... SLICE (Build) and PRINT...'), toggles with model3d (placeholder visible until a part loads; preview fns now return 4 outputs incl part_placeholder). Fully-custom dropdown CSS (.ce-modeldd square LCARS + options panel). part text padding (.ce-pad). Verified: make test 10/10, build OK, deploy-check D1 green. NOTE remaining inherently-gradio: the live Model3D/Image widget toolbars (the interactive viewers themselves) - empty states are now custom.


event: custom-domain-swap

details: Kyle: custom domain node.microfactory.space is stable; swap public-facing links, leave raw HF as fallback. Updated: README Links (Live: node.microfactory.space, fallback raw), 01-SUBMISSION footer (added Live link + fallback), 04-SOCIAL-POST (canonical link + checklist), 06-FIELD-NOTES footer, dataset cards (ledger + field-log), 02-VIDEO (record from node.microfactory.space + PWA install), RUNBOOK §2 header (live URL + corrected switcher names/callout), DEPLOYMENT status (Live + fallback), scripts/record.py SPACE_URL (custom domain default, env-overridable, raw in comment). Left raw HF as intentional fallback in README/SUBMISSION/SOCIAL/DEPLOYMENT/record.py; SPACE-DEPLOY git clone stays the HF git URL. Verified record.py compiles + app builds.


event: visual-review-headless+critical-fix

details: Couldn't reach live Space from sandbox (egress allowlist blocks node.microfactory.space + *.hf.space), so rendered deployed code locally via headless Chromium (playwright /opt/pw-browsers chromium-1194) and screenshotted every tab + the build flow. FOUND CRITICAL BUG: BUILD->SLICE never completed — scroll-to-top JS was chained BETWEEN build_start and build_job (.then(None,None,None,js=...)), blocking build_job; SLICE showed the loader forever. NOT env/model-switcher/modal related. Fixed: scroll now a separate parallel run_btn.click. Also fixed stale tab-name copy (Studio/Build->BUILD/SLICE) in warnings + PRINT empty-state. Verified end-to-end via render: benchy load -> SLICE completes (cross-section + vertical slider, motion preview, precedent eval, O'Brien reasoning, risks, settings+gcode, second-opinion toggle), PRINT controls, REVIEW ledger. make test 10/10. Open visual issues noted (NOT fixed, fine-tune agent owns header CSS): header model-switcher overlaps command-bar tag/clock at 1600px (margin:-46px lift); duplicate ENVIRONMENT (SIMULATED) label; Model3D toolbar chrome on loaded model. DEPLOYED SPACE HAS THE CRITICAL BUILD BUG until next make deploy.