>_ dark-factoryGuides

Build Log

Last updated: October 28, 2026

A plain list of what I built, what broke, and how it got fixed. February 2026 to this week, newest first.

Build, maintenance and course work only. I write this by hand, and the fixes stay honest because the fixes are the reason the course exists. Anything before July 2026 predates the single repo and is reconstructed from notes.

2026-10-27

Five course topics updated for the hub

Updated five course topics for the current hub. Lessons now match how it handles task states, search, storage, health checks and the emergency reset. Also updated three site lessons and the kit docs.

2026-10-27

Level 2 worker service hardened

Updated the Level 2 kit worker service. Sets PATH and a private temp folder. Tasks write only to project, cache and state folders. Cold runs pass on Ubuntu 22.04 and 24.04.

2026-10-26

Worker lessons updated for symbol lookup

Updated two Level 2 worker lessons to state that symbol lookup runs on every task. Reviewed 42 hub worker changes; no other lesson or kit file affected.

2026-10-24

Level 2 hub kits gain built-in symbol search

Re-pinned both Level 2 hub kits to 2026.1024.0 with built-in symbol search. Hub runs on Python 3.12 only. Ubuntu 22.04 setup now installs PostgreSQL 14 and pgvector from the PostgreSQL project's repository.

2026-10-21

Level 2 pages state Windows support

Level 2 and bundle FAQs now state the Module 1 hub runs natively on 64-bit Windows 10 or 11 (Python 3.12, Ollama). Modules 2 and 7 still need Linux or WSL2. Home FAQ covers the WSL2 zip install. Windows downloads include a README-WINDOWS note.

2026-10-21

Windows hub kit released for Level 2

Released the native Windows hub kit and PostgreSQL runtime for Level 2 after the import-closure proof and cold run passed. Needs Python 3.12 and Ollama, no admin rights, no Visual C++ install. Both listed in the release manifest.

2026-10-21

Windows PostgreSQL runtime trimmed

Re-cut the Windows PostgreSQL runtime without nine unused language modules. All release checks pass.

2026-10-19

Level 2 build-OS picker ships dark

Reader and files panel can show Linux or Windows blocks per browser choice. With OS_PICKER_LIVE false, students see exactly what they saw before. Turns on once hub, workers and ops run natively on Windows.

2026-10-19

Native Windows hub kit for Level 2

Built a native Windows edition of the Level 2 hub: portable PostgreSQL 16 with pgvector from a pinned tag, Python 3.12 wheelhouse, .bat launcher, no admin rights, zips under 100 MB. Held for a clean-machine test before the course lists it.

2026-10-18

Mobile header and menu accessibility

The mobile menu is now a labelled dialog with focus trap and Escape. The SpecWeaver phone header no longer overlaps the logo. Level 1 no longer shifts layout while fonts load.

2026-10-18

Guides cite their sources

Re-verified every claim in the ChatGPT memory guide against OpenAI's current docs: changed claims updated, a removed quote replaced, 14 reference links added. The MCP, hardware and buy-or-build guides gained 27 links, each read against its sentence.

2026-10-18

Single-user license

The SpecWeaver pricing card, home and dashboard cards now say single-user license. terms.html says one person may use it for their own and client work, commercial included; redistribution stays barred.

2026-10-18

Purchase window states the guarantee terms

The account step now says the guarantee means read in the browser first, and downloading makes the purchase final (SpecWeaver: until you download). Six absolute claims, 'Runs forever' and 'No rework' among them, became checkable statements.

2026-10-16

Whole-level zip row reads Everything in this Level

levelN-complete.zip rows in the files panel now read 'Everything in this Level' with 'all Level N modules'. Module zips keep their label and file count.

2026-10-16

Level 2 hub kit at the pinned rag-stack commit

Merged the ten kit files held at older commits and added five upstream files (migrations 010-012, two tests). hubkit:check reports 0 warnings. rag-hub-kit, mission-control-kit and level2-complete rebuilt and pushed to the course repo.

2026-10-16

No sideways scroll on phones

Footer links on /log are inline-block so they wrap at 375 px. The home OUTCOMES card wraps its sample saved-to path at every width.

2026-10-16

Demo screenshots along the sales path

Home, Level 1, Level 2, bundle, primer and the exercise guide show one screenshot beside each claim it supports, each tagged as a fictional demo. Level 1 and Level 2 gain a buy line with a Needs line after Real Output.

2026-10-16

Exercise guide states time and cost

The guide now estimates about 45 minutes once your AI app is set up and notes the exercise is free while the AI provider may charge. On phones the answer key stacks one card per client and the run record scrolls in its box.

2026-10-16

Kit worker help responder stays in the task folder

