offplan · online
Plan · stage1

Stage 1 — Wave 2 Chunk 7: Phase 1.7 deep rewrite

Approvedplanstage1priority P0
Ratified
2026-05-08
Created
2026-05-08
Priority
P0
Tags
architecture, ux, ops, billing

Goal

Закрыть deferred-from-CONV-24 deep rewrite Phase 1.7 «Платёжная инфраструктура + Sales Page». Absorb 10 накопленных callout-bullets (v4.3 + v4.4) → actual task body, добавить 4 новых tasks из callout content, почистить stale resolved Q's, убрать дубли с Foundational (Stock allocation в §4.4, Public Visibility detail в §5/§5.1). Phase 1.7 после rewrite = clean «что строить и в каких файлах» без accumulated cruft.

Locked Decisions (CONV-27 interview)

# Тема Решение
1 Approach Approach C — Hybrid surgical structure changes. Sub-plan plans/landing-pages-by-audience.md (status: stub) владеет 4-audience детальной спекой; Phase 1.7 task = pointer-only. 3 новых tasks (Custom domain + Subdomain + Public Visibility UI). Cleanup stale Q's и dedup с Foundational. ~80-100 lines diff.
2 1.7.1 Landing pages Остаётся ONE task «Landing pages» с pointer'ом на plans/landing-pages-by-audience.md (sub-plan owns 4-audience spec: general / studio / agency / developer). Demo iframe pattern (1.7.Y из v4.3) — sub-bullet. Anonymous viewer flow (1.7.CC из v4.4) — частично здесь как rendering note, остальное в новой 1.7.12.
3 Stock allocation toggle (1.7.EE из v4.4) DROP from Phase 1.7 — переехало в Foundational §4.4 (Closed pool / Open pool). Phase 1.7 keeps только cross-link в desc «Project Settings UI surfaces stock allocation mode toggle per §4.4». Дубль удаляется.
4 Public Visibility (1.7.BB из v4.4) Spec живёт в Foundational §5 + §5.1 PIN. Phase 1.7 получает новый task 1.7.12 — lightweight «config UI + anonymous render», который реализует §5/§5.1 spec. Не дублирует саму спеку.
5 Custom domain + DKIM (1.7.AA из v4.3+v4.4) Новый task 1.7.10 — Custom domain self-serve flow + DKIM setup. Marked Tier 2+ feature, Stage 1 implementation скоупится только до architecture/scaffolding (full UI можно отложить на Stage 2 если ресурс ограничен — пометка в task).
6 Subdomain pattern (1.7.DD + URL structure 1.7.EE из v4.4) Новый task 1.7.9 — Subdomain selection в signup flow + namespaced project URL structure ({slug}.offplan.online/projects/{project-slug}). Reserved subdomain blacklist (staff / app / api / admin / etc).
7 Free tier billing (1.7.Z из v4.3) Новый task 1.7.11 — Free tier billing tracking (no-charge tier с metrics для conversion analytics). Marked «awaiting ADR 0008» — детальный scope (limits, expiry, conversion triggers) откладывается до ADR 0008 написания в Chunk 8.
8 Demo iframe (1.7.Y из v4.3) Sub-bullet 1.7.1 Landing pages (часть landing спеки, не отдельный task). Detailed pattern в sub-plan'е landing-pages-by-audience.md.
9 Stale resolved Q's в 1.7.5 2 stale Q's «Без карты vs с картой» + «Block vs read-only по истечении» — DROP (resolved в Foundational §3 Trial period via CONV-24). Task desc уже ссылается на §3 — Q's просто удаляются.
10 Stale resolved Q's в 1.7.7 Refund policy ✅ + currency ✅ помечены resolved в bullets — clean up Open Questions block (drop ✅-prefixed entries; оставить «chargeback auto-freeze» → cross-link на ADR 0006 + tax engine как live Q).
11 v4.3 + v4.4 callouts DROP entirely после absorbing content в tasks. История in Git + Workstream Session Log.
12 v4.11 callout Single new callout в Phase 1.7 кратко описывающий «deep rewrite in CONV-27/Chunk 7: v4.3 + v4.4 callouts absorbed; new tasks 1.7.9-1.7.12 added; stock allocation dupe removed».

Approach

Approach C — Hybrid surgical structure changes. Из 3 предложенных вариантов в Step 3:

