Government offices#
The simulated internet has a small jurisdiction to navigate: a federal revenue service, the State of Arden's Secretary of State and Department of Revenue, the City of Port Linden's permit center, and the national post whose mailbox their letters arrive in. Each office is a portal with accounts and identity proofing, multi-page forms with validation, uploads, fees, case and confirmation numbers, review that takes business days on the world clock, requests for corrections, rejections with reasons, approvals, a register of what it issued, filings those records then owe, inspections, and letters about all of it. Nothing reaches a real government.
| Site | Service id | What it does |
|---|---|---|
frs.gov.example | gov-frs | Federal Revenue Service: Employer Identification Numbers, issued online at once; a name and SSN that do not match federal records is refused with reference 101, as the real one is. |
sos.arden.gov.example | gov-arden-sos | Arden Secretary of State: LLC and corporation formation, name availability, the public business entity search, annual reports due by the end of the anniversary month ($50 late fee; delinquent, then administratively dissolved 60 days later). |
revenue.arden.gov.example | gov-arden-revenue | Arden Department of Revenue: the sales tax license (checked against the Secretary of State and the FRS over the network before it is issued) and monthly returns at 6.25%, due the 20th, with a non-filing notice, 5% a month penalty (at most 25%, at least $15) and revocation 120 days on. |
permits.portlinden.gov.example | gov-portlinden | Port Linden Permits and Licensing: sign permits through an automated plan check (sign area by zone, height, address on the sheet, no roof signs), building permits reviewed in a ten-business-day queue, inspections booked into open slots, business licenses checked against the state license and renewed yearly. |
mailbox.post.gov.example | gov-post | The National Postal Service's mailbox: what is coming (sender and expected date) and, once delivered, the letter. |
The epoch is Thursday 17 September 2026, 09:00 (the clock mail and Calendar read);
business days skip weekends. Letters take the office's mail_days business days and
are delivered at 14:00.
The service kinds#
Two kinds, in crates/services/gov:
agencyis one office. Everything it offers is data: aprogramsmap in its seed. The code is the clerk; the seed is the statute and the procedures manual.postalis the mailbox. Offices post toPOST /api/deliverover the synthetic network; only the nodes in itssendersmay. Itsresidentsare also the identity records the offices proof accounts against.
An office's seed#
| Key | Meaning |
|---|---|
name, short, seal, jurisdiction, banner, tagline, address, phone, skin, theme | How it presents itself. address is the return address on its letters. |
identity.from | A service whose seed residents ({user: {name, dob, ssn, address, zip}}) are its identity records; identity.attempts wrong codes lock an account (3). |
post, mail_days | Where letters are posted (http://post.gov.example/api/deliver), and their business days in transit. |
staff | Users who see /staff: the review queue, the automated plan check's findings, approve / request corrections / reject, and inspection results. |
card_fee_bps | The card processor's convenience fee. |
register | The public register's title; empty for an office without one. |
programs | {id: Program}, below. |
A program is one thing a person can file:
| Key | Meaning |
|---|---|
title, summary, category, order, case_prefix | The service list. A case number reads <case_prefix><year>-<sequence>. |
verified | Needs an identity-verified account (default true). |
against | Record kinds it is filed about (an annual report, a return); its record field picks one the applicant owns or is authorised on, and the earliest unfiled obligation for it is the period filed. |
pages | [{title, intro, fields}]. A field has name, label, hint, kind (text, name, date, money, integer, choice, ssn, ein, email, zip, phone, state, yesno, record), required (default true), choices, min/max, max_len, suffixes and unique (a business name), and prefill (account.name, record.<field>, ...). Each page is validated as it is saved; errors come back on the page. |
attachments | [{name, label, hint, required, keys}]: a sheet pasted as Key: value lines, which must carry every key. |
computed | [{name, label, kind, of, bps}]: difference (never below zero) or rate, in cents. |
fee | base_cents, plus a computed field (the tax), plus bps of a money answer bps_of (a valuation); late (flat_cents, bps_per_month of the field, max_bps, min_cents) once the obligation's due date has passed; methods card and/or bank (an ABA-checked routing number). |
review | mode: instant, queue (decided by the office's system after business_days, or earlier by staff) or staff. verify: lookups at other offices (url with {{answers}}, expected fields of the JSON answer). rules: requirements, below. corrections_days: after this the case is withdrawn (30). |
issue | What approval puts on the register: kind, label, number (prefix, start, width, dash_after), name_field, public, status, letter, obligations, inspections, expires_days. |
on_approve | For a filing against a record: the record's new status, and record_fields copied onto it. |
letters | approved, corrections, rejected, withdrawn: {subject, body} with {{placeholders}} (any answer, case, number, reasons, response_due, period, amount, ...). |
A rule names a value (field, a computed amount, or an attachment's key) and
one requirement: min/max, max_by ({field, table}: the limit for the zone),
max_of (another answer), one_of, has, lacks, same_as, available (a name not
on the register) or ssn_of (the SSN belongs to the person named in that field). A
missing value fails. outcome is corrections (default) or reject; reason is
what the letter says, with {{value}} and {{limit}}.
An obligation spec is {program, every: month|quarter|year, due_day, grace_days,
notice, overdue_status, lapse_days, lapse_status, lapse_letter}. A year is counted from
the record's issue month and due at the end of the anniversary month; months and
quarters are due on due_day of the month after.
An inspection spec is {kind, lead_days, window_days, per_day, result,
final_status}: open dates start lead_days business days out; result: "pass" has
the inspector pass it on the day without staff.
State#
Under World::inspect() at /state/services/<id>/state, beside the seed:
| Key | Shape |
|---|---|
accounts | {user: {name, dob, ssn_last4, address, zip, email, verified, method, code, attempts, locked}} |
cases | {case number: {program, actor, status, confirmation, record, obligation, period, answers, attachments, computed, fee_cents, late_cents, paid_cents, payment, submitted, due, decided, response_due, revision, checks, comments, reasons, history, issued}}; status is draft, verifying, in_review, corrections_required, approved, rejected or withdrawn |
records | {number: {kind, label, program, name, status, owner, team, fields, issued, since, case, history}} |
obligations | {id: {record, program, spec, seq, label, start, end, due, status, case, filed, next_created}}; status is open, overdue or filed |
letters | {id: {to, name, address, kind, subject, body, case, record, mailed, delivered, post}} |
payments, inspections | what was paid, by which method and its last four digits; inspections with date, status (scheduled, passed, failed) |
A world can seed records and obligations (an entity that already exists and the
report it owes) the same way: a record from before the clock began carries since
(2019-03-04), which anchors its periods; spec is the index of the obligation in
its program's issue.obligations. Use ids that are not OB-<n>. No timer stands
behind a seeded obligation, so the office sweeps on every request and timer: the first
time it is touched after the due date (plus grace) the obligation is marked overdue,
the notice is mailed and the next period opens.
Routes and element ids#
/ services; /services/<program> (start, start-submit; ?record= for a filing);
/account (acct-name, acct-dob, acct-ssn, acct-address, acct-zip,
acct-email, account-submit; verify-code, verify-submit);
/cases/<n>/page/<k> (f-<field>, err-<field>, next); /cases/<n>/attachments
(a-<name>, attachments-submit); /cases/<n>/review (signature, sign-submit);
/cases/<n>/pay (card-name, card-number, card-expiry, card-cvc, card-submit;
bank-name, bank-routing, bank-account, bank-submit); /cases/<n>/confirmation
(confirmation-number, case-number, issued-number); /cases/<n> (case-status,
comment-<i>, edit-page-<k>, edit-attachments, resubmit-submit);
/records/<number> (file-<obligation>, team-member, team-submit,
inspect-date-<k>, inspect-submit-<k>); /letters; /status?case=;
/search?q=, /register/<number>, /name-check?name=; /staff. JSON:
/api/records/<number> (public: number, name, kind, status), /api/cases/<n>,
/api/me.
Procedures#
gov- procedures in worlds/company-2026/procedures (written by
scripts/procedures/gov_procedures.py) perform the founder's path and the sign permit
through pointer and keyboard:
| Procedure | Who | What they do | GUI actions | Tool calls |
|---|---|---|---|---|
gov-business-registration | Alice (founder), Bob (bookkeeper) | Alice opens accounts at three offices, checks the name, files the LLC and pays, gets the EIN, applies for the sales tax license (verified against both other offices) and pays, and authorises Bob; Bob opens his account and files the first month's return, paying by ACH | 226 | 124 |
gov-sign-permit | Carol (sign contractor) | an account, the two-page application, the plan sheet, signature and fee; the plan check's correction read, a revised sheet uploaded and resubmitted; the issued permit's final inspection booked | 87 | 42 |
gov-late-sales-tax | Alice, Bob | the registration above, then 66 days pass with October unfiled: the license goes delinquent and the non-filing notice is mailed to Alice; Bob files October late and pays the tax with the $15.00 minimum penalty, restoring the license | 251 | 139 |
gov-building-permit | Carol (general contractor) | applies with the plan set summary and pays by ACH; 19 days pass (ten business days in the review queue, two in the post); she reads the permit letter in her mailbox and books the final inspection, which passes six days later | 79 | 37 |
The counts include the wait steps (two in the building permit, one in the late return). They are measured with scripts/procedures/debug.py at 1280×800 and are the same
for every seed; all four verify on seeds 1-3 on screen and through tools, and
CW_PROCEDURE_FILTER=gov- cargo test -p computerworld --features render --test
procedures holds them to the suite's four properties. A wait gesture (a clock
advance call on the tool path) lets the queue, the post, the deadline and the
inspector run on the world clock. The longer paths (a case withdrawn after silence, an
entity dissolved, a license revoked) are covered by crates/services/gov/tests/gov.rs,
which runs the offices with their shipped seeds and fires their timers in world-clock
order.