Parked files run on the Exchange Accommodation Titleholder's clock, not the exchange's.
Each parked property carries its own QEAA, 45-day and 180-day dates, anchored to the day
title transferred to the EAT.
Parts of this surface depict proposals, not shipped capability.
The consolidation is proposed. EAT / parking and construction draws are two
separate console routes today — qi/eat (EatSection.tsx) and
qi/construction-draws (ConstructionDrawsSection.tsx). Nothing
renders them together, so no coordinator sees a draw beside the parked property it improves.
The cumulative draw-budget check is an open PR. Approval is drawn here as
enforced; on dev it is not. PR #2245 / issue #2219 adds
loadConstructionBudgetAvailability() to the approve handler plus the
FOR UPDATE-serialised DB trigger in
20260813120000_construction_draws_budget_guard.sql. Until it merges, an
approval never reads construction_budget_cents at all.
Two fields below are not served by the API. Rows marked with a dashed
pill need
qeaa_late_acknowledged / qeaa_late_acknowledgment_reason added to
formatParkedProperty(), which the write path already stores but the read path drops.
All names, entities, addresses and amounts are synthetic. Demo date Wed, Aug 19, 2026.
EX-2026-000258
Belcher Family Trust
Reverse improvement
Exchange-last
Build-to-suit
Arrangement active
MBMatt BelcherExchanger · trustee
TBTom BottenbergCoordinator
SOSandra OsmanQI officer · you
Which clock governs this fileA parked file is anchored to the EAT's acquisition date, not to a relinquished sale.
parking-deadline-watcher
Exchange-level 45 / 180
Not stamped — by design
exchanges.identification_deadline and exchange_deadline are
null. calculate_exchange_deadlines() skips every
eat_acquisition-anchored variant.
Governing clocks
2 parked properties · 2 clock sets
Each parked_properties row carries its own qeaa_deadline,
identification_deadline and parking_deadline, all derived from
that row's eat_acquisition_date.
Structure
Exchange-last
The EAT holds the replacement property, so the 45-day clock identifies the
relinquished property. An exchange-first arrangement has no 45-day row at all —
it renders as Not applicable, never as a blank date.
EAT entity The single-purpose entity that holds title while the file is parked
Harbor Point EAT Holdings III, LLCFormation record complete · both governing documents on file
SPE record complete
EIN
FAKE-EIN-884472019
Formation date
Mar 24, 2026
Jurisdiction
Delaware
Registered agent
Cedarline Agent Services
Articles of Organization
Articles — Harbor Point EAT III.pdf
Operating Agreement
Operating Agreement — executed.pdf
No prior ownership in 180 days
Bona fide §1031 intent
Consistent tax reporting — not acknowledged
One attestation is still open.consistent_tax_reporting_ack is
false on the arrangement. It does not gate the QEAA or a draw — it is a
Rev. Proc. 2000-37 §4.02(3) representation that both the EAT and the exchanger will report
consistently, and it belongs in the file before the parked property is conveyed out.
Open → Attestations →
Parked properties
2 held by the EAT · every clock below is anchored to that property's own acquisition date
Next step — record the executed QEAA for 4120 Harbor Point Drive.
Title transferred to the EAT on Fri, Aug 14. The Rev. Proc. 2000-37 §4.02(3) window closes
after 5 business days — Fri, Aug 21. Two business days remain. Signing after
that date does not fail the write, but it does put the file outside the safe harbor permanently.
4120 Harbor Point Drive
Tacoma, WA 98402 · acquired by the EAT Fri, Aug 14, 2026 · $4,180,000.00 purchase price
Next step
Parked · title in EAT
Waiting on you
QEAA signature
Fri, Aug 21, 2026
2 business days left
Acquisition + 5 business days · federal holidays excluded
45-day identification
Mon, Sep 28, 2026
40 days left · 0 relinquished properties identified
Acquisition + 45 calendar days · identifies the relinquished property
180-day parking
Wed, Feb 10, 2027
175 days left
Acquisition + 180 calendar days · this property's own cap
Evidence on file
3 of 5 recorded
Special warranty deed — recorded to the EATPierce County · instrument 2026-0814-00219 · Aug 14
Settlement statement — EAT acquisitionCascade Title · Aug 14
Qualified Exchange Accommodation AgreementDrafted Aug 17 · unsigned · window closes Aug 21
Triple-net lease, EAT to exchangerTerm 30 years · 2 renewal options · Aug 15
Identification of relinquished propertyNot yet due · Sep 28
1875 Cedar Mill Road
Vancouver, WA 98661 · acquired by the EAT Mon, Mar 30, 2026 · $2,940,000.00 purchase price
Safe harbor blown
Parked · title in EAT
Waiting on EAT counsel
QEAA signature
Mon, Apr 6, 2026
Signed Apr 9 — 3 business days late
Outside the §4.02(3) safe harbor. Executed, but never timely executed.
Designation notice signed by Matt Belcher, countersigned Apr 28
180-day parking
Sat, Sep 26, 2026
38 days left · day 142 of 180
Acquisition + 180 calendar days · this property's own cap
The QEAA was executed outside the 5-business-day window and cannot read as satisfied.
Signed Thu, Apr 9 against a deadline of Mon, Apr 6. Sandra Osman recorded the acknowledgement the
same day: “County recording backlog delayed the deed; EAT counsel and the exchanger executed
on first availability. Proceeding outside the safe harbor with written counsel sign-off.”
The exchange continues; the Rev. Proc. 2000-37 presumption does not.
Evidence on file
QEAA — executed late, acknowledgedSigned Apr 9 · deadline Apr 6 · acknowledged by Sandra Osman
Identification of relinquished property (2)Signed Apr 28 · 22 days after acquisition
Assignment and conveyance out of the EATNot recorded · required before Sep 26
Why this card is not green. The shipped
ParkedPropertyCard derives its QEAA line from one flag —
qeaaSignedAt !== null — and renders a green tick with the signature date, so a
signature recorded three business days past the deadline is indistinguishable from a timely one.
The API already stores qeaa_late_acknowledged and the reason;
formatParkedProperty() simply does not return them.
Combined holding periodRev. Proc. 2000-37 §4.02(6) — the combined time both properties are held in the QEAA147 of 180 days
180-day cap
1875 Cedar Mill Rd · 142 days held 4120 Harbor Point Dr · 5 days held 33 days of combined headroom
Both properties are in the EAT at the same time, so the combined figure now advances
two days per calendar day. At that rate the 180-day combined cap is reached on
Sat, Sep 5 — 21 days before Cedar Mill's own 180th day on Sep 26. The
binding constraint on this file is the combined cap, not either single clock.
Projection; it changes the moment either property is conveyed out of the arrangement.Open → Assignments →
Build note.computeCombinedHoldingDays() returns the
sum across parked properties (acquisition → assignment, or → today while the EAT still
holds it), but combined180Warning is set only when a single property
exceeds 180. This file — 142 + 5 — is one conveyance-delay away from a combined figure over the
cap with no warning ever raised. The banner must key off the sum it prints.
Construction draws
Improvement work on 4120 Harbor Point Drive, funded from the qualified escrow
Budget ledgerEvery approval is measured against the cumulative total, before it is offered
escrow-wire-release
Construction budget
$2,400,000.00
Recorded by Sandra Osman, Jul 2 · audit construction_budget.set
Committed
$1,525,500.00
2 approved draws · 63.6% of budget
In review
$1,582,500.00
3 proposed draws · more than the $874,500.00 remaining
Available to approve
$874,500.00
Budget less committed · proposals do not reduce it until approved
$2,400,000.00 budget
Committed — approved draws $1,525,500.00 Proposals that still fit — draws 3 and 4, $680,500.00 Headroom if both are approved — $194,000.00
Each proposal is measured against committed spend, not against the other proposals.
Draws 3 and 4 each fit on their own and together. Draw 5 does not fit at all. If all three were
approved the project would stand at $3,108,000.00 — $708,000.00
over budget — so approving 3 and 4 changes what is available for 5.
Screening is clear — 6 of 6 counterparties, last rescreened Aug 18.
Approval is refused while any subject is unscreened or matched
(screening_gate_blocked). Identity verification is the exchanger's own act and
is not markable from this console.
Awaiting approvalTwo authorized officers per draw. The approver is never the proposer.3 proposed1 over budget
Who may sign a draw on this file
2 authorized officers
SOSandra OsmanQI officer · youPRPriya RamanQI officerTBTom Bottenbergcoordinator — not an authorized officerMBMatt Belcherexchanger — never in a fund path
Eligibility is a role, not membership on the file. Both signatures come from
resolveQiOfficerAccess — org_owner or org_admin of the owning
organization. A coordinator sits at org_staff and an exchanger is outside the organization
entirely, so neither can approve a release today. A coordinator assembles the packet — invoice, lien
waiver, inspection sign-off — and that is where a coordinator's contribution stops.
The proposal half is not yet gated the same way:
POST …/construction/draws and …/submit still authorize on
writeAuthorized, which admits both struck-through parties. See note 9.
3
Mechanical, electrical and plumbing rough-in
Northbay Construction · invoice 2026-0812 · inspection sign-off Aug 15 · lien waiver on file ·
packet assembled by Tom Bottenberg, coordinator — documentary only, not a signature
Waiting on you
Fits within budgetProposed 2 days ago
$412,500.0017.2% of budget
Proposed by
PRPriya RamanQI officer · Aug 17, 4:08 PM
A proposal is not an approval. It is never counted toward the two required officers.
Approval — outstanding
SOYou may approveYou did not propose this draw
Server-enforced at POST /exchanges/:id/construction/draws/:id/approve —
a self-approval returns 403 self_approval_blocked and writes a failure audit row.
Committed after approval$1,938,000.00of $2,400,000.00 · leaves $462,000.00
Matt Belcher (exchanger) opened the invoice packet on Aug 17 and left a note.
Informational only — an exchanger acknowledgement is not an authorization,
does not gate the approval, and is never counted as one of the two officers.
Read note →
4
Interior finishes, phase 1
Northbay Construction · invoice 2026-0814 · 60% completion certificate attached
Waiting on a second officer
Fits within budgetProposed yesterday
$268,000.0011.2% of budget
Proposed by
SOSandra Osman — youQI officer · Aug 18, 9:41 AM
Your own submission is not an approval. It carries no authorization weight.
Approval — routed away from you
PRPriya RamanQI officer · notified Aug 18, 9:41 AM
You proposed this draw, so the approval control is absent for you rather than
permission-gated. It routed to the other authorized officer, not to the coordinator who assembled
the packet. Rejecting remains available — refusing to move money is not a fund movement.
Committed after approval$1,793,500.00of $2,400,000.00 · leaves $606,500.00
5
Elevator and vertical transport package
Sound Vertical Systems · invoice 2026-0818 · equipment deposit, 40% of contract
Blocked — needs your decision
Exceeds budget by $27,500.00Proposed yesterday
$902,000.0037.6% of budget
Committed if approved$2,427,500.00$27,500.00 over the $2,400,000.00 budget
budget
Approval is refused: $1,525,500.00 already committed + $902,000.00 requested =
$2,427,500.00 against a $2,400,000.00 budget.
The server answers 409 construction_draw_exceeds_budget and writes
construction_draw.budget_gate_blocked to the audit log with the arithmetic.
Amend the draw to $874,500.00 or below, or raise the budget on the record first — an
approval is not the place to change a ceiling.
Proposed by
PRPriya RamanQI officer · Aug 18, 3:22 PM
The proposal stands; the budget gate refuses the second signature, not the first.
Approval — blocked
SONot offered to anyoneBudget gate, not a permission
No officer can approve this draw at its current amount. Re-routing it to a different
officer changes nothing — the ceiling is a property of the file, not of the person.
Approved and fundedWhat the $1,525,500.00 committed figure is made of
Draw
Proposed by
Approved by
Amount
Running total
Release
1 · Site work and foundation
Priya Raman · Jul 8
Sandra Osman · Jul 9
$640,000.00
$640,000.00
Funded Jul 10
2 · Structural steel and envelope
Priya Raman · Jul 28
Sandra Osman · Jul 29
$885,500.00
$1,525,500.00
Funded Jul 30
Approval is not release. An approved draw is an authorization to release, nothing
more. The wire itself is the Vectr escrow-wire-release workflow, fired on completion
verification, and no console control on this page moves money. Both columns are QI officers on every
row: no exchanger and no coordinator appears on either side of the pair — an exchanger in a
fund-movement authorization path is constructive receipt under Treas. Reg. §1.1031(k)-1(g)(6), and a
coordinator is simply not an authorized officer.
Other states this surface must ship
Loading — skeleton, not a spinner
The row shape is preserved so the layout does not jump when the data lands. Never a spinner over
a blank card — a coordinator should be able to start reading the shape of the answer immediately.
Empty — teaches what lands here
No draws awaiting a second officer
A draw arrives here when a QI officer proposes it against a recorded construction budget.
You will see the amount, who proposed it, and what the project total becomes if you approve —
before you decide. Draws you proposed yourself never appear in this list.
Budget never recorded — approval refused
No construction budget has ever been recorded for this exchange.
There is no measured ceiling to authorize a draw against.
construction_budget_not_set · this is an unset budget, not a budget of
$0.00, and it fails closed for the same reason an unmeasured escrow balance does.
Record the budget →
The same fail-closed posture appears as construction_draw_indeterminate_committed
when an already-approved draw carries no usable amount: committed spend cannot be computed, so
nothing new is approved until that row is corrected.
Environment gap and load failure
Construction records are not available in this environment.
The construction_draws table is not present yet, so the API answers
available: false. Nothing is missing from the file — the migration has not been
applied here. Parking and QEAA above are unaffected.
Could not load parking arrangements. The request failed after 3 attempts.
Clocks shown elsewhere on this page may be stale — do not act on them until this clears.
Retry →
A load failure on a deadline surface says so plainly and tells the coordinator not to
trust what is on screen. Silence here is the dangerous state.
JK move between drawsA approveR rejectQ record QEAA execution[] previous / next parked file⌘K command palette
Build contract — parked clocks
1 · The exchange-level clock is the wrong clock and must never be shown as this file's.calculate_exchange_deadlines() deliberately leaves
identification_deadline and exchange_deadline null for
reverse_exchange_last, reverse_exchange_first,
reverse_improvement and the legacy reverse alias. Rendering a
sale-anchored 45/180 on a parked file — or falling back to the exchange row when the property row
is null — is a correctness rejection. The governing dates are per
parked_properties row. 2 · One clock set per parked property, all three anchored to that property's own
eat_acquisition_date. QEAA = acquisition + 5 business days
(Rev. Proc. 2000-37 §4.02(3), federal holidays excluded). 45-day identification = acquisition + 45
calendar days. 180-day parking = acquisition + 180 calendar days, and for an improvement
arrangement min(EAT + 180, exchanges.exchange_deadline). Two properties acquired six
weeks apart have two different 180th days, and the surface must show both. 3 · A missing clock is “not applicable”, never a blank date. An exchange-first
arrangement and an improvement arrangement both store
identification_deadline = nullby design. The shipped
DeadlineChip prints Not set, which reads as unentered data on a statutory
field. Render the structural reason instead, and suppress the row where the statute has none. 4 · A late QEAA never renders as satisfied. The state is derived from three
facts, not one flag: qeaa_signed_at, the computed qeaa_deadline, and
qeaa_late_acknowledged. Signed inside the window is green; signed outside it —
acknowledged or not — is the alarm state permanently, with the recorded reason and the officer
who acknowledged it printed beside it. It must not resolve to neutral because it was
acknowledged, escalated, or scrolled past. API gap, blocks the UI: the write path stores qeaa_late_acknowledged and
qeaa_late_acknowledgment_reason, but formatParkedProperty() returns
neither, so no client can currently tell a timely signature from a blown one. Add both to the
formatter and to ParkedProperty before coding this card. 5 · The combined cap is a sum, and the warning must key off the same sum it prints.computeCombinedHoldingDays() totals acquisition → disposition across every parked
property (§4.02(6)), but combined180Warning fires only when a single property
exceeds 180. A 142 + 5 file can cross 180 combined with no banner ever raised. Warn on the total,
and state the projection — while two properties sit in the EAT together the combined figure
advances two days per calendar day, so the combined cap frequently binds before either single
clock does. 6 · The parked book is a list, not a dropdown. The shipped
<Select> exchange picker hides every other parked file, including the ones whose
clocks are closer. Also fix the filter while you are there:
PARKING_FAMILIES = ['reverse', 'improvement'] in EatSection.tsx does not
match the canonical variants the deadline-anchor migration names
(reverse_exchange_last, reverse_exchange_first,
reverse_improvement) nor the reverse_improvement value carried by
ParkingArrangementType. A canonically-typed reverse file never appears in the picker
at all.
Build contract — draws, four eyes and the budget ceiling
7 · Two authorized officers per draw, and the approver is never the proposer.
Server-enforced at POST /exchanges/:id/construction/draws/:drawId/approve
(403 self_approval_blocked plus a
construction_draw.self_approval_blocked audit row). The UI mirrors it by
absence: for the proposer the approve control is not rendered, not
rendered-and-disabled, and the exclusion is named on screen with who it routed to. Reject stays
available to the proposer — declining to move money is not a fund movement. “Authorized officer” is a role, not membership on the file. Both slots resolve through
resolveQiOfficerAccess, which admits only org_owner or
org_admin of the owning organization. An Exchange Coordinator holds org_staff
and an exchanger holds no membership in the QI organization at all, so neither may occupy a proposal
or an approval slot, and neither may be labelled “QI officer” anywhere on this surface. The roster
above the queue prints both struck through on purpose: an exclusion shown only by absence is the
exclusion a later edit silently reverses. Provenance: the API is the only layer enforcing this. There is no database
CHECK on construction_draws: migration 048 designs approved_by in but
leaves the invariant to application code “because requested_by is nullable on legacy
rows”, and COMPLIANCE.md IRS1031-011 records the same. The sibling escrow table does
carry one — disbursement_proposals_approver_ne_proposer, migration 045 — which is
why this control is easy to misread as defence-in-depth. It is not. A write that reaches the
table without passing the approve handler is unguarded, so treat the API check as load-bearing
rather than as a second line, and do not describe it to a reviewer or an auditor as
database-enforced. Matching 045 would take its own migration; none is filed. 8 · A proposal is not an approval, and is never counted as one. The four-eyes
panel has exactly two slots and the proposer occupies neither approval slot. No count, badge or
progress figure on this surface may treat a submission as a signature. 9 · The exchanger is absent from every authorization path. An exchanger in a
fund-movement approval or initiation path is constructive receipt under Treas. Reg.
§1.1031(k)-1(g)(6), which would disqualify the exchange. An exchanger acknowledgement may appear
only as it does here: explicitly informational, explicitly non-gating, visually distinct from an
officer slot, and never counted. Gap, needs a decision before this is coded:POST .../construction/draws and
.../submit authorize on assertExchangeAccess + writeAuthorized,
which includes the exchanger — so today an exchanger can create a draw and move it to
proposed, becoming the requested_by of record. This surface separates
request (documentary: invoice, lien waiver, completion certificate — exchanger or
contractor) from proposal (a QI officer, on the record). Restrict the proposal transition
to resolveQiOfficerAccess and keep the exchanger's contribution as an attachment. 10 · Cumulative budget is shown before approval, and enforced twice. Committed =
the sum of approved + funded draws. Every proposed row prints the amount,
the total the project reaches if approved, and what remains — measured against
construction_projects.construction_budget_cents. Over-budget rows are refused with the
arithmetic in the message (409 construction_draw_exceeds_budget) and a
construction_draw.budget_gate_blocked audit row. The API check is not sufficient on
its own: it reads then writes in two round trips, so two different draws approved concurrently can
each pass and together exceed. The FOR UPDATE lock on the owning
construction_projects row is what actually closes that race, and it must hold when the
API is bypassed entirely. Provenance: none of paragraph 10 is on dev. It is PR #2245 / issue
#2219, open. Until it merges, an approval reads no budget at all. 11 · Fail closed on an unmeasured ceiling. No construction_projects
row, or a null construction_budget_cents, is an unset budget — not a budget of
$0.00 and not “no limit”. Refuse (construction_budget_not_set). Same for an
already-approved draw carrying no usable amount
(construction_draw_indeterminate_committed): if committed spend cannot be computed,
nothing further is approved until it can. 12 · Approval is authorization, not release, and identity comes first. The wire is
the Vectr escrow-wire-release workflow on completion verification; no control on this
page moves money. Approval is refused while OFAC / counterparty screening is unclear
(screening_gate_blocked) and while the acting account is the target of an active
impersonation session (impersonation_blocked). Nothing here marks an exchanger's
identity verified — KYC is the first gate and it belongs to the person, and no “sign on behalf”
affordance exists anywhere, because the eSign Act and UETA require the signer's own intent.
Build contract — token contract, both themes, motion
13 · No colour literal survives to the implementation. Every colour resolves
through docs/mockups/tokens.css, which carries the same names the app ships in
packages/web-app/src/index.css. Tokens marked [APP] already exist — copy them.
Tokens marked [PROPOSED] must be added to index.css:root and
.dark first; inlining the hex at the call site is a rejection. Nothing new is proposed
by this surface — the parking hue is --hub-reverse and the build-to-suit hue is
--hub-disbursement, both already in the sheet. That also retires the two literals the
shipped sections carry: ConstructionDrawsSection's #c2410c heading icon
and its bg-orange-600 … text-white approve button, plus the raw
hsl(142 76% 36%) enforcement note. 14 · A filled control never hardcodes its label colour. Text on the admin fill is
--admin-on; on the affirmative fill it is --good-on. Both flip with the
theme, because the fill lightens in dark — white is 2.9:1 on the dark indigo and 1.5:1 on the dark
green. Muted text is --ink-3; --ink-4 is icons, rules, tick marks and
disabled glyphs only. 15 · Colour carries one meaning each, and never carries it alone. Hub hues are
wayfinding — which leg — never health. Status stays on good / warn / bad and is always
paired with a label and an icon. Identity gradients (--ident-*) are their own axis so
an avatar can never read as a status. A dashed border means one thing on this page and one thing
only: this depicts something not shipped, or a field the API does not serve. 16 · Motion conveys state, never decoration. Transitions run at
--duration-fast (180ms) on the standard easing and animate colour, border and
elevation — never layout. Every interactive element carries hover,
:focus-visible, active and, where it exists, disabled.
prefers-reduced-motion stops the skeleton pulse and collapses every transition. 17 · Exactly one next-step emphasis. The QEAA window on 4120 Harbor Point Drive
carries it, because a blown safe harbor is the only thing on this page that cannot be recovered
later. The over-budget draw is blocked, which is a refusal, not a next step — the system
has already decided. Never zero, never two.
Light and dark are both designed here. All names, entities, addresses, instrument numbers and
amounts are synthetic demo data; no real tax identification number, date of birth or partner name
appears anywhere.