Diff scope: ~80-100 lines в Phase 1.7 (drop 2 callouts ~30 lines / add 4 new tasks ~60 lines / amend 4 existing tasks ~10 lines / add 1 new callout ~10 lines).

Steps

A. Drop v4.3 + v4.4 callouts (Phase 1.7)

A1. Delete v4.3 callout (lines 2226-2235): «📌 v4.3 — CONV-15 (Roman call) additions» div + 4 bullets + footer p.

A2. Delete v4.4 callout (lines 2237-2248): «📌 v4.4 — CONV-17 (permission-and-tenancy ratification) additions» div + 6 bullets + footer p.

B1. Update phase-desc paragraph (line 2217) — добавить short note про Public Visibility + Stock allocation references:

Existing: <p class="phase-desc">Студия проходит signup → trial → подписка полностью сама. Плюс публичная страница, которая продаёт. <strong>Помимо месячной подписки</strong> — flat-fee tier (оплата за настройку проекта + SLA на новые проекты), см. 1.7.8.</p>

New: <p class="phase-desc">Студия проходит signup → trial → подписка полностью сама. Плюс публичная страница, которая продаёт. <strong>Помимо месячной подписки</strong> — flat-fee tier (оплата за настройку проекта + SLA на новые проекты), см. 1.7.8. <strong>Public Visibility</strong> + <strong>Stock allocation</strong> presets — спец живёт в <a href="#fd-visibility">Foundational §5</a> + <a href="#fd-access">§4.4</a>; Phase 1.7 строит config UI и rendering layer (см. 1.7.12).</p>

C. New v4.11 callout (replace v4.3 + v4.4)

C1. Insert single small callout where v4.3 + v4.4 were (after phase-files block, before 1.7.1 task):

<div class="callout" style="background: rgba(184,149,90,0.08); border-left: 4px solid var(--gold); padding: 16px 20px; margin: 16px 0;">
  <strong>📌 v4.11 — CONV-27 (Chunk 7 deep rewrite):</strong>
  <ul style="margin: 8px 0 0 20px; font-size: 13.5px; color: var(--text-mid);">
    <li>v4.3 (CONV-15 Roman call) + v4.4 (CONV-17 permission-and-tenancy) callouts <strong>absorbed</strong> в task body — 4 новых tasks (1.7.9 / 1.7.10 / 1.7.11 / 1.7.12) и updates в 1.7.1.</li>
    <li><strong>Stock allocation toggle</strong> (was 1.7.EE in v4.4) — moved to <a href="#fd-access">Foundational §4.4</a>; cross-link в phase desc, отдельная task'а нет.</li>
    <li><strong>Public Visibility detail</strong> (was 1.7.BB in v4.4) — spec живёт в <a href="#fd-visibility">§5</a> + <a href="#fd-visibility-pin">§5.1</a>; Phase 1.7 keeps только config UI task (1.7.12).</li>
    <li>Stale resolved Q's в 1.7.5 + 1.7.7 — cleaned (resolved per §3 Trial / payments-research).</li>
  </ul>
  <p style="margin-top: 10px; font-size: 12px; color: var(--text-mid); font-style: italic;">Sub-plan: <code>plans/landing-pages-by-audience.md</code> владеет 4-audience landing спекой. Plan: <code>plans/stage1-chunk-7-phase17-rewrite.md</code>.</p>
</div>

D. Update 1.7.1 Landing pages (audience pointer + demo iframe + anonymous flow note)

D1. Update task title + desc + sub-bullets (lines 2250-2268):

Existing task title: <span class="task-name">Landing page</span> New: <span class="task-name">Landing pages (4 audiences)</span>

Existing task-desc: <p class="task-desc">Публичная страница offplan.online, которая конвертирует посетителя в trial signup.</p>

New task-desc:

<p class="task-desc">Публичные landing pages на <code>app.offplan.online</code> которые конвертируют посетителя в trial signup. <strong>4 audience-specific landings</strong> (general / studio / agency / developer) — каждой свой messaging и features. <strong>Детальная 4-audience спека</strong> — sub-plan <code>plans/landing-pages-by-audience.md</code> (status: stub, отдельная /plan-сессия).</p>

Update existing 9 sub-bullets — add 2 new + keep existing:

After «Hero: главный месседж + CTA «Start your 14-day trial — no card required»...» (existing bullet 1), insert:

