Skip to content

Repo config ​

File: .dw/config.yml in the repo. Parsed by apps/server/src/factory/config.ts (parseProjectConfig).

Where it is read ​

PurposeSource
Whether the repo is watchedThe T3 project's checkout on disk; falls back to git show origin/HEAD:.dw/config.yml. Opted in when the root and factory are both mappings. Not validated here.
The config runs useThe tip of the repo's default branch on GitHub, read on every pass.

Schema ​

yaml
factory:
  instructors: [login, ...] # required
  base: main # required
  provision: [cmd, ...] # required, may be []
  gate: [cmd, ...] # required
  required_checks: [name] # optional
  limits: # required mapping
    gate_retries: 2 # required
    minutes: 180 # optional
    regates: 5 # optional
    checks_minutes: 30 # optional
    interruption_resumes: 2 # optional
  autonomy: pr # required
KeyTypeRequiredDefaultRule
factorymappingyes
factory.instructorslist of stringsyesNon-empty list; no empty strings. GitHub logins, matched case-insensitively.
factory.basestringyesNon-empty. Must equal the repo's default branch, or the repo is skipped.
factory.provisionlist of stringsyesMay be empty. Shell commands.
factory.gatelist of stringsyesNon-empty. Shell commands.
factory.required_checkslist of stringsno[]GitHub check names.
factory.limitsmappingyes
factory.limits.gate_retriesinteger ≥ 0yes
factory.limits.minutesinteger ≥ 1no180
factory.limits.regatesinteger ≥ 1no5
factory.limits.checks_minutesinteger ≥ 1no30
factory.limits.interruption_resumesinteger ≥ 0no2
factory.autonomystringyesOnly pr.

Keys the server does not read are ignored.

Limits ​

KeyCountsOn running out
minutesMinutes the run spent in triage and building. pr-open is not counted.stuck: "the run passed its time limit"
gate_retriesGate or required-check failures sent back to the session. 0: the first failure is final. Reset after a pass.stuck: "the gate failed after N attempts"
regatesGate reruns because the base branch moved.stuck: "the base branch kept moving and the gate could not settle"
checks_minutesWait for required_checks after the gate commands pass.stuck
interruption_resumesResumes or relaunches after a session ended failed or cancelled, or its thread vanished, when T3 trouble is in evidence.stuck

Gate ​

StepDetail
CheckoutFresh clone of the PR head merged with the base branch tip. A merge conflict fails the attempt.
CommandsEach provision command, then each gate command, through the shell, at the checkout root.
Timeout30 minutes per command.
PassEvery command exits 0. Then required_checks, if any, must pass on the gated commit.
SourceThe commands come from the default branch, never from the PR.
EnvironmentOnly PATH, HOME, USER, LOGNAME, SHELL, LANG, TMPDIR, TERM and LC_* from the server. PATH is the LaunchAgent's, extended by ~/.config/t3fac/env.