offplan · online
Plan · stage1

Stage 1 — Wave 2 Chunk 7.5: Phase callouts cleanup sweep

Approvedplanstage1priority P0
Ratified
2026-05-09
Created
2026-05-09
Priority
P0
Tags
tooling, ux, architecture

Goal

Закрыть accumulated callouts placeholder'ами в 8 фазах Stage 1, применяя гибридный подход: для фаз с stub sub-plans — relabel callout в «sub-plan pointer», для фаз без sub-plans — Chunk 7 pattern absorbing в numbered tasks. Cross-link pointers (v4.7-v4.10) в фазах 1.4 + 1.10 collapse в один summary v4.13 callout каждый.

Success Criteria

См. фронтматер success_criteria.

Approach — Hybrid sub-plans-aware

Принцип

Each phase falls into one of three categories:

Category Phases Treatment
A — Has stub sub-plan 1.2 / 1.3 / 1.9 / 1.11 Re-label старые callouts как «📌 Ratified decisions — будут перенесены в plans/X.md при /plan ratification»; content preserved. Phase 1.11 v4.12 parking-lot — НЕ ТРОГАЕМ
B — No sub-plan, has placeholders 1.4 / 1.5 / 1.8 / 1.10 Full Chunk 7 absorbing: placeholders → numbered tasks; old callouts удалить; v4.13 summary callout добавить
C — Cross-link pointers v4.7-v4.10 1.4 / 1.10 only Collapse 4 pointer bullets в один summary v4.13 callout «See Foundational §4.6 / §5.1 / §6.1-§6.2 / §7 для implementation specs»

Почему не absorbing для A category

Sub-plans (onboarding-trial-mode.md / permission-and-tenancy-model.md / legal-multi-party-framework.md / buyer-profile-and-presentation.md) все = status: stub. Они ждут отдельных /plan ratification сессий. Callouts BL Stage 1 = единственное место где ratified detail живёт. Удалять их сейчас = lose content. Re-label = preserve content + clear ownership boundary.

Почему absorbing для B category

Фазы 1.4 / 1.5 / 1.8 / 1.10 не имеют sub-plans. Placeholders из v4.3/v4.4 callouts должны жить как numbered tasks внутри фазы — это и есть «detailed spec» для них.

Locked Decisions

# Тема Решение
L1 Phase 1.11 v4.12 parking-lot НЕ ТРОГАТЬ. Это свежий pointer на plans/buyer-profile-and-presentation.md (CONV-30).
L2 Phase 1.3 v4.4 — 12 ratified decisions Re-label callout как «Ratified — see plans/permission-and-tenancy-model.md (когда ratified) + numbered tasks 1.3.1-1.3.12 below». Inline v4.7 в 1.3.2 — absorbed в task description.
L3 Phase 1.2 v4.3 + v4.4 + v4.5 Re-label объединённый «📌 Ratified onboarding decisions» pointing к plans/onboarding-trial-mode.md. v4.5 Atelier override — preserved (это active design canon). v4.8 PIN config inline bullet → absorb в существующий task 1.2.4 если применимо или leave.
L4 Phase 1.4 5 placeholders Absorb в numbered tasks 1.4.9 / 1.4.10 / 1.4.11 / 1.4.12 / 1.4.13 + reserved subdomain note absorb в task description 1.4.2.
L5 Phase 1.4 4 cross-link pointers v4.7-v4.10 Collapse в один v4.13 summary callout: «Operator surface implications от Wave 2 §4.6 / §5.1 / §6.1 / §7 — see Foundational sections для specs».
L6 Phase 1.5 2 placeholders Absorb в numbered tasks 1.5.4 (AI file upload) + 1.5.5 (VV API audit) — но 1.5.5 проверить duplicate с existing 1.5.1 «API audit»; если duplicate — merge.
L7 Phase 1.8 3 placeholders Absorb в numbered tasks 1.8.X (two-domain email) + 1.8.Y (DKIM/SPF/DMARC) + 1.8.Z (hosting cost projection). Number IDs определить когда читаем фазу — добавить после existing 1.8.x.
L8 Phase 1.9 9 placeholders Re-label объединённый «📌 Ratified legal multi-party additions» pointing к plans/legal-multi-party-framework.md. Content preserved.
L9 Phase 1.10 9 placeholders Absorb в numbered tasks 1.10.8 / 1.10.9 / .. / 1.10.16 (или после existing last numbered task). 1.10.Y refinement absorb в existing 1.10.0 description.
L10 Phase 1.10 4 cross-link pointers v4.7-v4.10 Collapse в один v4.13 summary callout: «Sales-app rendering implications — see Foundational §4.6 / §5.1 / §6.1 / §7.4 для specs».
L11 Phase 1.11 6 v4.4 placeholders Re-label объединённый «📌 Ratified buyer-flow decisions» pointing к plans/buyer-profile-and-presentation.md. Inline v4.7 (Preview-as-Buyer) — preserved в re-labelled callout. v4.12 — отдельный parking-lot (L1).
L12 Changelog One v4.13 entry в launch-plan-changelog.html поверх v4.12. Single block summarising sweep across all 8 phases.