<li><strong>Demo iframe embed pattern</strong> (CONV-15 Roman call: «нахрен убьёт конкурентов») — живой проект iframe'ом на странице, чтобы visitor сразу видел работающий продукт. Per audience: general → showcase project, studio → их собственный demo project (template), agency → multi-project view, developer → builder UX preview.</li>

After «Footer с Legal links (ToS, Privacy, DPA)» (existing last bullet), insert:

<li><strong>Anonymous viewer rendering on per-Organisation sales page</strong> (`{slug}.offplan.online` root) — Hero + branding + projects list (или скрыто per Public Visibility preset). «Request access» CTA для anonymous → отправка inquiry в Organisation-админку. Heart / «Связаться со мной» actions всегда hidden для anonymous (требуют buyer-token). Spec — <a href="#fd-visibility">§5</a>.</li>

E. Cleanup 1.7.5 stale Open Questions

E1. Replace «Открытые вопросы (2)» block (lines 2351-2354):

Existing:

<details>
<summary class="task-label">Открытые вопросы <span class="count">(2)</span></summary>
<ul><li>❓ Без карты vs с картой</li><li>❓ Block vs read-only по истечении</li></ul>
</details>

New:

<details>
<summary class="task-label">Открытые вопросы <span class="count">(0)</span></summary>
<ul><li>✅ Все Q's resolved через <a href="#fd-billing-trial">§3 Trial period</a> (CONV-24): trial без карты, 14 дней T1, auto-downgrade к Free Guest read-only по истечении.</li></ul>
</details>

F. Cleanup 1.7.7 stale Open Questions

F1. Replace «Открытые вопросы (2)» block (lines 2395-2403):

Existing block has 4 bullets total (2 marked ✅ resolved with strikethrough, 2 still open). Clean up: drop strikethrough bullets, keep 2 live Q's, add cross-link на ADR 0006 для chargeback.

New:

<details>
<summary class="task-label">Открытые вопросы <span class="count">(2)</span></summary>
<ul>
  <li>❓ Chargeback handling — auto-freeze on dispute (per <a href="../decisions/0006-chargeback-auto-freeze.md">ADR 0006</a>) или wait-and-see? <strong>Tentative:</strong> ADR 0006 default (auto-freeze) — accept unless reverted.</li>
  <li>❓ Tax engine — Stripe Tax (built-in, US/EU/UK/AU coverage) / Avalara (mature, expensive) / Paddle handles (если provider Paddle)?</li>
</ul>
</details>

G. New task 1.7.9 — Subdomain selection + Project URL structure

G1. Insert новый task div после 1.7.8 (line 2442), перед <!-- Фаза 1.8 --> (line 2444):

<div class="task">
  <div class="task-title"><span class="task-id">1.7.9</span><span class="task-name">Subdomain selection + Project URL structure</span></div>
  <div class="markers"><span class="marker m-critical">Критично</span><span class="marker m-dept">Tech+Design</span><span class="marker m-time">⏱</span></div>
  <p class="task-desc">При создании Organisation Owner выбирает subdomain (default <code>{slug}.offplan.online</code>). Validation: уникальность + reserved blacklist (<code>app</code> / <code>api</code> / <code>admin</code> / <code>staff</code> / <code>www</code> / <code>blog</code> / <code>docs</code> / <code>help</code> / <code>support</code> / <code>status</code> / <code>auth</code> / <code>login</code> / etc). Project URL — namespaced path: <code>{slug}.offplan.online/projects/{project-slug}</code>. Безопасно для будущих system pages (<code>/login</code>, <code>/settings</code>, etc.) которые не будут конфликтовать с project URLs.</p>
  <details>
  <summary class="task-label">Что конкретно нужно сделать <span class="count">(6)</span></summary>
  <ul>
    <li>Subdomain input в Organisation creation form: real-time validation (availability check + reserved blacklist warning + format rules a-z/0-9/dash, 3-32 chars).</li>
    <li>Reserved blacklist в config (не хардкод) — расширяемо без релиза.</li>
    <li>Subdomain change UI в Organisation Settings (Owner / Admin) — после change: 30-day soft redirect от старого subdomain'а на новый, потом hard 410.</li>
    <li>Project slug input в Project creation form: validation (unique within Organisation + format rules) + auto-suggest from project name.</li>
    <li>Project URL pattern enforced на routing layer: <code>{slug}.offplan.online/projects/{project-slug}</code> + system pages под <code>app.offplan.online</code> или namespaced под Organisation root но с reserved prefixes.</li>
    <li>Custom domain (Tier 2+) overrides default subdomain — см. 1.7.10.</li>
  </ul>
  </details>
  <details>
  <summary class="task-label">Открытые вопросы <span class="count">(2)</span></summary>
  <ul>
    <li>❓ Subdomain change frequency limit (предотвратить abuse): hard cap «1 change / 90 days» или soft warning?</li>
    <li>❓ После custom domain (1.7.10) — старый subdomain продолжает работать как fallback или disabled?</li>
  </ul>
  </details>
  <div class="task-deps">Зависит от: 1.3 (Tenancy) · Блокирует: 1.7.10, 1.10</div>
