EAT / Parking & Construction Draws

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.

EX-2026-000258
Belcher Family Trust
Reverse improvement Exchange-last Build-to-suit Arrangement active
Matt BelcherExchanger · trustee
Tom BottenbergCoordinator
Sandra OsmanQI officer · you
Which clock governs this file A 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, LLC Formation 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 EAT Pierce County · instrument 2026-0814-00219 · Aug 14
Settlement statement — EAT acquisition Cascade Title · Aug 14
Qualified Exchange Accommodation Agreement Drafted Aug 17 · unsigned · window closes Aug 21
Triple-net lease, EAT to exchanger Term 30 years · 2 renewal options · Aug 15
Identification of relinquished property Not 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.
45-day identification
Thu, May 14, 2026
Satisfied Apr 28 · 2 relinquished properties identified
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
Evidence on file
QEAA — executed late, acknowledged Signed 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 EAT Not 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 period Rev. Proc. 2000-37 §4.02(6) — the combined time both properties are held in the QEAA 147 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 ledger Every 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 approval Two authorized officers per draw. The approver is never the proposer. 3 proposed 1 over budget
Who may sign a draw on this file 2 authorized officers
Sandra OsmanQI officer · you Priya RamanQI officer Tom Bottenbergcoordinator — not an authorized officer Matt 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.
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 budget Proposed 2 days ago
$412,500.00 17.2% of budget
Proposed by
Priya Raman QI officer · Aug 17, 4:08 PM
A proposal is not an approval. It is never counted toward the two required officers.
Approval — outstanding
You may approve You 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.00 of $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 →
Interior finishes, phase 1
Northbay Construction · invoice 2026-0814 · 60% completion certificate attached
Waiting on a second officer Fits within budget Proposed yesterday
$268,000.00 11.2% of budget
Proposed by
Sandra Osman — you QI officer · Aug 18, 9:41 AM
Your own submission is not an approval. It carries no authorization weight.
Approval — routed away from you
Priya Raman QI 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.00 of $2,400,000.00 · leaves $606,500.00
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.00 Proposed yesterday
$902,000.00 37.6% of budget
Committed if approved $2,427,500.00 $27,500.00 over the $2,400,000.00 budget
budget
Proposed by
Priya Raman QI officer · Aug 18, 3:22 PM
The proposal stands; the budget gate refuses the second signature, not the first.
Approval — blocked
Not offered to anyone Budget 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 funded What 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
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.
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.
J K move between draws A approve R reject Q 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 = null by 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.