Implementation Steps

A. Light treatment phases (sub-plan aware)

A1. Phase 1.2 — Re-label v4.3 + v4.4 callouts

Объединить v4.3 + v4.4 callouts (lines 1385-1406) в один re-labelled callout:

<div class="callout" style="...">
  <strong>📌 Ratified onboarding decisions (CONV-15 + CONV-17) — детали в sub-plan</strong>
  <p>Полная spec для Phase 1.2 живёт в <code>plans/onboarding-trial-mode.md</code> (currently stub, awaits /plan ratification). Decisions ratified: Quick Build Object Builder mode (3-step flow) · Slug picker при регистрации · Tier-aware dashboard layout (Free = Quick Build only) · Free Guest tier signup endpoint · Hybrid login surfaces · Personal invite flow · Organisation switcher UI · Auth methods (Google + email/password). Visual canon: <a href="../mockups/admin-quick-build-atelier-standalone.html">admin-quick-build-atelier-standalone.html</a> (per v4.5 CONV-21 Atelier override).</p>
  <p style="font-size:12px; color:var(--text-mid); font-style:italic;">v4.5 Atelier override (Object Builder = onboarding) — кодифицировано. v4.8 (PIN config conditional fields) — оставить отдельным callout либо absorb в 1.2.X task если есть.</p>
</div>

A2. Phase 1.3 — Re-label v4.4 callout

Заменить existing v4.4 callout (lines 1545-1562) на re-labelled summary:

<div class="callout">
  <strong>📌 Ratified permission-and-tenancy decisions (CONV-17) — детали в sub-plan + numbered tasks</strong>
  <p>Authoritative spec — <code>plans/permission-and-tenancy-model.md</code> (status: stub, awaits ratification). Numbered tasks 1.3.1-1.3.12 (см. ниже) реализуют ratified decisions: Entity model (Client / Organisation / Buyer split) · 5 ролей (Owner / Admin / Sales Manager / Content Editor / Sales Agent) · Hybrid login surfaces · S·1 stock allocation (Closed default + Open opt-in) · Scoped URL routing · Cross-entity invitations · Internal/External SA split (v4.7 CONV-24).</p>
  <p style="font-size:12px;">ADR placeholders: 0009 (Tenancy &amp; Permission Architecture), 0010 (Stock allocation strategy), 0005 update (Google + email/password).</p>
</div>

Inline v4.7 в task 1.3.2 — оставить, это уже absorbed.

A3. Phase 1.9 — Re-label v4.3 + v4.4 callouts

Объединить v4.3 (lines 2725-2734) + v4.4 (2736-2746) в один re-labelled callout:

<div class="callout">
  <strong>📌 Ratified legal multi-party + privacy decisions (CONV-15 + CONV-17) — детали в sub-plan</strong>
  <p>Полная spec — <code>plans/legal-multi-party-framework.md</code> (status: stub). Ratified additions to Phase 1.9: Permission delegation framework · Multi-party access agreement template · Data ownership matrix · Liability allocation · GDPR/ADGM right-to-erasure · Reverse invite legal framework · Buyer data export for KYC · Hosting region disclosure · Audit log retention notice. Phase 1.9 grows from 11 → 15 documents pending lawyer review.</p>
  <p style="font-size:12px;">Privacy schema jurisdiction-agnostic (Cyprus GDPR / ADGM 2021 / DIFC — все GDPR-aligned).</p>