</div>

H. New task 1.7.10 — Custom domain + DKIM (Tier 2+)

H1. Insert после 1.7.9:

<div class="task">
  <div class="task-title"><span class="task-id">1.7.10</span><span class="task-name">Custom domain self-serve flow + DKIM (Tier 2+)</span></div>
  <div class="markers"><span class="marker m-high">Высокий</span><span class="marker m-dept">Tech+Ops</span><span class="marker m-time">⏱</span></div>
  <p class="task-desc">Tier 2+ feature — Organisation Owner подключает собственный domain (<code>presentations.developer-x.com</code>) вместо subdomain'а <code>{slug}.offplan.online</code>. Self-serve flow: wizard в Settings → Domain — Owner прописывает CNAME + DKIM записи в DNS своего регистратора, мы автоматически верифицируем. После activation: Sales App страницы рендерятся под custom domain; transactional emails (buyer presentations) уходят от <code>{custom-domain}</code>.</p>
  <details>
  <summary class="task-label">Что конкретно нужно сделать <span class="count">(7)</span></summary>
  <ul>
    <li>Settings → Domain page (Owner / Admin only) — current domain status + «Connect custom domain» CTA.</li>
    <li>Domain wizard: 3 steps — (1) Owner вводит domain + paste запись «Add CNAME → ...» в clipboard; (2) Owner добавляет в DNS своего registrar'а; (3) Owner жмёт «Verify» — мы DNS-резолвим CNAME через 5 retry с exponential backoff.</li>
    <li>DKIM setup как часть wizard'а — auto-generate DKIM keypair, public key показываем Owner'у для копирования в DNS как TXT record.</li>
    <li>SSL/TLS provisioning automatic через Let's Encrypt (Cloudflare-fronted: API call → certificate within 5 min).</li>
    <li>Email sending updated — все transactional emails (presentation links, password resets) routes through Organisation's custom domain если configured (с fallback на default domain при failure).</li>
    <li>Domain change / removal flow — soft redirect (30d) от старого custom domain на default subdomain.</li>
    <li>Tier-gating — feature available только для Tier 2+ subscriptions; Tier 1 / Free Guest получают upgrade modal при попытке connect.</li>
  </ul>
  </details>
  <details>
  <summary class="task-label">Открытые вопросы <span class="count">(3)</span></summary>
  <ul>
    <li>❓ Email sender architecture — single-domain (offplanonline.com отправляет от имени всех clients) vs per-org domain (каждая Org свой DKIM)? Решение → <strong>ADR 0011</strong> (placeholder, write в Chunk 8).</li>
    <li>❓ Multiple custom domains per Organisation (apex + www + presentations.x.com) или single?</li>
    <li>❓ Two-domain setup для нашего team-side (<code>offplan.online</code> для team-коммуникаций + <code>offplanonline.com</code> для system / transactional emails) — это в Phase 1.8, не 1.7.</li>
  </ul>
  </details>
  <div class="task-deps">Зависит от: 1.7.9 (Subdomain), 1.8.6 (Transactional email), <a href="../decisions/">ADR 0011</a> (Email sender architecture, pending) · Блокирует: —</div>
</div>

I. New task 1.7.11 — Free tier billing tracking (awaiting ADR 0008)

I1. Insert после 1.7.10:

<div class="task">
  <div class="task-title"><span class="task-id">1.7.11</span><span class="task-name">Free tier billing tracking</span></div>
  <div class="markers"><span class="marker m-high">Высокий</span><span class="marker m-dept">Product+Tech</span><span class="marker m-q">❓</span></div>
  <p class="task-desc">No-charge tier для guest organisations (<a href="#fd-roles">§1 Free Guest</a>) — billing запись не выставляет invoice'ы, но всё равно tracked в billing system для metrics + conversion analytics («N Free Guest Orgs converted to paid в этом месяце»). <strong>Detailed scope (limits / expiry / conversion triggers) — awaiting <a href="../decisions/">ADR 0008</a> (Free tier scope, pending Chunk 8).</strong></p>
  <details>
  <summary class="task-label">Что конкретно нужно сделать (after ADR 0008) <span class="count">(4)</span></summary>
  <ul>
    <li>Billing system schema — tier <code>free_guest</code> вместе со <code>starter</code> / <code>tier_1</code> / <code>tier_2</code> / <code>tier_3_enterprise</code>.</li>
    <li>Conversion funnel tracking — events «free_guest_signup» / «free_guest_to_paid» / «free_guest_churned».</li>
    <li>Free tier limits enforcement (лимиты на проекты / units / seats — exact numbers per ADR 0008).</li>
    <li>Upgrade modal — trigger conditions per ADR 0008 (e.g., «trying to create 2-й project as Free Guest»).</li>
  </ul>
  </details>
  <details>
  <summary class="task-label">Открытые вопросы <span class="count">(1)</span></summary>
  <ul>
    <li>❓ <strong>ADR 0008 placeholder</strong> — Free tier limits (projects / units / seats), expiry policy (do Free Guest accounts expire?), conversion triggers (lazy «attempt to upgrade» или active «trial expired»?). Will be written в Chunk 8.</li>
  </ul>
  </details>
  <div class="task-deps">Зависит от: 1.7.3 (Payment integration), <a href="../decisions/">ADR 0008</a> (pending) · Блокирует: Free Guest tier shipping</div>
</div>

J. New task 1.7.12 — Public Visibility config UI + anonymous render

J1. Insert после 1.7.11:

<div class="task">
  <div class="task-title"><span class="task-id">1.7.12</span><span class="task-name">Public Visibility — config UI + anonymous render</span></div>
  <div class="markers"><span class="marker m-critical">Критично</span><span class="marker m-dept">Tech+Design</span><span class="marker m-time">⏱</span></div>
  <p class="task-desc">Реализация <a href="#fd-visibility">Foundational §5 Visibility presets</a> (Private / Discovery / Full sales / PIN-protected) + <a href="#fd-visibility-pin">§5.1 PIN-protected detailed spec</a>. <strong>Spec живёт в Foundational</strong> — этот task = build против фиксированного спека. Two parts: (1) <strong>config UI</strong> для Owner / Admin (set preset per-project в Project Settings + Object Builder), (2) <strong>anonymous render</strong> на sales-page (<code>{slug}.offplan.online/projects/{project-slug}</code>) согласно selected preset.</p>
  <details>
  <summary class="task-label">Config UI (admin side) <span class="count">(4)</span></summary>
  <ul>
    <li>Project Settings → Public Visibility section — radio с 4 presets (Private / Discovery / Full sales / PIN-protected) + preview text для каждого.</li>
    <li>PIN-protected — раскрываются 4 conditional fields (PIN required min 4 char, After-PIN view Discovery|Full sales, Contact email required, Contact phone optional) — см. <a href="#fd-visibility-pin">§5.1</a>.</li>
    <li>Same UI surface в Object Builder при создании проекта (default Discovery; Owner может сразу выбрать).</li>
    <li>Audit log entry на каждое изменение Public Visibility (audit visible to Owner / Admin / SM per <a href="#fd-access">§4.2</a>).</li>
  </ul>
  </details>
  <details>
  <summary class="task-label">Anonymous render (sales-page side) <span class="count">(5)</span></summary>
  <ul>
    <li>Routing middleware: anonymous request → check Public Visibility preset:
      <ul>
        <li><strong>Private</strong> → 404 (project не существует для анонимных)</li>
        <li><strong>Discovery</strong> → renders Hero + branding + projects list (без цен), heart / inquiry CTAs hidden</li>
        <li><strong>Full sales</strong> → full content (renders + 360° + цены); inquiry CTA visible но требует buyer-token для submit</li>
        <li><strong>PIN-protected</strong> → blur + PIN entry overlay (см. <a href="#fd-visibility-pin">§5.1</a> routing sequence)</li>
      </ul>
    </li>
    <li>«Request access» CTA для Discovery — отправка inquiry в Organisation-админку (creates lead).</li>
    <li>Buyer-token bypass'ит Visibility preset (per <a href="#fd-edges">§7.4 Visibility flip с active tokens</a>).</li>
    <li>Visibility flip с active tokens — existing tokens работают по своему правилу до 90d expiry, anonymous получают новый preset (см. §7.4 D).</li>
    <li>Heart / «Связаться со мной» actions — всегда hidden для anonymous, require valid buyer-token.</li>
  </ul>
  </details>
  <details>
  <summary class="task-label">Открытые вопросы <span class="count">(2)</span></summary>
  <ul>
    <li>❓ «Request access» в Discovery preset — куда ведёт inquiry? Generic Organisation contact email или per-project contact (как в PIN-protected)? Скорее всего Owner email (как PIN-protected default).</li>
    <li>❓ Stage 2 — granular per-field overrides (показать прайс но скрыть availability, etc) — сейчас deferred per <a href="#fd-visibility">§5</a>.</li>
  </ul>
  </details>
  <div class="task-deps">Зависит от: 1.3 (Tenancy), 1.10 (Sales App routing), Foundational §5 + §5.1 (ratified) · Блокирует: —</div>
