Deadline risk board
Sorted by consequence, not by date: a missed 45th day is unrecoverable, a late countersignature is not. Every row states its evidence, not a flag — the headline is what actually happened on the file.
forty-five-day-id-watcher is Draft (IRS1031-002), and
there is no automated or manual send from this console yet.
Identification book
Every file's elected §1031 rule, what it has identified, and whether the set still passes — the same
server-side re-check that runs on every mutation (validateIdentificationSubmit). The lock
column says who, if anyone, may still change it.
| File | Elected rule | Identified | Value test | Notice | Lock | Rule check | Waiting on | Action |
|---|---|---|---|---|---|---|---|---|
|
Okonkwo Holdings LLC
EX-2026-000212
|
200% Rule §1.1031(k)-1(c)(4)(i)(B) |
1 property of no fixed limit |
$1,240,000 / $3,900,000
32% of the 200% cap
|
Generated Aug 17 Unsigned |
Draft · editable Until Sat, Aug 22 |
Pass | Exchanger |
admin.identification.added with on_behalf: true and the exchanger's
user id as the subject. A rule violation is refused and logged as
admin.identification.rule_denied.
|
Belcher Family Trust
EX-2024-0147
|
3-Property Rule §1.1031(k)-1(c)(4)(i)(A) |
3 of 3 At the limit |
Not applicable Count-based rule |
Signed Apr 14 Matt Belcher, 11:42 AM PT |
Locked · submitted
Taxpayer must revoke and re-identify
|
Pass | Satisfied | |
|
Delgado, Maria & Luis
EX-2026-000203
|
200% Rule §1.1031(k)-1(c)(4)(i)(B) |
2 properties |
$2,880,000 / $2,600,000
111% of the 200% cap — exceeded
|
Not generated Blocked by the rule check |
Draft · editable
Until Tue, Oct 13 was
|
Fail
Aggregate FMV exceeds 200% of relinquished FMV
|
Exchanger | |
|
Ravensworth Trust
EX-2026-000188
|
95% Rule §1.1031(k)-1(c)(4)(ii)(B) |
4 properties |
$3,610,000 / $3,705,000
Planned allocation vs the 95% floor
|
Signed Apr 10 Before the Apr 15 window close |
Locked · window closed
Wed, Apr 15, 2026
|
Warn
Must actually close on at least 95% of identified FMV
|
Cascade Title | |
|
Hargrove Industrial LP
EX-2026-000177
|
3-Property Rule §1.1031(k)-1(c)(4)(i)(A) |
3 of 3 At the limit |
Not applicable Count-based rule |
Signed Apr 20 Exchanger, 9:05 AM PT |
Locked · submitted
Taxpayer must revoke and re-identify
|
Pass | Second officer | |
|
Bayside Loop Holdings LLC
EX-2026-000165
|
None elected No rule was ever chosen |
0 properties | Not evaluable Nothing identified |
Never generated |
Frozen · window closed
Thu, Mar 19, 2026
|
Fail
No identification made within the 45-day period
|
You |
mutable: !submitted && isBeforeIdentificationDeadlineDay(...)) but the reasons are
not interchangeable, and the surface must never collapse them into a single grey "read only".
Deadline override — request, second officer, recorded
A statutory date moves only through this path. The requester's own submission is never an approval; the approver is never the proposer; and the date that was replaced is retained, not overwritten.
Filed Tue, Aug 18, 9:02 AM PT. Requires org_owner or org_admin;
a coordinator cannot open this form.
exchanges changes until a second, distinct
officer approves. One pending request per deadline type per file — a second attempt returns 409.
The same panel, seen by two people. What each of them may do is the whole control.
self_approval_blocked and writes a failure audit row naming the attempted approver,
and the table carries a check constraint
(approved_by is null or approved_by <> requested_by).
A completed override from another file, to show what the record looks like afterwards.
deadline_override.approved · committed in the same transaction as the date changeexchanges has exactly three legal writers.
The statutory recompute when sale_close_date moves; an approved override, stamped through a
transaction-local flag inside apply_deadline_override_approval; and a service-role clear of
both columns to NULL. Everything else — including a direct PostgREST PATCH by an authorized
participant — is rejected by the zz_guard_statutory_deadlines trigger. The older
single-actor table was renamed deadline_overrides_archive and had INSERT, UPDATE and DELETE
revoked, so the one-person path cannot come back even if application code regresses.
What the platform refuses
Each of these is a real server response with a real audit consequence. They are drawn here because an examiner asks what the system would not let happen, and the answer has to be visible in the UI.
self_approval_blocked
"The approver must be a different user from the requester — self-approval is prohibited."
A failure audit row is written with requested_by, attempted_approver and the
reason requester and approver must be distinct users (2P gate). The database refuses
it independently through a check constraint, so an API regression cannot open the hole.
impersonation_blocked
Both requesting and approving are refused while the acting account is the target of an active platform-admin impersonation session, and each refusal is audited with the impersonator's id and the session expiry. A support session can look at a statutory deadline; it can never move one.
deadline_ordering_violation · override_shift_cap_exceeded
The 45-day date must fall on or before the 180-day date, checked at request and again at approval. A requested date more than 366 days from the current one is refused outright as outside the sanity cap — a fat-fingered year is a data-integrity event, not a relief filing.
Once the taxpayer has submitted, the QI cannot add, edit or remove an identified property on their behalf — a QI is a disqualified party and the notice is the taxpayer's signed instrument. The taxpayer must revoke and re-identify, and the revocation history is preserved rather than replaced. The same gate closes at the 45th day.
Deadline audit ledger
The examiner-facing answer to "how do you know you did not miss it". Failures are rows too — a blocked self-approval is evidence the control fired, so it is never hidden.
audit_log
| When | Action | Actor | File | What changed | Outcome |
|---|---|---|---|---|---|
| Tue, Aug 18 9:07 AM PT |
deadline_override.self_approval_blocked | Priya Raman org_admin |
EX-2026-000177 | Nothing. Attempted to approve her own 180-day request. | Refused |
| Tue, Aug 18 9:02 AM PT |
deadline_override.requested | Priya Raman org_admin |
EX-2026-000177 | Staged 180-day Sep 6 → Sep 15 · data_correction. Recorded date unchanged. | Pending |
| Mon, Aug 17 3:20 PM PT |
admin.identification.added | Tom Bottenberg coordinator · on_behalf |
EX-2026-000212 | Added 4820 Camino del Rio South · $1,240,000 · rule 200-percent re-checked and passed. | Applied |
| Fri, Aug 14 10:48 AM PT |
admin.identification.rule_denied | Tom Bottenberg coordinator |
EX-2026-000203 | Refused a third property: aggregate FMV would reach $3,940,000 against a $2,600,000 cap. | Refused |
| Tue, Aug 11 2:41 PM PT |
deadline_override.approved | Sandra Osman QI officer · approver ≠ proposer |
EX-2026-000203 | 45-day |
Applied |
| Tue, Aug 11 9:14 AM PT |
deadline_override.requested | Priya Raman org_admin |
EX-2026-000203 | Staged 45-day Aug 14 → Oct 13 · disaster_relief · IRS notice CA-2026-04. | Superseded |
| Mon, Aug 10 4:30 PM PT |
exchange.deadlines_computed | System statutory recompute |
EX-2026-000177 | Deed recording (Mar 19) confirmed as the transfer basis → 45-day Apr 24 → May 3. Recomputes the Mar 24 row below; 180-day leg unchanged pending the request above. | Applied |
| Tue, Mar 24 8:11 AM PT |
exchange.deadlines_computed | System statutory recompute |
EX-2026-000177 | Sale close Mar 10 → 45-day Apr 24, 180-day Sep 6. | Applied |
previous_date re-snapshot, the write to exchanges and the audit_log
insert all happen inside one server-side function, in one transaction. If the audit insert fails, the date
change rolls back with it.
The board's other three states
A deadline board is only trustworthy if it tells you when it does not know. These are the three non-happy states, drawn.
hub_submissions.identification.submitted. A file with three
properties and a signed notice reads satisfied even though its clock has passed; a file with a
live clock and nothing identified reads at risk even though nobody has pressed anything. The
exchanger's submission flag is one input among several and is never the headline on its own.2 · An overdue clock never renders as satisfied, met, or green. It stays red, stays on the board, and stays actionable until a disposition is recorded. A missed date is not a completed step, and an override does not turn it into one — an override records an authorized correction or federally-authorized relief; it never creates a new identification period. Copy must say window closed or days past, never done.
3 · The original date is retained, never overwritten.
previous_date is
snapshotted at request time and re-snapshotted at apply time from the value actually replaced.
Every surface that shows an adjusted deadline shows both: the controlling date, an Adjusted pill,
and the superseded date struck through. A deadline that renders as a single date with no history is a
rejection.4 · Four eyes, two people, one transaction. The proposer's own submission is not an approval and is never rendered or counted as one — the approve control is disabled for the requester with the reason stated, the API returns 403
self_approval_blocked and audits the attempt, and the
table's check constraint refuses it at the database. The exchanger is not in this path at all:
no client party proposes, approves, or acknowledges an override as a condition of it taking effect, and no
surface may add one.5 · Waiting-on attribution on every row. Whose move it is, by name where a person is knowable: you, exchanger, a second QI officer, or the third party. Red is ours, amber is theirs, neutral is a third party, green is settled. At ~200 files per coordinator this is the highest value line on the page.
6 · Exactly one "Next step" marker on the surface. Here it is EX-2026-000212 — three days to the 45th day with an unsigned notice. Never zero, never two. Other rows still carry their real action; only the marker is unique.
7 · Every row carries its action inline and deep-links to the section it concerns. Open → Identification, Open → Purchases, Open → Deadlines each resolve to their own view. Never drop a coordinator on an overview to hunt for the thing the row just told them about.
8 · Two locks, two reasons, never one grey "read only". Locked · submitted is a legal disability — a QI is a disqualified party and cannot alter the taxpayer's signed instrument; the taxpayer must revoke and re-identify. Frozen · window closed is the statute. The shipped API collapses both into
mutable; the UI must not.9 · No affordance signs, verifies, or clears a gate on another party's behalf. The identification notice is signed by the exchanger — no "sign on behalf" control exists anywhere on this surface. Identity and AML are the first gate on every file and a coordinator can never mark them verified by proxy; this surface only reports their state.
10 · Refusals are visible, not silent. Blocked self-approval, blocked impersonation, ordering violations, the 366-day cap and rule denials all appear in the ledger as rows with a Refused outcome. A control that fired is evidence; hiding it makes the log read as though it never had to.
11 · Role truth in the chrome. Requesting or approving an override needs
org_owner or org_admin. A coordinator sees the request read-only, with the controls
rendered disabled and the reason named — not hidden, so nobody wonders whether the page is broken.12 · Token contract and both themes. No colour literal survives to the implementation: every colour resolves through
docs/mockups/tokens.css. Filled controls take the flipping
foreground — --admin-on, --good-on, --bad-on — because the fill
lightens in dark. --ink-4 is icons, rules, strike-through marks and disabled glyphs only,
never body text. Hub hues are wayfinding (which clock), status stays on good/warn/bad with a label and an
icon so colour is never the only carrier. Transitions run at --duration-fast and animate
colour, border and elevation only; the loading pulse is the one loop and it stops under
prefers-reduced-motion.13 · Honest provenance stays in the markup. The book-wide identification table and the cross-file override queue carry Proposed pills until the list endpoint exists; the Adjusted annotation carries one until it is rendered outside the override dialog; and the
forty-five-day-id-watcher notice stays until the workflow is live. Remove each pill in the same
pull request that ships the capability — never before.Light and dark are both designed here. All names, addresses, amounts, dates and references are synthetic demo data.