You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Config: the factory's machine config and a repo's factory block #11
The fork reads which repos to watch from its own config file, and each repo's rules from the same .dw/config.yml block softfac reads.
Acceptance criteria
apps/server/src/factory/config.ts reads <base>/factory/config.yml with these keys: gh_config_dir (required), poll_seconds (default 60), max_concurrent_runs and max_concurrent_gates (softfac's defaults), model_instance (default claudeAgent), model (required), and repos, a list of { repo: owner/name, path }. An unknown key is an error that names it.
A missing config.yml leaves the factory idle and logs no factory config at <path> once per server start.
A function parses the text of a .dw/config.yml and returns its factory block with softfac's fields and defaults: instructors, base, provision, gate, required_checks, limits (minutes 180, gate_retries required, regates 5, checks_minutes 30, interruption_resumes 2) and autonomy. Error messages match softfac's src/config.rs wherever softfac has one.
A non-empty required_checks is an error, required_checks is not supported yet, until the required checks issue removes it.
Both are read again on every call; nothing is cached.
It uses the yaml package that apps/server already depends on, and adds no dependency.
softfac's project-block cases from src/config.rs are ported and pass.
softfac, the Rust factory this ports, pinned at rawphp/softfac@bf273a1. Read it from a separate clone: git clone --filter=blob:none https://github.com/rawphp/softfac /tmp/softfac-ref && git -C /tmp/softfac-ref checkout bf273a1d93651992b4fc95b4dd6c111f8f3322cf. Its docs/lifecycle.md, docs/reference/ledger.md and docs/issues.md describe the behaviour; its tests pin it.
Design: factory/docs/design.md in this repo.
Upstream's AGENTS.md applies. Run only the tests and typechecks for the paths you touch (vp test run <path>, vp run --filter t3 typecheck), never the repo-wide checks.
Edit no upstream file that is not listed in factory/SEAMS. A new seam needs a line in factory/SEAMS and a reason in the PR body.
Port behaviour, not code: port the named test cases first (TypeScript, vitest / @effect/vitest), then make them pass. Exact comment and ledger wording is ported as is.
Activity
rawphp commentedon Oct 15, 2026
Factory status: pr-open
refactor(factory): define the config error shape once