Data flow¶
Production (queue)¶
flowchart LR
fe[Frontend / worker.php]
uq[upload_request_queue]
up[upload-processor]
s3[(S3)]
aq[atomize_request_queue]
ap[atomize-processor]
probe[probe-* Docker]
db[(MySQL)]
ar[atomize_response / livelog]
fe --> uq --> up
up --> s3
up --> fe
fe --> aq --> ap
ap --> s3
ap --> probe
ap --> db
ap --> ar --> fe
- Upload — clone (or paste) source; for private GitHub, decrypt tokens from the message
source; upload tree to S3; respond withs3_uri/ commit metadata. - Atomize — download from S3;
docker runlanguage probe; find.verilib/probes/*_*.json; parse; persist atoms/deps; update verification statuses; publish response + livelog.
Wire contracts: upstream docs/protocols/upload.md and docs/protocols/atomize.md.
Per-repo atomize steps (atomizer.py)¶
- Run probe extract (or accept an existing JSON path).
parser.find_probe_output()/parse_file().- Extract code bodies (files, then DB text fallback).
- Persist atoms + dependencies.
- Update
codesverification status; mark repo completed or error.
Legacy poll mode¶
Older main.py polls MySQL for repos.status_id = 1 (pending), runs a thread pool (MAX_WORKERS), retries up to MAX_RETRIES, then sets status 2 (completed) or 3 (error). Prefer queue workers for new environments.