</div>

A4. Phase 1.11 — Re-label v4.4 callout (preserve v4.12)

Заменить existing callout block (lines 3204-3217) на re-labelled summary, сохранить v4.12 parking-lot отдельным callout:

<div class="callout">
  <strong>📌 Ratified buyer-flow decisions (CONV-17 + CONV-24) — детали в sub-plan</strong>
  <p>Полная spec — <code>plans/buyer-profile-and-presentation.md</code> (status: stub, awaits /plan ratification). Ratified decisions for Phase 1.11.1-1.11.5: Buyer entity = passwordless per-presentation (Variant E2) · Email content composition (auto-summary + agent free-text) · Token expiry handling (90d, attribution preserved) · Buyer self-service actions (heart + Связаться со мной) · Forward email handling (multi-session OK + rate-limit) · NO dedicated shortlist page (Stage 2 if requested) · Buyer schema (email/name/phone/agent_user_id/token_hash/...). Plus Preview-as-Buyer (v4.7 CONV-24) — presentation preview surface для Sales Agent / Sales Manager.</p>
</div>

<div class="callout"><!-- v4.12 parking-lot, untouched -->
  <ul>
    <li><em>v4.12 (CONV-30 — parking lot для sub-plan):</em> ... [preserved verbatim]
  </ul>
</div>

B. Full Chunk 7 absorbing phases

B1. Phase 1.4 — Absorb 5 placeholders в numbered tasks 1.4.9..1.4.13

Удалить v4.3 callout (lines 1725-1731) + v4.4 callout (1733-1747). Добавить после existing last numbered task:

Заменить 4 inline <li><em>v4.7..v4.10:</em> ...</li> bullets в callout block (lines 1741-1744) на единый final bullet:

<li><em>v4.13 (CONV-30 sweep):</em> <strong>Operator surface implications from Wave 2 (§4.6 View-as-Agent / §5.1 PIN-protected / §6.1 status-flip audit / §6.2 channel analytics / §7 edge cases).</strong> Operator dashboard reads audit log entries и shows status / suspension / token state per Foundational specs. См. links: <a href="#fd-access">§4.6</a> / <a href="#fd-visibility-pin">§5.1</a> / <a href="#fd-buyer-status">§6.1</a> / <a href="#fd-buyer-channels">§6.2</a> / <a href="#fd-edges">§7</a>.</li>

B3. Phase 1.5 — Absorb 2 placeholders

Удалить v4.3 callout (lines 1962-1968).

B4. Phase 1.8 — Absorb 3 placeholders

Удалить v4.3 callout (lines 2553-2561). Добавить после existing last numbered task в 1.8:

Number IDs determined when reading phase content (after 1.8.last existing).

B5. Phase 1.10 — Absorb 9 placeholders в numbered tasks 1.10.8..1.10.16

Удалить v4.3 callout (lines 2960-2969) + v4.4 callout (2971-2986). Добавить после existing last numbered task в 1.10:

Заменить 4 inline <li><em>v4.7..v4.10:</em> ...</li> bullets в callout block (lines 2980-2983) на единый final bullet:

<li><em>v4.13 (CONV-30 sweep):</em> <strong>Sales-app rendering implications from Wave 2 (§4.6 View-as / §5.1 PIN gate routing / §6.1 verification form UI / §6.2 3-channel send / §7.4 routing edges).</strong> Sales-app middleware reads visibility / token / auth state и applies rendering per Foundational specs. См. links: <a href="#fd-access">§4.6</a> / <a href="#fd-visibility-pin">§5.1</a> / <a href="#fd-buyer-status">§6.1</a> / <a href="#fd-buyer-channels">§6.2</a> / <a href="#fd-edges">§7.4</a>.</li>

C. Changelog + workstream + preview sync

C1. Changelog v4.13 entry

Добавить в launch-plan-changelog.html поверх v4.12:

<div>
  <div>v4.13 — 2026-05-09 (CONV-30, Wave 2 Chunk 7.5)</div>
  <p>Phase callouts cleanup sweep across 8 фаз Stage 1. Hybrid approach: A — re-label sub-plan-pointer callouts (1.2 / 1.3 / 1.9 / 1.11); B — absorb placeholders в numbered tasks (1.4 / 1.5 / 1.8 / 1.10); C — collapse 4-bullet cross-link pointers v4.7-v4.10 в один summary v4.13 callout (1.4 + 1.10). Phase 1.11 v4.12 parking-lot нетронут.</p>
  <div>Удалено</div>
  <ul>
    <li>Phase 1.2: v4.3 + v4.4 callouts → 1 re-labelled sub-plan pointer</li>
    <li>Phase 1.3: v4.4 callout → 1 re-labelled sub-plan pointer</li>
    <li>Phase 1.4: v4.3 + v4.4 callouts → numbered tasks 1.4.9-1.4.13 + collapsed v4.13 cross-link summary</li>
    <li>Phase 1.5: v4.3 callout → numbered task 1.5.4 (AI file upload) + 1.5.Y merged into 1.5.1</li>
    <li>Phase 1.8: v4.3 callout → 3 numbered tasks (two-domain / DKIM / hosting cost)</li>
    <li>Phase 1.9: v4.3 + v4.4 callouts → 1 re-labelled sub-plan pointer</li>
    <li>Phase 1.10: v4.3 + v4.4 callouts → numbered tasks 1.10.8-1.10.16 + collapsed v4.13 cross-link summary</li>
    <li>Phase 1.11: v4.4 callout block restructured → 1 re-labelled sub-plan pointer + v4.12 parking-lot preserved separately</li>
  </ul>
</div>

C2. Workstream update

C3. Preview repo sync

Sync ~/code/offplan-online/preview/plan/launch-plan-stage-1.html + launch-plan-changelog.html. Commit + push.

Files to Create/Modify

Dependencies

Testing & Verification

Visual sanity check (open file in browser):

Cross-link sanity (grep):

grep -E '1\.[0-9]+\.[XYZ]\b|1\.[0-9]+\.[A-F][A-F]\b' docs/rendered/launch-plan-stage-1.html | grep -v changelog

Должен вернуть пусто (placeholder labels отсутствуют). Allowed exceptions: changelog history.

Numbered task continuity:

grep -oE 'task-id">1\.4\.[0-9]+' docs/rendered/launch-plan-stage-1.html | sort -u

Должен вернуть 1.4.1 .. 1.4.13 без gaps.

Same for 1.10:

grep -oE 'task-id">1\.10\.[0-9]+' docs/rendered/launch-plan-stage-1.html | sort -u

Должен вернуть 1.10.0 .. 1.10.16 без gaps.

Preview sync:

diff -q docs/rendered/launch-plan-stage-1.html ~/code/offplan-online/preview/plan/launch-plan-stage-1.html
diff -q docs/rendered/launch-plan-changelog.html ~/code/offplan-online/preview/plan/launch-plan-changelog.html

Должны быть identical.

Workstreams

Name Priority Depends On Tags Tasks
stage1-roman-integration P0 architecture, ux, domain, security A1-A4 + B1-B6 + C1-C3 (existing workstream — no new one needed)

Это продолжение existing workstream stage1-roman-integration (Wave 2 в самом её хвосте). Новый workstream НЕ создаётся.

Risks & Edge Cases

  1. Возможные duplicate'ы при absorbing — например, 1.5.Y (VV API audit) ≈ 1.5.1; 1.10.X (3 access modes) ≈ already covered by 1.7.12 + §5; 1.10.Y (login button) ≈ 1.10.0. Mitigate: при build read existing tasks first, merge instead of duplicate где applicable. Document merge decisions inline.
  2. Numbered task ID gaps — если existing tasks имеют непрерывную нумерацию 1.10.0-1.10.7, добавление 1.10.8-1.10.16 безопасно. Если есть skip'и (e.g., 1.10.0, 1.10.1, 1.10.5) — investigate before adding.
  3. Phase 1.2 v4.5 Atelier override — content live (active design canon, не historical). Mitigate: оставить v4.5 callout раздельно от объединённой ratified decisions callout, или встроить как separate paragraph внутри ratified callout.
  4. Phase 1.11 v4.12 parking-lot positioning — должен оставаться visually distinct от re-labelled callout. Mitigate: keep как separate callout block, не сливать.
  5. Phase 1.3 inline v4.7 в 1.3.2 description — small bullet про Internal/External SA split. Может остаться как inline note ИЛИ absorb в re-labelled callout. Lean: leave as inline note (already absorbed effectively).
  6. Build session size — если ~600 lines edits слишком много для одной сессии, split на B1+B2 (Phase 1.4) → A1-A4 (light treatment) → B3+B4 (Phases 1.5/1.8) → B5+B6 (Phase 1.10) → C1-C3. User said «разбей если нужно потом» — implicit split permission.
  7. Cross-link to changelog — после удаления callouts старые entries в changelog (v4.3/v4.4/v4.7/v4.8/v4.9/v4.10) ссылаются на phase-specific bullets которые исчезли. Mitigate: changelog НЕ редактируется (история). v4.13 entry просто notes сweep.