The Level 2 kit worker's headless help responder (off by default) now reads only inside its task folder: .env, key and credential files denied, local settings only. Lesson l-4-3 and the module 4 guide updated. Level 2 zips rebuilt.

2026-10-16

Exercise guide updated

Updated the test-an-agent guide: primer link, free and fictional-data note with a time estimate, plain-editor steps, primer and Level 1 buttons, email capture. Corrected a split quote and the scorecard alignment.

2026-10-16

Vault dashboard keeps the admin key in memory

Hardened the module 11 vault dashboard stub in the kit source: key held in a page variable only, Disconnect button, late responses dropped, old saved keys deleted. README and lesson l-7-4 note the browse key gets 403.

2026-10-15

Kit safety guard and layout updates

OpenCode safety-guard.ts now reads output.args and blocks root-level deletes and .env writes. module-b agents get real frontmatter, skills move to NAME/SKILL.md, agentvault gains Windows and Telegram support, Level 2 memory cleanup is manual-only.

2026-10-15

Module 5 compaction hooks use real hook APIs

Rewrote lessons l-5-2 and l-5-3 around each CLI's hook API: Claude Code PreCompact, PostCompact and SessionStart compact, Codex hooks.json, OpenCode event plugins. Dropped the Gemini card. Shipped in the Level 1 kits.

2026-10-15

OpenCode is the reader default

Removed Gemini CLI from Level 1 and Level 2. The reader falls back to OpenCode. A cliRun token carries each CLI's headless command, /nexus always starts interactively, module 4 scripts run on Windows, macOS and Linux. Kits rebuilt.

2026-10-14

Demo screenshot built from a fixture

Added build/dashboard-fixture. Builds the morning-screen demo screenshot from a fictional persona briefing and a localhost-only mock of the dashboard API. Capture blocks every non-local request; finalize crops, labels and strips metadata.

2026-10-09

Health check reports commands as written

Improved health_check.py in Level 1 Module 4. A missing hook script is now reported with the command as written, not the expanded variable. Rebuilt the Level 1 kits.

2026-10-09

Optional agent dashboard in Level 1

Added agent_dashboard.py to Level 1 Module 4. Builds one static, read-only page from the workspace: health checks, today's briefing, recent notes, heartbeat, disk, alerts. No server. Rebuilt the Level 1 kits.

2026-10-09

Error alerts now age out

Improved error-alerting.py in Level 1 Module 4. The error scan now applies its time window. Logs untouched for 35 minutes are skipped, so an old ERROR line stops alerting.

2026-10-08

Install timings

Timed the Level 1 and Level 2 agent installs on a fresh Ubuntu host to update the course times.

2026-10-07

Level 2 install path and kit cleanup

Added level2-complete.zip: START-HERE for your agent, all lessons as markdown, every kit. Workers pick their CLI from one env variable. Hardening opens ssh only; port 3000 is opt-in. Setup generates the database password. One env file across every script and unit.

2026-10-07

Level 1 install path

Added level1-complete.zip: one download with START-HERE for your agent, all lessons as markdown, and every kit. Setup now accepts Claude Code or OpenCode. Verify skips the API-key check for local models and account logins. Build kit repacked with the September hook fixes.

2026-10-03

Worker host detection in Level 2 kits

Simplified host detection in the Level 2 worker, Modules 2 and 7. Set DF_HOST when your hostname does not start with DESKTOP. Release scrub list extended.

2026-10-03

Orchestrator decision rights in Level 2

Added decision rights between orchestrators, escalation path, deputy cover for a down machine, schedule preflight checks. Corrected sweep cadence and briefing outage rules. Kits for modules 1, 2, 4, 7, 8, 11 rebuilt.

2026-09-29

Memory consolidation in Production Ops

Improved the memory consolidation section of Level 2 Production Ops so it matches current worker behavior. Rebuilt the module bundle.

2026-09-27

Worker script refresh for Course 2

Synced the worker script in Level 2 Modules 2 and 7 to the current release. Dream output paths now read from environment variables. Production Ops lesson adds thread-flow monitoring. Fixed a per-lookup cost typo.

2026-09-27

Level 1 upgrade path fixes

Fixed account lookup in the Level 1 upgrade path for domain-qualified and non-ASCII Windows names. Dashboard Mac label now explains the zsh requirement. Rebuilt both affected kits.

2026-09-26

Upgrade check for Course 1 kits

Added upgrade-check.sh to Level 1 Module 6, sharing its core with the Course 2 check. Troubleshooting lesson gains Keeping Your Kits Current. Level 1 owners can now mint tokens.

2026-09-26

Upgrade tokens on the dashboard

