Build log / Phase 1–2
Phase 1 — empty repo, Workers, and a runner that never started
The site began as an empty GitHub repository. The first factory pass scaffolded Astro, five seed listings, then had to rip out a Cloudflare Pages assumption and land a Worker instead.
This log is about this repository, not a category myth. Dates are 19 August 2026 unless noted.
What was specified
A curated directory for agent-native software factories. Git as the content store. One YAML file per tool. No CMS, no accounts, no newsletter, no pay-to-play, no auto-merge. Cloudflare for hosting. A factory runtime that can validate a listing and open a draft PR from an issue.
The publisher founded Trevize. That conflict had to live on /methodology, not in a footer.
What actually happened
The GitHub repo was empty when the first agent started. There was no existing Astro app to extend. Phase 1 built the scaffold from scratch: Astro 5, Zod collections, five seed tools (Trevize, Cursor, Factory, Warp, Claude Code), core pages, Pagefind, a React filter island, issue forms, and CONTRIBUTING.
The first hosting pass assumed Cloudflare Pages. The product decision was Workers — Static Assets for the prerendered directory, a Durable Object (FactoryRuntime) for jobs. That meant deleting Pages-shaped config, adding @astrojs/cloudflare, wrangler.jsonc without a hardcoded account id, and a Worker entry that routes /factory/jobs* to the Agent. The environment that drafted the Worker could not wrangler deploy (no Cloudflare credentials). The operator deployed softwarefactory-build themselves. This log will not pretend otherwise.
What broke
GitHub Actions on a private repo. The first CI run died in seconds with no steps. That is the failure mode when Actions is not enabled for the repository, not a YAML typo. The workflow still landed. A later pass split content validation from third-party URL checks so a flaky vendor HEAD cannot fail the build.
Empty-repo start. Every path that assumed “add these files to the existing app” was wrong. The agent had to create package.json, the content schemas, and the pages, then keep them consistent.
Pages vs Workers. Shipping a Pages project would have been the faster demo and the wrong artifact. The rewrite cost a full config cycle and a second deploy path (npm run deploy = astro build + pagefind + wrangler deploy).
What agents got wrong
- Treated vendor homepage counters (Warp’s 718K developers, Factory’s named-customer list, Cursor’s NVIDIA quote) as if they were production evidence. The published listings now label those as marketing.
- Drafted Cloudflare Pages bindings and account ids the operator did not ask for.
- Invented nothing that shipped as a metric — the seed takes were edited to refuse numbers we could not open on a primary source. That refusal is the job. The temptation is the failure mode.
- Could not enable Actions or DNS.
softwarefactory.buildmay still have no public DNS. The Worker name issoftwarefactory-build. Fighting credentials was explicitly out of scope.
What shipped from that pass
Five listings. Two guides. No case studies. No compare or best pages. A Worker factory with validate, enrich, build-log, and issue-to-pr (draft PR, never merge). CI that was correct as YAML and useless until the repo’s Actions setting is flipped.
The rest of the brief — roughly a hundred listings, more guides, sourced case studies, compare/best, this log — is a later pass on the same rules.