When a regulator comes back on a filing, the back-and-forth that follows is the work: a query raised, a reply sent, a deadline to meet, a reference number to track. Opbox keeps that whole correspondence as a threaded record hung off the submission it concerns, so a comment raised by a registry, your firm’s response, and the regulator-side state that lands afterwards all live in one place and reconcile against the filing itself. Nothing about a return lives in someone’s inbox or a side spreadsheet: it is on the matter, ordered, and audited.
What it does
A threaded correspondence record per submission. Every regulator-raised query or comment is recorded against the submission it concerns, with the raising authority, an optional comment type, and the body. Comments are held in a dedicated store and read back as one thread, ordered oldest-first, so the full exchange on a filing reads top to bottom as the conversation actually happened. This is a real multi-row, re-entrant thread, not a single status field and not a one-shot note: a filing can carry as many separate queries as the regulator raises, each tracked on its own.
An open / responded lifecycle. A comment is recorded with status OPEN by default. When your firm replies, the reply is linked back to the comment it answers and the original comment advances to RESPONDED, with the moment of response stamped on the record. So at a glance the thread shows what is still outstanding and what has been answered, and a return that has been dealt with cannot be confused with one that has not.
Replies that inherit their context. A response is recorded against the comment it answers, and it inherits that comment’s submission and raising authority automatically. You record the reply text (and optionally who authored it); you do not re-key which filing or which regulator it relates to, because the parent already carries that. The thread stays internally consistent by construction.
Inbound regulator state on the filing. Beyond the comment thread, the regulator-side single-value state for a filing - a reference number, an acknowledgment, a status, a statutory deadline - lands directly on the submission through the secured inbound webhook seam. Those values arrive as namespaced facts on the submission target, written only through that one guarded path, and the intake is idempotent on the event identity: a replayed callback, even one carrying stale values, is a no-op and never regresses newer state. The filing therefore reflects where the regulator has actually got to, alongside the human correspondence about it.
Read against the filing it belongs to. Because comments hang off the submission, you read them in the context of that submission’s own snapshot, field-level changelog, and lifecycle status. The return comments are part of the filing’s record, not a separate system you have to cross-reference.
Governed and audited like everything else. Recording a comment, recording a reply, and reading the thread each pass through the kernel’s one front door: permission-checked, scoped to the workspace, and written to the immutable audit trail. The correspondence on a regulated filing carries the same defensible history as any other action on the matter.
How you use it
Log a regulator’s query. When a return comes in, record it against the filing it concerns: the raising authority, the body of the query, and a comment type if you classify them. It enters the thread as OPEN.
Read the thread. Pull the correspondence for a submission to see the whole exchange in order, oldest-first: every query the regulator raised, every reply your firm sent, and the status of each. This is the one consolidated read of the return-comments record for a filing.
Respond to a comment. Record your firm’s reply against the specific comment it answers. The reply links back to that comment, inherits its filing and authority, and flips the original to RESPONDED with the response time stamped on it, so the outstanding queue shrinks as you work through it.
See the filing’s regulator state. Read the submission to see the inbound regulator-side facts that have landed on it - reference number, acknowledgment, status, deadline - alongside its own snapshot and changelog, so the human correspondence and the machine state sit together.
The kernel verbs behind it
The return-comments thread runs through three verbs in the regulator domain, each permission-checked and audited at the one front door:
regulator.comment.add- record a regulator-raised query or comment on a submission, with the authority and body; status defaults to OPEN.regulator.comment.list- the one consolidated read of the correspondence thread for a submission, ordered oldest-first.regulator.comment.respond- record the firm’s reply to a comment, linked to its parent, advancing that parent to RESPONDED.
The comments hang off a filing you read with the submission verbs:
submission.get- read one submission: its snapshot, field-level changelog, and lifecycle status.submission.list- list a form’s submissions by status and aging.
Inbound regulator-side state lands through the secured webhook seam:
webhook.ingest- the one inbound-webhook guard (HMAC, rate limit, replay nonce, size cap) through which regulator reference numbers, statuses, and deadlines arrive as facts on the submission.
Where a return needs a human checkpoint before the matter moves on, the generic review queue applies:
review.claim- claim a review off the queue for the current actor.review.open- open a review item that needs a human’s eyes.review.list- list the review / triage queue by lane, aging, and SLA.review.resolve- resolve a claimed review.review.reassign- reassign another’s claimed review to a new reviewer.review.unclaim- hand back your own claimed review.review.expire- terminal expiry of a stale review to EXPIRED.review.policy.get- read the workspace’s review policy for all lanes.review.policy.set- upsert one review lane’s configuration.
See the full set in the regulator verb reference.