Added read-only upgrade tokens to the dashboard. Each token reaches only the levels you own. Tokens expire after one year; two active at most; revocable.

2026-09-26

Upgrade check for Course 2 kits

Added a kit upgrade check to daily-ops.sh in Course 2. Detects and reports new kit releases; never applies them. Stack Maintenance lesson adds an approve-each-step apply procedure.

2026-09-26

Reader selector learns each harness's skills folder

Added a skills-folder placeholder so Nexus install paths render per harness. Fixed IronClaw pointing at the OpenClaw folder. Added OpenClaw as a seventh selector entry in both readers.

2026-09-26

Course 2 now speaks of your agent, not one CLI

Reworded 14 Claude Code mentions across Course 2 lessons and 23 in the Level 2 module files. Harness-specific commands stay where they are optional; the selector fills the rest.

2026-09-26

Thread plugin for the course dispatcher

The kit's MCP dispatcher gains a thread plugin. Seven thread tools reach your agent from the same download, and a test keeps the plugin matched to the hub manifest.

2026-09-26

Course 2: agent threads

Agent threads folded into seven existing Course 2 lessons. The hub kit adds the threads router, inbox and presence. Both worker downloads now ship the current production worker with help-thread support.

2026-09-24

No-code agent testing guide

Added a guide to testing an AI agent without code. Includes a sample test pack, expected results and a scorecard. All 29 claims verified before release.

2026-09-24

Task brief guide

Added a guide to AI agent task briefs. Covers result, inputs, permissions and checks, with a reusable template and worked example. All 24 claims verified before release.

2026-09-11

Course kits refreshed from the hub

Ported the costs rollup, actionable-only escalations and the disputes screen into the Course 2 kits. Added the additional costs data route to Mission Control. One module download rebuilt.

2026-09-11

Weekly course drift check

Added a weekly check for drift between course source, staging and the live site. Covers kit code, download contents and ten tracked lessons. Reports only; fixes stay manual.

2026-09-09

Download checks now read contents

The release check now opens each module download and compares the files inside, instead of the zip bytes. Different machines compress identical files differently, so byte checks flagged all 19 downloads as changed. Now only real content changes show up.

2026-09-08

Three Course 2 modules got clearer

Modules 2, 7 and 11 now teach one worker owning a task, recovery you verify, and reporting kept separate. The wording on Windows file boundaries, key handling, the learning payload and RAG startup is clearer and easier to follow. Downloads rebuilt to match.

2026-09-08

Crypto refunds now spelled out

The refund page now spells out how crypto refunds work: sent by hand to the paying wallet or an address confirmed by email, same asset and network, same token amount, and up to ten business days. The 30-day window applies to both payment methods.

2026-09-08

Fifteen fixes from a full site audit

An audit of the live course and site turned up fifteen items across the lessons, the worker kit and the checkout. All fifteen are fixed and tested: clearer wording on what is included, an accessible payment modal, and statuses that match the kit.

2026-09-08

Mission Control got its own lesson and download

The dashboard material was large enough to stand alone, so it is now a separate bonus lesson instead of a block inside the anti-patterns lesson. It ships with its own download, and the pages that said the bonus module had no files were updated.

2026-09-07

Mission Control now lives in the bonus module

Course 2 teaches the hub dashboard and its smoke test in the bonus module rather than module 1. Module 1 stays on getting the stack running, and the full walkthrough sits with the other deep-dive material for when you want it.

2026-09-05

Rebuilt the Level 2 hub kit

The kit now ships the dashboard split by screen instead of one long file, a cleaner smoke suite, and an embedding size ladder so it tracks the current stack. Vector search got sturdier at the same time: rows with no embedding are handled, so a partly indexed store still returns results.

2026-09-03

Two scheduled jobs became one

The staleness check was its own weekly task. It is one deterministic command, so it now runs inside the daily site routine instead. Due guides surface up to six days sooner, and quiet days still report one line.

2026-09-03

Guides now have an expiry check

Sixteen guides carry facts that go stale, so each one now has a register entry with a re-verification interval, and a script reports what is due. It stays out of the deploy gate: a stale fact is work to schedule, not a broken deploy.

2026-09-02

Sitemap dates now check themselves

Wrote a script that dates each sitemap URL from its page and its scripts, then wired the check into predeploy. A stale date now blocks the deploy. Also deleted four unused files and fixed the scanner's false heading warning.

2026-09-02

www now redirects to the main domain

Both hostnames served the same pages, which splits search signals. A redirect rule at the edge now sends www to the apex with a 301, path and query preserved. It runs before the worker, so static files stay free to serve.

2026-09-02

Cleaning up after the site audit