</div>

K. Changelog v4.11 entry

K1. Insert v4.11 entry поверх v4.10 в launch-plan-changelog.html (insert after <div class="wrap"> opening, перед v4.10 <div>):

Structure:

L. Workstream update

L1. В workstreams/stage1-roman-integration.md:

M. Preview repo sync

M1. Sync 2 файла в ~/code/offplan-online/preview/plan/: launch-plan-stage-1.html + launch-plan-changelog.html. Commit + push.

Files

Dependencies

Testing

Risks

  1. External cross-links на 1.7.BB / 1.7.CC / 1.7.DD / 1.7.EE могут существовать в других файлах (changelog, sub-plans, workstream). Mitigate: grep весь репо перед commit'ом — если найдены, обновить на новые task IDs (1.7.9-1.7.12).
  2. DKIM Tier 2+ scope может быть amplified — task 1.7.10 имеет 7 sub-bullets с большим objem'ом работы. Stage 1 implementation может потребовать split на «scaffolding only» vs «full UI». Mitigate: task маркером «Tier 2+, Stage 1 = scaffolding» который можно сужать в build phase.
  3. Free tier task 1.7.11 без ADR 0008 — incomplete spec. Mitigate: explicitly помечен «awaiting ADR 0008» в task desc + open Q; Chunk 8 ADR работа разблокирует.
  4. Public Visibility task 1.7.12 объединяет config UI + anonymous render — different layers (admin + sales-app). Может быть split нужен на 1.7.12.a + 1.7.12.b. Mitigate: оставляем как один task с clear sub-blocks; split возможен в build phase если разработчики решат разделить deliverables.
  5. «Request access» Q в 1.7.12 не resolved — Discovery preset CTA destination. Mitigate: tentative «Owner email default per PIN-protected pattern» — не block'ит chunk; Chunk 7.5 / 8 могут finalize.

Workstreams

Updates workstreams/stage1-roman-integration.md:

Не создаём новый workstream — pattern Chunks 3-6.

Evaluation

Done when:

Definition of NOT done (deferred):

Open Questions

Q1 — Other Phase callouts cleanup (Chunk 7.5 vs combined)

Phase 1.4 + 1.10 имеют по 5 v-callouts; Phase 1.2 / 1.3 / 1.5 / 1.8 / 1.9 / 1.11 имеют меньше но всё равно accumulated. Resolve в next session: делать ли Chunk 7.5 (только 1.4 + 1.10 sweep) и Chunk 8 (ADRs) параллельно, или combine.

Q2 — Subdomain change frequency limit

Hard cap «1 / 90 days» или soft warning? Anti-abuse vs UX flexibility. Defer to build phase или quick decision сейчас.

Q3 — Email sender architecture (single-domain vs per-org)

Critical для 1.7.10 (Custom domain task) — какой default. Решение → ADR 0011 (Chunk 8).

Q4 — «Request access» CTA destination в Discovery preset

Owner email default vs per-project contact (как в PIN-protected). Tentative Owner email; final decision можно отложить.