Skip to content

Architecture decisions

One file per decision, numbered in the order they were taken. A decision that changes gets its file rewritten, or replaced by a new one that says which it supersedes.

ADR Decision
0001 Application forms as a CLI: read, fill (dry run), send
0002 Python with ty, Camoufox, uv, MIT, PyPI
0003 One adapter per hiring system, rules owned by the core
0004 A logged-out headless Camoufox per command, one saved identity, a fresh context each time, one command at a time
0005 Answers keyed by field id, read-back matched by field type
0006 Dry run by default, submit enabled in the user's config file, fixed statuses, a double-send guard
0007 Data directory, per-adapter sessions and the login command (login superseded by 0015)
0008 Side effects declared per adapter
0009 Hand-made fixture pages, live runs opt-in, a committed Test user
0010 One package: a thin CLI over a core that owns every rule, adapters behind it
0011 read by a request read where the system's form data is reachable without a browser, a browser read otherwise
0012 A committed registry of hiring systems: kind, share, account, block, scope
0013 A survey script, an adapter gate script, and one agent round per system
0014 Out of scope is what needs the user live; out of scope, known gap and unhandled told apart at run time
0015 Users of one home, accounts scoped per employer, password sources and account creation
0016 Anonymous telemetry to PostHog, a verdict per run, scope in the registry, a run history and failure issues
0017 Account profiles: a profile form per hiring system, read and saved by the profile command, never by fill or send