Канонический роадмап переехал:
docs/planning/ROADMAP.md(английский, v3.0, снапшот §3 актуализирован). Этот файл — русская оригинальная редакция v2.4; НЕ обновляется и не владеет статусом.
Роль документа: цели, milestone-последовательность и GATE'ы. Канонические статусы фич и задач:
docs/planning/FEATURES.mdиdocs/planning/BACKLOG.md. Dependency waves и правила взятия задач:docs/planning/EXECUTION_ROADMAP.md. Статусы/checklist'ы в roadmap/spec/review-файлах не являются источником текущего состояния и не должны обновляться параллельно с planning hub.
Версия: 2.4 · Дата: 2026-08-22 · Статус: ACTIVE Заменяет
ROADMAP.md(фазы 0–6, sprints A–G — завершены, см. §8 Карта архива).Продукт: автономный агент ведения соцсетей (X / Threads / Facebook + синдикация), генерирующий, публикующий и продвигающий контент. Главная метрика успеха — атрибутируемые лиды в продукт my_zodiac_ai, а не «посты опубликованы».
| Метка | Значение |
|---|---|
| Z1–Z6 | Зоны ответственности (§2). Каждая задача привязана к одной зоне |
| M0…M6 | Фазы роадмапа (§4). Фазы частично перекрываются |
| GATE | Измеримый критерий закрытия фазы. Пока GATE не пройден, следующая фаза не стартует |
| R1…R8 | Пункты рефактор-реестра (§6) |
| P1/P2/P3 | Приоритет внутри фазы (must / should / nice-to-have) |
| (NN) | Ссылка на proposal из docs/roadmap/01..14 или на другой док; status по feature ID смотрите в docs/planning/FEATURES.md |
Соцсети → клики → квиз-воронка quiz.my-zodiac-ai.com → подписки/оплата.
Вся атрибуция живёт в my_zodiac_ai/back (модуль attribution-links, Wave #213):
click → quiz session → snapshot → подписка, со сквозным stitch-key quizSessionId
и записью конверсии (convertedAt/revenue/subscriptionId) обратно в клик.
| KPI | Как меряем | Базлайн |
|---|---|---|
| Посты с трекабельной ссылкой | % постов с ctaUrl != null |
0% (промпты запрещают URL) |
| CTR ссылок | клики / показы по данным funnel-отчётов | — |
| Лиды в неделю | AttributionClick → signup по campaign=social-agent |
0 |
| Конверсии / выручка | GET :id/funnel → revenue по линкам агента |
0 |
| Reply-assisted результат | direct/assisted/incremental отчёты разделены; conversions/revenue per approved reply (11) | — |
| KPI | Как меряем |
|---|---|
| Рост подписчиков | дельта по аккаунтам за 30д (PostMetrics + профили) |
| Impressions / engagement rate | PostMetrics (likes/comments/shares/impressions), скрапинг уже есть |
| Стабильность присутствия | % дней с ≥1 публикацией на сеть (orchestrator health) |
| Качество разговоров | approval/edit rate suggestions, author reply rate, повторные содержательные interactions (08) |
| Спрос из разговоров | validated demand clusters → topics/FAQ/product insight и matched outcome delta (10) |
| Партнёрства с creators | reciprocal relationships, accepted/completed collaborations, attributed outcomes (13) |
| KPI | Как меряем |
|---|---|
| Uptime автономного цикла | ≥99% за 30 дней (watchdog + self-healing) |
| Доля действий без оператора | orchestrator actions / ручные вмешательства |
| Стоимость на пост | токен-телеметрия Langfuse, $/пост, тренд вниз |
| Качество контента | judgeScores (anti_ai_tone ≥0.7) + корреляция с решениями оператора |
| Стабильность persona | persona fidelity/distinctness, contradiction rate, unsupported-claim rate (08) |
| AI release quality | PASS/FAIL/ERROR gates, critical regression count, drift/rollback (09) |
| Policy/reputation health | stale policy blocks, reputation state, time-to-contain/recover (12) |
Работа разбита на 6 зон. Зона = «кто владеет проблемой», а не директория кода.
Автономный цикл OBSERVE→DECIDE→ACT как единственный путь выполнения.
13 action handlers, adaptive sleep, watchdog (*/5 * * * *). Завершение work streams
из .forge/orchestrator/TASKS.md (WS-1..WS-8), self-healing (06), GA-переключение
(ORCHESTRATOR_ENABLED=true default, 11 кронов не регистрируются), удаление dual-path.
Platform Policy & Reputation Control Plane (12) ограничивает execution capability и может
идемпотентно понизить/поставить на паузу account/topic/action scope.
Владелец GATE'а: uptime ≥99%.
Промпты и качество генерации: research → hooks → draft → critique → refine → judge (Langfuse Prompt Management, 7 промптов). CTA-политика (снятие запрета URL), versioned EditorialPersona + AuthorContext + memory/RAG (04,08), fact-checking пайплайн (дифференциатор — никто из конкурентов Postiz/Mixpost/Typefully/Hypefury/Buffer/Publer/Taplio этого не делает), persona/first-person/sensitive-domain gates, hook bank → few-shot обратная связь. Conversation Intelligence/Demand Radar (10), Cross-Account Portfolio Planner (08) и read-only Soulwise Editorial Data Bridge (14) формируют source→opportunity→assignment контур.
Мультиаккаунтность (01): per-account выбор вместо findByNetwork() → первый активный;
изоляция сессий/браузерных контекстов/лимитов/warmup per account. Per-account настройки (02).
Persona assignment и platform execution policy для conversational engagement (08).
Синдикация end-to-end (article-graph: Dev.to/Hashnode/LinkedIn long-form + реальный
verifyCanonical()). Валидация новых сетей (FB battle-test, Bluesky/Mastodon/Telegram).
Капабилити постеров: postWithReplyLink() для X/Threads. Image gen (03).
Масштабирование публикаций на N ресурсов — PublisherRegistry + fan-out, правило
выбора транспорта (free API → API, иначе stealth browser) и таблица кандидатов: §9.
Интеграционная зона. Своя инфраструктура ссылок НЕ строится — редиректы, клики,
конверсии и revenue живут в my_zodiac_ai/back (modules/business/attribution-links).
Поток атрибуции:
Генерация поста
│ ZodiacLinkClient.createTrackableLink({network, campaign, postId})
│ POST {ZODIAC_API_URL}/internal/attribution-links (X-Internal-Token)
▼
my_zodiac_ai/back · attribution-links
│ slug → shortUrl https://quiz.my-zodiac-ai.com/r/{slug}
▼
Post.ctaUrl = shortUrl → постер публикует (X/Threads: линк в первом ответе)
▼
клик → /r/[slug] → resolveForRedirect() → AttributionClick (geo/device/ipHash)
→ 302 на destinationUrl + utm_* → квиз → signup → payment → конверсия пишется в клик
▼
дашборд social-poster ◄── GET /internal/attribution-links/:id/funnel (клики→конверсии→revenue)
Ответственности social-poster:
ILinkPort:createTrackableLink()/getFunnelReport()/buildDirectUtmUrl()(fallback)- Маппинг
Post ↔ attributionLinkId/slugв Prisma - Fallback при недоступности zodiac: прямой UTM-линк (ядро — оживлённый
source-url.util.ts) - Дашборд: агрегация funnel-отчётов по кампаниям/сетям
Контракт zodiac-back (уже реализован, Wave #213):
AttributionLink{slug, platform(=utm_source), medium(default social), campaign, content, refTag, customFields(post_id...), destinationUrl(allowlist *.my-zodiac-ai.com)}
AttributionClick(per-click, geo/os/browser, stitch-keyquizSessionId, TTL 30д, конверсия-writeback). Admin API/api/v2/admin/attribution-linksсуществует; для сервис-сервис доступа добавляется тонкий/internal/attribution-linksпод существующим паттерномMAIN_BACKEND_INTERNAL_TOKEN.
Env: ZODIAC_API_URL, ZODIAC_INTERNAL_TOKEN,
ZODIAC_DEFAULT_DESTINATION_URL (default https://quiz.my-zodiac-ai.com).
Reply-first measurement расширяется privacy-safe account/persona/time cohort слоем (11): direct attribution остаётся canonical в zodiac, assisted association и incremental estimate хранятся/показываются как разные типы доказательств.
Дашборды (Next.js UI): conversion dashboard v1, judge calibration, best-time-to-post.
A/B на масштабе: PostVariant (инфраструктура описана в docs/features/ab-testing-infrastructure.md)
→ метрики → авто-выбор победителя → фидбек в hook bank. Persona/mode experiments и
conversation outcomes хранят отдельные normalized assignments (08), не используют
PostVariant.label как persona ID. Posting windows из реальных PostMetrics.
Demand clusters/outcomes (10), assisted/incremental reporting (11) и Creator Relationship CRM
(13) питают learning loop, но не могут автоматически ослаблять safety/policy gates.
Tech Radar (§5): апгрейды LangGraph 0.2→1.x, Zod 3→4, аудит playwright-core patch sites. Рефактор-реестр (§6). Консолидация planning-доков (§8). Token cost optimization (05). ResilienceService скелет (06). AI Change Release Gate (09) и policy-drift registry (12) владеют pre-release и external-policy evidence.
Что работает:
- Генерация: LangGraph-граф research→hooks→draft→critique→refine→judge→visual_concept;
чекпоинты Redis, resume после падений; LLM-as-a-Judge (anti_ai_tone / hook_strength /
factual_accuracy / character_limit) в
judgeScores - Промпты в Langfuse Prompt Management (7 шт., версионирование, circuit breaker, inline fallbacks)
- Постинг: X / Threads / Facebook через Camoufox (patched playwright-core), verifyPosted(), resource blocking в read-only контекстах, memory prefs
- Orchestrator: 13 action handlers, HardRules H1-H10 → LLM → Guardrails G1-G7, heartbeat,
watchdog
*/5; кроны отключаются приORCHESTRATOR_ENABLED=true(dynamic registration) - Метрики: PostMetrics (likes/comments/shares/impressions), trending scraper, hook performance bank
- Наблюдаемость: Sentry + Langfuse (traces, judgeScores в llmMetadata)
Чего нет (и почему это главный пробел):
- Ноль исходящих ссылок: промпты запрещают URL (fallback-prompts.ts, generation.service.ts);
source-url.util.ts— мёртвый код (P10);CanonicalUrlService— только POSSE SEO,verifyCanonical()заглушка ⇒ лиды не измеряются вообще - Мультиаккаунт: схема готова (
SocialAccount @@unique(network,handle)), но выбор всегда «первый активный» — нет изоляции лимитов/сессий/warmup - Engagement (~1300 строк) заморожен за
ENGAGEMENT_ENABLED; Replies заREPLIES_ENABLED(dialogue.graph.ts написан, не обкатан) - EditorialPersona, revision/assignment, durable persona/interaction memory и suggestion queue отсутствуют; текущий comment-first может превратить non-comment action в комментарий без отдельного value/policy gate (08)
- Нет blocking AI release manifest/dataset gate (09), demand clusters (10), reply-assisted/incrementality measurement (11), policy/reputation control plane (12), creator relationship workflow (13) и typed Soulwise editorial feed (14)
- Dual-path: 11 кронов ИЛИ orchestrator — переключение не выполнено до конца
- Зависимости отстают: LangGraph ^0.2.0 (актуален 1.x), zod ^3.24 (актуален 4.x)
Стратегический контекст:
- Официальный X API с февраля 2026: ~$0.20 за пост со ссылкой ⇒ браузерная стратегия подтверждена, API — в Hold
- Конкуренты не закрывают: fact-checking, автономный оркестратор с LLM-решениями, сквозную атрибуцию до оплаты — наши дифференциаторы
| # | Зона | Задача | P |
|---|---|---|---|
| M0.1 | Z4 | Prisma-миграция: Post += ctaUrl String?, attributionLinkId String?, attributionSlug String?. LeadEvent-модель не нужна — клики/конверсии в zodiac |
P1 |
| M0.2 | Z4 | ILinkPort (domain port): createTrackableLink({network, campaign, postId}), getFunnelReport(linkId, {from,to}), buildDirectUtmUrl(url, {source, campaign, content}). ADR с контрактом internal-API |
P1 |
| M0.3 | Z4* | Cross-project: внутренний контроллер /internal/attribution-links в my_zodiac_ai/back под MAIN_BACKEND_INTERNAL_TOKEN (create + funnel-report; переиспользует AttributionLinksService). Deploy zodiac-back |
P1 |
| M0.4 | Z6 | Аудит зависимостей → отчёт Tech Radar: план LangGraph 0.2→1.x, Zod 3→4, проверка patch-sites patch-playwright.js |
P1 |
| M0.5 | Z6 | Консолидация planning-доков: шапки «АРХИВ → см. ROADMAP_V2.md» в ROADMAP.md, FEATURE_WISHLIST.md, docs/roadmap/README.md | P2 |
| M0.6 | Z4 | source-url.util.ts оживить как ядро fallback-UTM-билдера (закрывает R1) |
P2 |
| M0.7 | Z2/Z5/Z6 | AI Change Release Gate (09): failure taxonomy, versioned Langfuse datasets, deterministic/LLM/retrieval evaluators, side-effect-free runner, immutable release manifest, trusted GitHub gate; FAIL/ERROR blocks AI promotion | P1 |
| M0.8 | Z3/Z6 | Platform Policy Registry foundation (12): primary evidence/version/expiry, most-restrictive compiler, runtime authorizer, downgrade-only source drift | P1 |
GATE M0: миграция применена и протестирована; ADR internal-API согласован и endpoint задеплоен в zodiac-back; tech-radar отчёт записан; старые доки помечены архивом; seeded AI regression блокируется без реального side effect; evaluator ERROR не становится PASS; каждый enabled side-effect action имеет unexpired evidence-backed compiled policy.
| # | Зона | Задача | P |
|---|---|---|---|
| M1.1 | Z3 | Multi-account core (01): per-account selection вместо «первого активного»; изоляция сессий/контекстов браузера/rate limits/warmup per account; WorldState orchestrator per-account | P1 |
| M1.2 | Z3 | Per-account settings (02): AccountSettings schema + resolver + UI | P2 |
| M1.3 | Z2/Z3 | EditorialPersona v1 (04,08): immutable persona revisions, account assignment, AuthorContext, safe prompt variables, account-specific graph invocation и normalized trace fields; Langfuse labels остаются для экспериментов, а не для каждого аккаунта | P1 |
| M1.4 | Z3 | Синдикация end-to-end: article-graph outline→draft→publish (Dev.to/Hashnode/LinkedIn long-form); реальная verifyCanonical() (закрывает R7) |
P2 |
| M1.5 | Z6 | Self-healing фаза 1 (06): ResilienceService скелет, health levels | P2 |
| M1.6 | Z2/Z3 | Cross-Account Portfolio Planner (08): EditorialOpportunity/Assignment, thesis hash/saturation, hard persona/policy/portfolio constraints, explainable account+action+angle+mode decision | P1 |
GATE M1-M2: 2 аккаунта одной сети работают изолированно (постинг, сессии, лимиты); статья публикуется end-to-end на Dev.to с canonical-верификацией; каждый новый Post сохраняет immutable persona revision + voice mode, а парный eval различает две persona; unsupported first-person claims блокируются; planner не назначает duplicate/contradictory thesis двум аккаунтам и сохраняет explainable constraint/score trace.
| # | Зона | Задача | P |
|---|---|---|---|
| M2.1 | Z4 | ZodiacLinkClient (adapter → ILinkPort): создание линка перед постингом — platform={сеть}, medium=social, campaign={категория/месяц}, customFields={post_id}; destination = ZODIAC_DEFAULT_DESTINATION_URL; сохранение shortUrl в Post.ctaUrl. Graceful degradation: zodiac недоступен → buildDirectUtmUrl() (M0.6), постинг не блокируется. Circuit breaker + timeout |
P1 |
| M2.2 | Z2 | CTA-политика промптов: снять безусловный запрет URL; per-network политика (X: чистый текст + ссылка в первом ответе; Threads/FB: ссылка в посте допустима); обновить draft/judge промпты в Langfuse | P1 |
| M2.3 | Z3 | postWithReplyLink(): капабилити постера X/Threads — пост + немедленный первый ответ со ссылкой |
P1 |
| M2.4 | Z5 | Conversion dashboard v1: клики→конверсии→revenue по постам/кампаниям/сетям (агрегация funnel-отчётов через client); лента последних кликов | P2 |
| M2.5 | Z4 | Разморозка Replies: soak dialogue.graph; автоответ только на вопросы (question classifier) + safety classifier; эскалация оператору; rate limits на ответы | P2 |
| M2.6 | Z2/Z3/Z5 | Conversational engagement pilot (08): закрыть R4 ports-refactor, deterministic value/policy gate, bounded thread context, persisted suggestion queue + operator review; Threads=HUMAN_APPROVAL_REQUIRED, X outbound=SUGGEST_ONLY; no fabricated experience or generic fallback replies |
P1 |
| M2.7 | Z2/Z5 | Conversation Intelligence & Demand Radar pilot (10): minimized public signals, typed extraction, reviewed clusters, transparent demand score, cluster→Topic/FAQ/product-insight proposals | P2 |
| M2.8 | Z4/Z5 | Reply-to-Revenue v1 (11): stable account/persona bio links, ConversationActivityWindow, direct versus assisted association dashboard, unknown/late data quality | P1 |
| M2.9 | Z2/Z4* | Cross-project: Soulwise Editorial Feed v1 (14): strict PUBLIC_FACT envelope, today-sky adapter, internal-token cursor/ETag API, dedicated SPA client/adapter; no personalized endpoints | P1 |
GATE M2-M3: первый пост с трекабельной ссылкой опубликован; клик виден в dashboard
(funnel-report отвечает ненулевыми данными); replies ответил на ≥10 реальных вопросов
без инцидентов; fallback-путь проверен (zodiac выключен → пост вышел с прямым UTM);
conversation pilot не позволяет обойти execution policy, skip остаётся terminal, X не имеет
пути unsolicited auto-reply, а два persona-голоса различимы в held-out reply eval.
Demand Radar хранит только privacy-eligible reviewed clusters; direct и assisted attribution
разделены; Editorial Feed producer/consumer contract блокирует forbidden user-level fields.
| # | Зона | Задача | P |
|---|---|---|---|
| M3.1 | Z1 | Завершить оставшиеся WS из .forge/orchestrator/TASKS.md |
P1 |
| M3.2 | Z1 | Self-healing GA (06): ResilienceService, health levels, circuit breakers, auto-recovery playbook | P1 |
| M3.3 | Z1 | Soak test 24–48h staging с реальными сессиями; watchdog проверен (kill → restart) | P1 |
| M3.4 | Z1 | Переключение: ORCHESTRATOR_ENABLED=true default; dual-path cron удалён (закрывает R3) |
P1 |
| M3.5 | Z5 | Posting windows из реальных метрик (posting-window.service.ts на данных PostMetrics) | P2 |
| M3.6 | Z1/Z3/Z6 | Reputation Monitor (12): technical/public/behavioral signals, HEALTHY→WATCH→LIMITED→PAUSED→INCIDENT, multi-signal rules, scoped FlowControl auto-pause and staged recovery | P1 |
| M3.7 | Z2/Z6 | AI gate shadow/nightly drift (09): fixed judge/safety/retrieval slices, production prompt/model/manifest drift, recording side-effect ports, rollback-capable canary | P1 |
GATE M3-M4: 30 дней uptime ≥99%; ноль пропущенных критических действий (health check, reconcile); кроны не регистрируются в проде; dual-path код удалён; seeded reputation incidents дают expected scoped state/effects, sentiment-only не паузит аккаунт, nightly gate замечает seeded drift, canary/rollback не создаёт duplicate side effects.
| # | Зона | Задача | P |
|---|---|---|---|
| M4.1 | Z3 | Валидация сетей: Facebook battle-test, Bluesky/Mastodon/Telegram live-валидация, LinkedIn short-form | P1 |
| M4.2 | Z3 | Image gen (03): IImagePort, Gemini Nano Banana adapter, per-account daily limits, upload в постеры, quota/cost tracking | P2 |
| M4.3 | Z2 | Fact-checking пайплайн v1: claim extraction из draft → верификация → flag/refuse (дифференциатор) | P2 |
| M4.4 | Z5 | Best-time-to-post: окна из накопленных метрик per network/account | P2 |
| M4.5 | Z4 | Bio-link страница v1 (опционально; ссылки теперь идут напрямую в квиз — ценность пересмотреть) | P3 |
| M4.6 | Z2/Z5 | Durable persona memory + grounding (08): reviewed KnowledgeEvidence, memory candidates, contradiction/expiry/purge lifecycle, Postgres FTS + pgvector hybrid retrieval behind ports, retrieval/claim trace | P2 |
| M4.7 | Z5 | Creator Relationship CRM (13): public network identity, evidence-backed relationship stage, cooldown/DO_NOT_ENGAGE, human-reviewed collaboration opportunities; no automated outreach | P2 |
| M4.8 | Z2/Z4* | Soulwise Editorial Feed expansion (14): curated knowledge/product updates, review/validity/tombstones, KnowledgeEvidence mapping and retraction re-index; AGGREGATE_INSIGHT остаётся HOLD | P2 |
GATE M4-M5: ≥4 сети в бою стабильно; ≥1 сеть с картинками; fact-check блокирует фактические ошибки на тестовой выборке; held-out retrieval/evidence thresholds пройдены, stale/contradictory evidence не инжектится, privacy purge удаляет lexical/vector retrieval. Creator CRM не содержит private/sensitive enrichment и не имеет auto-outreach; Editorial Feed tombstone/expiry удаляет eligibility/cache/retrieval и cross-project rollback проверен.
| # | Зона | Задача | P |
|---|---|---|---|
| M5.1 | Z5 | A/B на масштабе: PostVariant метрики → автоматический выбор победителя → фидбек в hook bank | P1 |
| M5.2 | Z5 | Judge calibration UI: judgeScores ↔ решения оператора, корреляция ≥0.7, правки judge-промпта в Langfuse | P2 |
| M5.3 | Z2 | Hook bank → генерация: топ-хуки как few-shot в hook_generation промпте | P2 |
| M5.4 | Z6 | Token cost optimization (05): semantic cache, prompt compression, cost router, budget ledger | P2 |
| M5.5 | Z2/Z3/Z5 | Conversational autonomy go/no-go (08) после M2.6 pilot: калибровка persona/safety judges, normalized persona/mode experiments, approved-edit learning; Threads promotion только с policy/API evidence, X остаётся suggest-only без explicit approval | P2 |
| M5.6 | Z6 | Закрытие P1-пунктов рефактор-реестра | P2 |
| M5.7 | Z2/Z5/Z6 | Fine-tuning assessment (08): prompt+few-shot+RAG baseline, approved dataset, quality/cost comparison, shared persona-conditioned renderer ADR или зафиксированный NO-GO | P3 |
| M5.8 | Z2/Z4/Z5 | Conversation learning evidence (10,11,13): demand-derived matched outcomes, pre-registered reply incrementality report, collaboration direct/assisted outcomes; insufficient sample returns NO-CONCLUSION | P2 |
GATE M5-M6: цикл A/B замкнут (вариант→метрика→победитель→промпт); корреляция judge↔человек измерена и ≥0.7; persona learning reproducible/versioned/reversible и не ухудшает truth/safety; стоимость/approved output снижена или причина задокументирована; execution-mode и fine-tuning решения имеют отдельные evidence-backed go/no-go записи; assisted association не выдаётся за causal lift, incrementality/creator/demand reports возвращают uncertainty либо NO-CONCLUSION и не продвигают strategy автоматически.
| Кольцо | Технологии |
|---|---|
| Adopt | Structured outputs (Zod-схемы во всех LLM-вызовах где возможно); семантический LLM-кэш; Langfuse versioned datasets/experiments + blocking AI release manifest (09); evidence-backed most-restrictive action policy (12) |
| Trial | LangGraph 0.2→1.x (сильно отстаём; assessment в M0.4, миграция — отдельная задача после GA); Zod 3→4; MCP-обёртка над SPA как инструмент для внешних агентов |
| Assess | Deep Agents/subagents для декомпозиции генерации; computer-use модели vs селекторы Camoufox (соотношение риск/выгода сомнительно — антидетект важнее); официальные API там где дёшево (Telegram уже API) |
| Hold | Новые сети сверх условий входа из §9 (одна платформа за итерацию, soak ≥2 недель); официальный X API ($0.20/пост со ссылкой с февраля 2026 — браузерная стратегия подтверждена правилом транспорта §9); multi-tenant SaaS/RBAC/биллинг; собственная ссылочная инфраструктура (redirects/slugs/click-tracking — живёт в my_zodiac_ai/back) |
Правило: переход кольца Adopt←Trial только через ADR с soak-периодом ≥2 недель.
Источник: docs/refactor/phase-1..7 + аудит августа 2026.
| ID | P | Что | Когда |
|---|---|---|---|
| R1 | P1 | source-url.util.ts (мёртвый код) → оживить как ядро fallback-UTM-билдера ILinkPort |
M0.6 |
| R2 | P1 | Унификация импортов: .js-расширения (orchestrator, ESM) vs без расширений (остальное, CJS-стиль). Зафиксировать конвенцию в AGENTS.md; приводить файлы к стилю при касании |
постоянно |
| R3 | P1 | Dual-path cron/orchestrator: удалить cron-ветку после GA | M3.4 |
| R4 | P1 | Engagement frozen code (~1300 строк): разделить candidate scoring, decision, suggestion, execution и recording за ports ДО conversational pilot; comment budget не может создавать действие | M2.6 |
| R5 | P2 | process.env прямые чтения: намеренные оставить задокументированными (AGENTS.md — static contexts/module loaders), остальные → ConfigService |
постоянно |
| R6 | P2 | Planning docs consolidation: архивные шапки | M0.5 |
| R7 | P2 | CanonicalUrlService.verifyCanonical() заглушка → реальная проверка |
M1.4 |
| R8 | P3 | UI component/view тесты (P2 из старого ROADMAP.md) | backlog |
- Собственная ссылочная инфраструктура — redirect endpoints, шортенер, модель кликов.
Всё это уже есть в
my_zodiac_ai/back(attribution-links) и развивается там - Reddit / Quora / Substack / RU-платформы без API — до выполнения условий входа из §9 (бан-риск / репутационный риск)
- Официальный X API для постинга — экономика не сходится ($0.20/пост со ссылкой)
- Unsolicited automated replies и keyword-triggered comment spam; X outbound replies остаются
SUGGEST_ONLYбез explicit platform approval, Threads — approval-required до отдельного go/no-go (08) - Выдача synthetic editorial persona за реального человека и fabricated lived experience (08)
- Отдельный vector DB и per-account fine-tuned models в первом persona-релизе (08)
- User-level identity stitching social→quiz и assisted association, названная causal attribution (11)
- Автоматическая policy promotion, sentiment-only autopause и попытки обходить enforcement (12)
- Automated creator DMs/outreach, private contact enrichment и sensitive/psychographic profiling (13)
- Экспорт Soulwise birth/cycle/couple/chat/personalized data; AGGREGATE_INSIGHT до отдельного privacy ADR (14)
- Multi-tenant SaaS, RBAC для внешних пользователей, биллинг
- Видео-генерация
- Отдельный shortener-домен (короткие ссылки живут на домене квиза zodiac)
| Документ | Статус | Судьба |
|---|---|---|
ROADMAP.md |
АРХИВ | Фазы 0–6 и sprints A–G завершены; шапка-указатель на этот файл (M0.5) |
FEATURE_WISHLIST.md |
АРХИВ | F1-F22 разошлись: F13/F19/F20/F21 done; F2/F10/F22 backend done; F8 инфраструктура есть (PostVariant); F1/F4 → Z5/M5; F6/F7 → Z5/M4-M5; F11 → Z3/M4 |
docs/roadmap/01..14 |
СПЕЦИФИКАЦИИ | Описывают intent/design; feature/task status живёт только в docs/planning/ |
.forge/orchestrator/MASTER-PLAN.md + TASKS.md |
LEGACY детализация Z1 | Сверяется через ORCH-001/ORCH-101 в planning hub; не владеет глобальным статусом |
docs/refactor/phase-1..7 |
Источник | Перенесён в §6 (R1-R8) |
CONSTITUTION.md §16 |
Требования/история | Не владеет статусом; актуальный feature register — docs/planning/FEATURES.md |
AGENTS.md / CLAUDE.md |
Актуальны | Операционные конвенции; дополнить конвенцией импортов (R2) и Z4-env |
Бесплатный официальный API есть → используем API. Платный или отсутствует → stealth browser (Camoufox).
Транспорт фиксируется в capability-манифесте платформы; поведения различаются, контракт — общий.
| API-publisher | StealthBrowser-publisher | |
|---|---|---|
| Скорость поста | секунды | минуты (human-like pacing) |
| Параллелизм | свободный | ограничен пулом браузеров |
| Бан-риск | нет (официальный канал) | управляемый (warmup, лимиты, отпечатки) |
| Хрупкость | версии API | селекторы/DOM |
| Стоимость | $0 | браузерная инфраструктура |
GeneratedPost (выход графа, уже с ctaUrl из Z4)
▼
PublisherRegistry ─► capability manifest per platform
│ {transport: api|browser, maxChars, media,
│ ctaPolicy, replyLinkSupport, rateLimits}
▼
PublishFanout (BullMQ fan-out, job = platform × account)
├── api.publisher Dev.to, Hashnode, Medium, Telegram, Bluesky…
└── browser.publisher X, Threads, FB, Quora… (общий Camoufox pool)
▼
verifyPosted() → PostMetrics scraper → funnel-отчёты zodiac → дашборд
Требования к fan-out (ничего не блокируется):
- Изоляция: queue-per-platform, timeout per job — падение одной платформы не задерживает остальные
- Circuit breaker per platform: 3 неудачи подряд → cooldown 30 мин → алерт оператору; платформа пропускает цикл, остальные работают
- Логирование каждой попытки:
{platform, accountId, attempt, outcome, latencyMs, screenshotRef}(скриншот — для браузерного пути); корреляция с Langfuse trace runId; Sentry для crash-level - Graceful degradation матрица: zodiac недоступен → прямой UTM (M2.1); платформа недоступна → skip + отчёт в дашборд; сессия истекла → relogin flow → эскалация оператору
- Наблюдаемость: success-rate per platform за неделю на дашборде Z5; алерт при деградации любой платформы ниже порога
| Платформа | Транспорт по правилу | Статус | Условие входа |
|---|---|---|---|
| X | browser (Basic $200+/мес, ~$0.20/пост со ссылкой) | в бою | — |
| Threads | browser сейчас; официальный Threads API бесплатен (Meta app review, привязка к IG professional) → миграция на API по правилу | в бою; assess миграции | после GA M3-M4 |
| browser для профиля; Graph API бесплатен для Pages → если ведём Page, переход на API | в бою; решение | при мультиаккаунте M1-M2 | |
| Dev.to | API (free) | M1.4 | — |
| Hashnode | GraphQL API (free) | M1.4 | — |
| API (free; w_member_social, app review) — articles M1.4, short-form M4.1 | в плане | — | |
| Medium | API (free, integration token) | parking | после GATE M1-M2, расширение article-graph |
| Telegram (канал) | Bot API (free) | M4.1 | — |
| Bluesky | AT Protocol API (free) | M4.1 | — |
| Mastodon | REST API (free) | M4.1 | — |
| Tumblr | API (free) | parking | P3 |
| WordPress / Ghost / Blogger | API (free) | parking | P3 — свой SEO-хаб; решить после лид-метрик M2-M3 |
| VK | API (free) | parking | P3, RU-аудитория |
| Content Publishing API (free; Business-аккаунт, только фото/видео) | parking | после image gen M4.2 | |
| API v5 (free; визуальный контент) | parking | после image gen M4.2 | |
| API условно-бесплатный (rate limits; коммерческое использование — платное соглашение); модерация сабреддитов строже технических банов | Hold | ADR после GA M3-M4 — риск репутационный, не технический | |
| Quora | API нет → browser | Hold | высокий бан-риск; вернуться после GA |
| Substack | официального API нет → browser-assess | Hold | ценность/усилия сомнительны |
| Habr / VC.ru / Дзен | стабильного API нет → browser-assess | Hold | RU-контур, если «зайдёт» VK |
Правило входа: не более одной новой платформы за итерацию; soak ≥2 недель до добавления следующей. Одновременная нагрузка ограничена пулом браузеров и per-account лимитами (M1.1). API-платформы масштабируются свободнее — приоритет отдавать им.
| Дата | Версия | Изменения |
|---|---|---|
| 2026-08-22 | 2.0 | Первичная редакция: цели лидогенерации, зоны Z1-Z6, фазы M0-M6, интеграция атрибуции с my_zodiac_ai/back (internal-token, destination = quiz funnel, fallback = прямой UTM), Tech Radar, рефактор-реестр, архивация ROADMAP.md / FEATURE_WISHLIST.md |
| 2026-08-22 | 2.1 | §9 Parking lot: правило выбора транспорта (free API → API, иначе stealth browser), архитектура fan-out публикации на N ресурсов (изоляция, circuit breaker per platform, логирование, graceful degradation), таблица кандидатов с условиями входа |
| 2026-08-22 | 2.2 | Proposal (08): versioned EditorialPersona, AuthorContext, Threads/X conversational suggestion policy, перенос R4 в M2.6, durable persona memory/RAG в M4.6, persona learning и fine-tuning go/no-go в M5–M6 |
| 2026-08-22 | 2.3 | Proposals (09–14): blocking AI release gate, Demand Radar, direct/assisted/incremental reply attribution, cross-account portfolio planning, platform-policy/reputation control plane, creator relationship CRM и read-only Soulwise Editorial Data Bridge |
| 2026-08-22 | 2.4 | Canonical execution roadmap: Wave 0–6 dependency order, current work-intake queue, WIP/file-ownership rules, task IDs for missing milestone slices и evidence-first handoff |