From Business Review

Skipped — Step 4.4 не применим: pure documentation refactor, no user-visible behaviour change, no customer-facing surface affected. Plan оперирует только над docs/rendered/launch-plan-stage-1.html + changelog + workstream + preview sync. Финальный план для customers / studios / sales agents не меняется в семантике (re-labelling preserves content).

From Learnings DB

Skipped — Notion query-data-source MCP returns 400 (invalid_request_url) consistently. Re-try at next session.

Evaluation

Step group Artefact 2-min check Agent self-check
A1-A4 (light treatment) 4 re-labelled callouts in phases 1.2 / 1.3 / 1.9 / 1.11 Open phase в browser, callout сжатый, content ratified, sub-plan link visible grep "Ratified" callouts present per phase
B1 (Phase 1.4 absorb) 5 new numbered tasks 1.4.9-1.4.13; old callouts gone Phase 1.4 reads numbered 1.4.1-1.4.13; suspension UI / GDPR erasure / etc. each have own task block grep task-id">1\.4\. returns 13 unique IDs
B2 (Phase 1.4 cross-link collapse) 1 v4.13 summary callout, 4 v4.7-v4.10 bullets gone Phase 1.4 callout = 1 bullet с links на §4.6/§5.1/§6.1/§6.2/§7 grep `v4\.7\ v4\.8\ v4\.9\ v4\.10` per phase 1.4 returns nothing
B3 (Phase 1.5 absorb) 1 new numbered task 1.5.4 (AI file upload); 1.5.Y merged Phase 1.5 reads clean grep 1\.5\.[XY] returns nothing
B4 (Phase 1.8 absorb) 3 new numbered tasks (two-domain / DKIM / hosting) Phase 1.8 reads clean grep 1\.8\.[XYZ] returns nothing
B5 (Phase 1.10 absorb) 9 new numbered tasks 1.10.8-1.10.16 Phase 1.10 reads numbered without placeholders grep task-id">1\.10\. returns 17 unique IDs (0-16)
B6 (Phase 1.10 cross-link collapse) 1 v4.13 summary callout Phase 1.10 callout = 1 bullet с links на §4.6/§5.1/§6.1/§6.2/§7.4 grep `v4\.7\ v4\.8\ v4\.9\ v4\.10` per phase 1.10 returns nothing
C1 (Changelog v4.13) New v4.13 entry block Changelog open, v4.13 visible поверх v4.12 grep v4\.13 — 2026-05-09 returns 1 hit
C2 (Workstream) Session Log entry + What's Next updated workstream file modified git diff показывает changes
C3 (Preview sync) Identical files в preview repo diff -q returns clean git status в preview shows ahead

Open Questions

  1. Numbered ID continuity для Phase 1.4 / 1.10 — будет verified при build. Если existing tasks имеют gaps, fall-through на numerically-next-available.
  2. Phase 1.10 1.10.X (3 access modes) — может быть полностью subsumed by Foundational §5 + Phase 1.7.12 (Public Visibility config UI). Если confirmed duplicate в build — absorb как note в 1.7.12 cross-ref instead of new task.
  3. v4.5 Atelier callout (Phase 1.2) — отдельно or merged. Lean: separate (active design canon, historic CONV-21).
  4. Phase 1.11 inline v4.7 (Preview-as-Buyer) — re-labelled callout content ИЛИ standalone note. Lean: include в re-labelled callout как preserved bullet.

Definition of NOT done (deferred):