docs(docs): plan revenue-first launch (initiative 0010 + roast audit)#1673
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
📝 WalkthroughWalkthroughAdds documentation: a detailed revenue-and-marketing audit and a multi-phase "revenue-first" initiative, and registers the initiative in the initiatives README to guide Stripe-based billing, migrations, paywall, onboarding pivot, and a public landing/metrics endpoint. ChangesRevenue-first strategy (audit → initiative → README)
Sequence Diagram(s)(Skipped — changes are documentation-only and do not introduce executable control-flow in this diff.) Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Possibly related PRs
Suggested labels
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Review rate limit: 0/10 reviews remaining, refill in 59 minutes and 36 seconds. Comment |
There was a problem hiding this comment.
Actionable comments posted: 4
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@docs/audits/2026-05-04-revenue-and-marketing-roast.md`:
- Around line 4-7: Видалити порожній рядок всередині blockquote, щоб блок був
суцільним: у фрагменті з рядками, що містять "**Status:** Active" та "**Скоуп:**
маркетинг · монетизація · цінність продукту · потенціал розвитку.", прибрати
пустий рядок між ними і переконатися, що кожен рядок blockquote починається з
символу ">" (наприклад: "> **Status:** Active" і "> **Скоуп:** ...") без жодних
порожніх рядків посередині, щоб уникнути MD028.
In `@docs/initiatives/0010-revenue-first-launch.md`:
- Line 314: Add a language identifier to the unlabeled fenced code block (the
triple-backtick block with no language) by changing its opening fence from ```
to ```text so the block is recognized as text and the MD040 lint warning is
resolved.
- Line 4: The lifecycle Status marker in this document uses an invalid value;
update the markdown marker `> **Status:**` so it contains exactly one of the
allowed enum values (Active | Scaffolded | Deprecated | Archived) — e.g.,
replace `Proposed (...)` with `Scaffolded` — and move any explanatory text that
was inside the marker into a normal paragraph below the freshness block. Ensure
the `> **Status:**` line matches the required format for docs/**/*.md and leave
the detailed explanation as plain text beneath it.
In `@docs/initiatives/README.md`:
- Line 33: У рядку з описом 0001 (рядок містить фразу "5 з 5 запланованих топ-1
моноліт-файлів декомпоновано.") замініть орфографічну форму "топ-1" на
бездефісний варіант "топ1" або перефразуйте як "найпріоритетніший" (наприклад:
"5 з 5 запланованих топ1 моноліт-файлів декомпоновано." або "5 з 5
найпріоритетніших моноліт-файлів декомпоновано.") щоб усунути орфографічний
warning; відредагуйте рядок, що починається з "0001 | [Module decomposition..."
у README.md відповідно.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: cfa701cf-8aad-4424-b7e2-66653c499e7a
📒 Files selected for processing (3)
docs/audits/2026-05-04-revenue-and-marketing-roast.mddocs/initiatives/0010-revenue-first-launch.mddocs/initiatives/README.md
| > **Status:** Active | ||
|
|
||
| > **Скоуп:** маркетинг · монетизація · цінність продукту · потенціал розвитку. | ||
| > **Перспектива:** product-led growth + indie / pre-seed reality check. |
There was a problem hiding this comment.
Прибрати порожній рядок всередині blockquote.
Між Line 4 і Line 6 є розрив blockquote, що дає MD028. Зробіть блок суцільним (> на кожному рядку без порожнього рядка).
Suggested patch
> **Status:** Active
-
> **Скоуп:** маркетинг · монетизація · цінність продукту · потенціал розвитку.📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| > **Status:** Active | |
| > **Скоуп:** маркетинг · монетизація · цінність продукту · потенціал розвитку. | |
| > **Перспектива:** product-led growth + indie / pre-seed reality check. | |
| > **Status:** Active | |
| > **Скоуп:** маркетинг · монетизація · цінність продукту · потенціал розвитку. | |
| > **Перспектива:** product-led growth + indie / pre-seed reality check. |
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)
[warning] 5-5: Blank line inside blockquote
(MD028, no-blanks-blockquote)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/audits/2026-05-04-revenue-and-marketing-roast.md` around lines 4 - 7,
Видалити порожній рядок всередині blockquote, щоб блок був суцільним: у
фрагменті з рядками, що містять "**Status:** Active" та "**Скоуп:** маркетинг ·
монетизація · цінність продукту · потенціал розвитку.", прибрати пустий рядок
між ними і переконатися, що кожен рядок blockquote починається з символу ">"
(наприклад: "> **Status:** Active" і "> **Скоуп:** ...") без жодних порожніх
рядків посередині, щоб уникнути MD028.
| # 0010 — Revenue-first launch: ship paid, freeze scope, focus wedge | ||
|
|
||
| > **Last validated:** 2026-05-04 by @sonher468. **Next review:** 2026-08-02. | ||
| > **Status:** Proposed (план PR-ів; перший PR — цей документ + аудит-сорс) |
There was a problem hiding this comment.
Привести lifecycle Status до дозволеного enum.
На Line 4 значення Proposed (...) не відповідає дозволеним lifecycle-значенням для цього маркера. Залишіть тільки одне з enum-значень (наприклад, Scaffolded), а пояснення перенесіть нижче у звичайний текст.
Suggested patch
-> **Status:** Proposed (план PR-ів; перший PR — цей документ + аудит-сорс)
+> **Status:** ScaffoldedAs per coding guidelines, for docs/**/*.md the lifecycle marker must be > **Status:** Active | Scaffolded | Deprecated | Archived directly after freshness.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| > **Status:** Proposed (план PR-ів; перший PR — цей документ + аудит-сорс) | |
| > **Status:** Scaffolded |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/initiatives/0010-revenue-first-launch.md` at line 4, The lifecycle
Status marker in this document uses an invalid value; update the markdown marker
`> **Status:**` so it contains exactly one of the allowed enum values (Active |
Scaffolded | Deprecated | Archived) — e.g., replace `Proposed (...)` with
`Scaffolded` — and move any explanatory text that was inside the marker into a
normal paragraph below the freshness block. Ensure the `> **Status:**` line
matches the required format for docs/**/*.md and leave the detailed explanation
as plain text beneath it.
|
|
||
| ## Фази та залежності (граф) | ||
|
|
||
| ``` |
There was a problem hiding this comment.
Додати language до fenced code block.
На Line 314 блок коду без language, що тригерить MD040. Додайте, наприклад, text.
Suggested patch
-```
+```text📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ``` |
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)
[warning] 314-314: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/initiatives/0010-revenue-first-launch.md` at line 314, Add a language
identifier to the unlabeled fenced code block (the triple-backtick block with no
language) by changing its opening fence from ``` to ```text so the block is
recognized as text and the MD040 lint warning is resolved.
| | 0009 | [Agent-OS hardening (skills/playbooks/governance gates)](./0009-agent-os-hardening.md) | P1 | `@Skords-01` | Sprint 2–3 (4 wk) | In progress (Phase 1 — 2 з 5 PR відкрито: [#1659](https://github.com/Skords-01/Sergeant/pull/1659) `pnpm lint:skills` + skills-lock SHA, [#1660](https://github.com/Skords-01/Sergeant/pull/1660) Hard Rules categorization). PR 1.3 (`tsc-files` pre-commit) deferred — заблоковано pre-existing typecheck помилками на `main` (потрібен hotfix-PR перед активацією). | | ||
| | # | Назва | Пріоритет | Власник | ETA | Статус | | ||
| | ---- | --------------------------------------------------------------------------------------------- | --------- | ------------ | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ||
| | 0001 | [Module decomposition + `max-lines` guard](./0001-module-decomposition.md) | P0 | `@Skords-01` | Sprint 1 (2 wk) | **Done** (2026-05-04) — Phase 1 [#1555](https://github.com/Skords-01/Sergeant/pull/1555) + Phase 2 [#1593](https://github.com/Skords-01/Sergeant/pull/1593) [#1594](https://github.com/Skords-01/Sergeant/pull/1594) [#1596](https://github.com/Skords-01/Sergeant/pull/1596) [#1597](https://github.com/Skords-01/Sergeant/pull/1597) [#1603](https://github.com/Skords-01/Sergeant/pull/1603) + Phase 3 finalize. 5 з 5 запланованих топ-1 моноліт-файлів декомпоновано. Lint guard active. Carry-over (FinykApp, Workouts, drift) → successor. | |
There was a problem hiding this comment.
Виправити правописну форму топ-1.
На Line 33 краще замінити топ-1 на форму без дефіса з числівником (наприклад, топ1 або перефразувати як найпріоритетніший), щоб прибрати орфографічний warning.
🧰 Tools
🪛 LanguageTool
[uncategorized] ~33-~33: За правописом 2019 компонент топ- із числівниками не поєднуваний
Context: ... + Phase 3 finalize. 5 з 5 запланованих топ-1 моноліт-файлів декомпоновано. Lint guar...
(top_with_num_2019)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/initiatives/README.md` at line 33, У рядку з описом 0001 (рядок містить
фразу "5 з 5 запланованих топ-1 моноліт-файлів декомпоновано.") замініть
орфографічну форму "топ-1" на бездефісний варіант "топ1" або перефразуйте як
"найпріоритетніший" (наприклад: "5 з 5 запланованих топ1 моноліт-файлів
декомпоновано." або "5 з 5 найпріоритетніших моноліт-файлів декомпоновано.") щоб
усунути орфографічний warning; відредагуйте рядок, що починається з "0001 |
[Module decomposition..." у README.md відповідно.
Initiative 0010 і audit-сорс закладають фокус наступних 4 тижнів: shipping реального білінгу + одного wedge-позиціонування + одного публічного landing-у. Жодного функціонального коду — тільки docs. Що додає цей PR: - docs/audits/2026-05-04-revenue-and-marketing-roast.md Жорстка прожарка маркетингу/монетизації/цінності продукту/growth (~270 LOC). Evidence-based аналіз gap-у між doc-driven plan-ом (56k LOC docs, 7.5k LOC monetization plan) і реальністю в коді (0 paying users, 0 ₴ MRR, 0 рядків білінг-коду). Cross-refs на docs/launch/* і docs/audits/2026-05-03-ftux-*. - docs/initiatives/0010-revenue-first-launch.md Actionable PR-план у канонічній структурі (TL;DR / Чому зараз / Скоуп / План змін / DONE / Метрики / Ризики / ETA / Посилання). 7 фаз × 5–10 атомарних PR-ів × один scope на PR (рула #5). - Фаза 0: docs-only baseline (цей PR). - Фаза 1: ADR pricing v3 ( -> /міс / 2-tier), ADR OpenClaw park, ADR mobile pick (Expo vs Capacitor — фіналізація 0002). - Фаза 2: subscriptions + stripe_webhook_events міграції, getUserPlan/requirePlan/effectiveLimits у apps/server/src/modules/billing. - Фаза 3: Stripe SDK + Checkout + Customer Portal + idempotent webhook + api-client типи. - Фаза 4: PaywallModal + усе нові plan-hooks + replace static PricingPage на real Stripe Checkout CTA. - Фаза 5: activation_v2 (Mono-led) + goal-first onboarding (carry-over від ftux-sprint-plan S5). - Фаза 6: публічний лендинг + EN-локаль + public metrics endpoint. Ризики (Stripe Atlas blocker, EN-локаль scope creep, OpenClaw freeze frustration) та go/no-go метрики (≥1 paying / activation ≥15% / days-to-first-paid ≤28) — у відповідних секціях. - docs/initiatives/README.md Додано рядок 0010 у таблицю активних ініціатив (Proposed, P0, Sprint 1–4). Cross-refs: - Source audit: docs/audits/2026-05-04-revenue-and-marketing-roast.md - Поточна pricing: docs/launch/01-monetization-and-pricing.md (буде оновлена) - GTM (буде звужений): docs/launch/02-go-to-market.md - Tech skeleton білінгу: docs/launch/06-monetization-architecture.md - FTUX carry-over: docs/audits/2026-05-03-ftux-onboarding-roast.md, docs/launch/ftux-sprint-plan.md - Mobile picks: docs/initiatives/0002-mobile-platform-decision.md Validators (локально): - pnpm lint:tech-debt-freshness — green - pnpm docs:check-freshness-coverage — green (всі 277 docs з freshness header) - pnpm lint:governance-sync — Errors: 61 (без changes було Errors: 63 на origin/main; цей PR не додає нових dangling refs — future-file refs загорнуто в `<placeholder>` syntax, який regex skip-ить як template, а не concrete ref). - prettier --check — green.
bb9593a to
cc0da97
Compare
There was a problem hiding this comment.
♻️ Duplicate comments (4)
docs/initiatives/0010-revenue-first-launch.md (2)
314-314:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winДодати language до fenced code block (MD040).
На Line 314 відкривальний fence без language.
Suggested patch
-``` +```text🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/initiatives/0010-revenue-first-launch.md` at line 314, The opening fenced code block (``` ) in the file is missing a language tag causing MD040; update the opening fence to include a language identifier (e.g., change ``` to ```text) so the fenced code block declares its language.
4-4:⚠️ Potential issue | 🟠 Major | ⚡ Quick winПривести lifecycle
Statusдо дозволеного enum.
Proposed (...)не відповідає allowed values для lifecycle marker.Suggested patch
-> **Status:** Proposed (план PR-ів; перший PR — цей документ + аудит-сорс) +> **Status:** ScaffoldedAs per coding guidelines, for
docs/**/*.mdlifecycle marker must be> **Status:** Active | Scaffolded | Deprecated | Archivedright after freshness marker.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/initiatives/0010-revenue-first-launch.md` at line 4, The lifecycle Status marker must use the allowed enum values; replace the current line starting with "**Status:** Proposed (план PR-ів; перший PR — цей документ + аудит-сорс)" with one of the permitted tokens ("Active", "Scaffolded", "Deprecated", or "Archived") and ensure the Status line appears immediately after the freshness marker in the document; update the lifecycle `Status` value to the correct enum and keep the existing parenthetical note if needed but only after the allowed Status token.docs/audits/2026-05-04-revenue-and-marketing-roast.md (1)
5-5:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winПрибрати порожній рядок всередині blockquote (MD028).
Line 5 розриває один blockquote-блок між
StatusіСкоуп.Suggested patch
> **Status:** Active - > **Скоуп:** маркетинг · монетизація · цінність продукту · потенціал розвитку.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/audits/2026-05-04-revenue-and-marketing-roast.md` at line 5, Виправити порожній рядок всередині blockquote, який розриває блок між рядками "Status" і "Скоуп" (літеральні рядки всередині >-block), щоб задовольнити правило MD028; відкрийте місце з blockquote (рядки починаються з ">"), видаліть порожній рядок між цими >-рядками або об’єднайте їх у єдиний blockquote без порожніх рядків, зберігаючи префікс ">" перед кожним рядком.docs/initiatives/README.md (1)
33-33:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winВиправити форму
топ-1у рядку 0001.Краще перефразувати на нормативну форму без цього звороту.
Suggested patch
-... 5 з 5 запланованих топ-1 моноліт-файлів декомпоновано. +... 5 з 5 найпріоритетніших моноліт-файлів декомпоновано.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/initiatives/README.md` at line 33, У рядку для 0001 замініть неформальний зворот "топ-1" на нормативну українську фразу; знайдіть рядок починаючи з маркера "0001" і замініть фрагмент "5 з 5 запланованих топ-1 моноліт-файлів декомпоновано." на щось на кшталт "5 із 5 запланованих найпріоритетніших монолітних файлів декомпоновано." або "5 із 5 запланованих монолітних файлів першого пріоритету декомпоновано." щоб зберегти зміст і коректну мову.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Duplicate comments:
In `@docs/audits/2026-05-04-revenue-and-marketing-roast.md`:
- Line 5: Виправити порожній рядок всередині blockquote, який розриває блок між
рядками "Status" і "Скоуп" (літеральні рядки всередині >-block), щоб
задовольнити правило MD028; відкрийте місце з blockquote (рядки починаються з
">"), видаліть порожній рядок між цими >-рядками або об’єднайте їх у єдиний
blockquote без порожніх рядків, зберігаючи префікс ">" перед кожним рядком.
In `@docs/initiatives/0010-revenue-first-launch.md`:
- Line 314: The opening fenced code block (``` ) in the file is missing a
language tag causing MD040; update the opening fence to include a language
identifier (e.g., change ``` to ```text) so the fenced code block declares its
language.
- Line 4: The lifecycle Status marker must use the allowed enum values; replace
the current line starting with "**Status:** Proposed (план PR-ів; перший PR —
цей документ + аудит-сорс)" with one of the permitted tokens ("Active",
"Scaffolded", "Deprecated", or "Archived") and ensure the Status line appears
immediately after the freshness marker in the document; update the lifecycle
`Status` value to the correct enum and keep the existing parenthetical note if
needed but only after the allowed Status token.
In `@docs/initiatives/README.md`:
- Line 33: У рядку для 0001 замініть неформальний зворот "топ-1" на нормативну
українську фразу; знайдіть рядок починаючи з маркера "0001" і замініть фрагмент
"5 з 5 запланованих топ-1 моноліт-файлів декомпоновано." на щось на кшталт "5 із
5 запланованих найпріоритетніших монолітних файлів декомпоновано." або "5 із 5
запланованих монолітних файлів першого пріоритету декомпоновано." щоб зберегти
зміст і коректну мову.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 6e935e5d-b389-40bf-b234-869c3da1b129
📒 Files selected for processing (3)
docs/audits/2026-05-04-revenue-and-marketing-roast.mddocs/initiatives/0010-revenue-first-launch.mddocs/initiatives/README.md
⏱️ CI Pipeline Duration ReportBased on the last 50 successful runs on the default branch. Overall Pipeline
Trend (last 20 runs): Per-Job Breakdown
|
Summary
Docs-only PR. Закладає PR-план для shift-у з doc-driven planning у revenue-first execution, який виходить з жорсткої прожарки маркетингу/монетизації/цінності продукту/growth (виконано у попередній сесії як
/home/ubuntu/sergeant-roast.md, тут перетворено в репо-аудит).Що додає цей PR:
docs/audits/2026-05-04-revenue-and-marketing-roast.md— evidence-based прожарка (~270 LOC). Cross-refs наdocs/launch/*іdocs/audits/2026-05-03-ftux-onboarding-roast.md.docs/initiatives/0010-revenue-first-launch.md— actionable PR-план у канонічній структурі (TL;DR / Чому зараз / Скоуп / План змін / DONE / Метрики / Ризики / ETA / Посилання). 7 фаз × 5–10 атомарних PR-ів × один scope на PR (Hard Rule Dashboard: Add dynamic greeting, compact cards, and safer modal sheet spacing #5).subscriptions+stripe_webhook_eventsміграції, billing-core middleware.PricingPageна real Stripe Checkout CTA.activation_v2(Mono-led) + goal-first onboarding (carry-over відftux-sprint-planS5).docs/initiatives/README.md— додано рядок 0010 у таблицю активних ініціатив.Жодного функціонального коду — жоден файл поза
docs/не змінений.Governing Skill
.agents/skills/sergeant-feature-delivery/SKILL.md.agents/skills/sergeant-deploy-and-observability/SKILL.md(pricing rollout torkne env-var/Railway/Stripe ↔ deploy concerns у фазі 3)Playbook
Verification
Additional checks:
Docs and Governance
AGENTS.mdneeded an update. (Не потрібно — Hard Rules не змінюються; ADR-набір з'явиться тільки у фазі 1 PR-ів.)docs/governance/hard-rules.json— без змін.)Updated docs:
docs/audits/2026-05-04-revenue-and-marketing-roast.md(новий)docs/initiatives/0010-revenue-first-launch.md(новий)docs/initiatives/README.md(додано рядок 0010)Risk and Rollout
STRIPE_ENABLED=falseдо фази 3.2).Hard Rule #15
AGENTS.mdbefore coding.--no-verify.Reviewer Notes
<placeholder>syntax у 0010. Future-file refs (наприклад,apps/server/src/modules/billing/<getUserPlan>.ts) свідомо загорнуто в angle-brackets, щоб governance-sync regex skip-ув їх як template (perscripts/check-governance-sync.mjs:184-185). Initiative-tree не aspirational, тому це необхідно явно — інакше CI додав би 12 нових dangling-ref ERROR-ів.Summary by cubic
Docs-only PR that defines a revenue‑first launch plan and a supporting audit, setting a scope freeze and pricing v3 direction ($7/mo, 2‑tier) with a phased path to Stripe billing, paywall, onboarding pivot, and a public landing/metrics endpoint.
Adds
docs/audits/2026-05-04-revenue-and-marketing-roast.md,docs/initiatives/0010-revenue-first-launch.md, and updatesdocs/initiatives/README.md; no code changes outsidedocs/.Written for commit cc0da97. Summary will update on new commits.
Summary by CodeRabbit