This val is omriluz/telegram-city-network. Do not change the separate production val omriluz/almaty-expats-events, its database, credentials, webhook, schedule, or branding. Do not post tests to @almaty_expats.
core.ts holds city metadata. sources.ts parses public event sources. network_collect.ts gathers city events and public employer jobs independently from sending. network_store.ts contains migration 2, collectors, feeds, jobs and delivery tables. network_content.ts handles channel routing, previews and capped translation. network_delivery.ts owns the new app's scheduled Telegram delivery. network_admin.ts and network_controls.ts expose authenticated owner controls through web.ts.
The original event review functions and migration 1 remain in engine.ts, store.ts, and admin.ts. The new scheduled publisher does not call the old Shymkent-only publisher. The Almaty Events configuration is external/shadow-only. Almaty Jobs is a separate, initially disabled feed.
Run qa.ts through the Val Town execution tool. Its six suites use random ccn_test_<hex>_ tables, mock providers/transports, and remove their own test namespace. Never put fixtures in production event/job tables. Do not claim these runtime checks are GitHub CI, lint, formatting, static type checks, or a completed browser OAuth login.
network_status.ts is an owner-run diagnostic that prints safe counts, draft examples and credential-presence booleans, never secret values. prepare_network.ts is a deliberate owner rollout operation, not a scheduled task. network_probe.ts, smoke.ts, and live_validation.ts inspect real sources; keep them out of CI and public HTTP routes.
Collection is controlled by network:collection and per-collector switches. Sending is controlled separately by the global kill setting and each feed's activation. The owner explicitly changed Events to AUTOMATIC posting on September 17, 2026. Shymkent and Astana are connected and enabled with reviewRequired=false: do not restore mandatory post approvals. automatic_policy.ts and network_content.ts validate each event and translation at delivery, skip invalid items, and never fabricate a human approval. Event feeds default to automatic; unconnected destinations stay disabled. New destinations still require explicit initial activation, documented source reuse and verified bot posting rights. Jobs remain separate and disabled. Source state attributed_noncommercial is Sxodim's documented credited, non-monetized reuse only, not a commercial licence. The first real digests were sent as message 3 in both channels. Automatic daily time is 10:00 Asia/Almaty; old disabled/manual-only descriptions in prior checkpoint notes are superseded. Source robots/access checks and public commercial reuse are distinct. Preserve attribution and unknown fields. Do not bypass access gates, scrape competitor Telegram channels, collect applicant contacts, or raise billing limits.
Use durable delivery keys and atomic claims. delivery_unknown requires observed destination evidence; never blindly retry it. Private tests use a private destination and separate keys, never consume public publication slots. Retain source provenance and review snapshots.
Use val-scoped std/sqlite/main.ts, not an account-global database. Production tables start ccn_; test cleanup may remove only its generated namespace. Environment secrets stay in encrypted Val Town bindings; .env.example contains names only. Do not extract or copy credentials from chat history.
The pre-network rollback point is main version 43. Merged network code began at main version 44. Code rollback does not undo database migrations, records, flags or cron settings. Stop new-app sends and collection before rollback, preserve delivery history, and inspect trigger settings separately. Never use the original Almaty val as a rollback or destructive sync target.
The requested private GitHub repository was inaccessible through the connector at rollout. There is no verified GitHub commit or automatic GitHub deployment. Preserve exact files and test evidence when connecting the repository; do not use an unrelated public repo as a substitute.