A technical pass over the whole site: caching rules for static assets, a logo cut from 1.46MB to 5.4KB, a real 404 page, and eleven new cross-links between the guides. All of it went out as one deploy.

2026-09-01

Published the factory's own token numbers

Fifty-four days of cost tracking became a guide: 330 tasks, 3.37 million output tokens, about $265 at API-equivalent rates. Half the days cost nothing, shipping days cost the most, and the agent roster is public for the first time, ReBoot names included.

2026-08-31

The free artifact shipped

Published the spec-template repo as the free, try-able artifact for the Show HN post: the format alone, no paid tool, MIT license. Drafted that post and a second for r/LocalLLaMA. The day left one working habit: check GitHub's own copy of a branch before declaring a push stuck.

2026-08-24

Checkout prices now come from one place

The worker now serves the displayed price and the charged amount from one table. Before, one came from a constant compiled into the payment script and the other from the database, with nothing keeping them in step.

2026-08-23

A ruling about dashes, enforced to zero

I banned em dashes from every surface a reader sees, and the ship gate now enforces the rule mechanically. The full ASCII pass covered 73,030 characters. The gate proved its worth on day one by catching nine strays the sweep itself had introduced.

2026-08-23

An outside tester read the course

Someone outside the project went through Level 1 and filed twenty-two findings, four of them Critical, and all four sat in files a reader hits before they can succeed at anything. Fixed and deployed the same day.

2026-08-22

One download per module

Every module now ships a deterministic zip of exactly what its file panel lists. A numbering fix the next day put two modules' files in the right order on disk.

2026-08-14

The whole product through the gate at once

First time I ran the review gate across the entire live surface in one pass, thirteen lens passes plus a mechanical scan. Forty-nine findings, fifteen of them Critical, and two full runs to clear.

2026-08-13

All 80 lessons reworked in three tiers

I audited all 80 lessons and reworked them in three tiers, so each one now explains why the thing works instead of only what to type. A reader who can follow along can now also fix it when it breaks.

2026-08-12

Shipping the files the course already listed

A parity sweep brought the delivery repo in line with what the course lists: five Module 4 files now ship. The same pass replaced a real value in one Level 2 example file with a placeholder.

2026-08-10

The bonus module becomes a library, and a history scrub

The Level 1 bonus went from a folder of odds and ends to a 71-file library. Packaging it included a privacy pass: the delivery repo's history was rewritten so internal infrastructure details stay internal.

2026-08-09

Security week

A hardening pass in week one: added a content security policy, cut the anonymous database role down to only the privileges it needs, and brought the row-level security state into the migrations so it is reproducible from scratch.

2026-08-08

A verification run earned its keep

Ran the repo assembly script as a check before trusting it, and the check caught it producing 162 files where the live delivery has 189. The script left the shipping path; deliveries now sync from the live source instead.

2026-08-04

Live

Domain registered, site deployed as static assets on a worker, auth wired to email plus three OAuth providers. A same-day full-build test regressed live course content for four minutes; the rollback held, and full builds left the deploy path for good.

2026-07-13

Everything into one repo

The project had lived across two machines and a spread of folders with no single history. I imported the whole workspace into one repository. Everything after this date has a commit behind it; everything before it is reconstructed.

2026-06-30

Five protocols in three days

The worker fleet could do tasks but could not own delivery, so I added five things in three days, starting with a bounded self-repair loop that blocks the agent from editing the test to make it pass.

2026-05-13

Per-project config made explicit

Every knowledge-base call from one machine was returning 401: the project config had no environment block, so the process started with an empty key while the correct global config masked it. Per-project environment is explicit now, machine by machine.

2026-04-04

Retry ceilings and a leaner knowledge base

A three-tries rule went into the agent instructions the day a limitless loop showed why it was needed. Soon after, the knowledge base got leaner: 185 test fixtures and duplicates removed.

2026-03-18

The day the pipeline stopped guessing

Workers now mark tasks for review instead of done, and I approve each one. The change followed five worker bugs of one shared category: I had written client code against a remembered API instead of the real one.

2026-03-02

Migration day

Token costs had passed $3 a day and were climbing. I rebuilt the API on FastAPI with Postgres and pgvector, retired Docker, and kept the same port so nothing downstream noticed. Cost dropped three to four times.

2026-02-21

Four days from nothing to a running stack

Four days to stand up a search API, a vector store, local embeddings, a task board and six worker agents. It ran, and the first optimization target was already visible: 1.4MB session files resent in full on every request.

2026-02

The accident

One request: help me build an autonomous AI system. What I got was four ports, a container that crashed every Tuesday, and then a wipe that took the whole thing. The first rule came out of that: one port, one system. The long version is its own page.