38 слайдів · ← → · зібрано зі звіту

existing-system audit

Solidus

Добре спроєктований опенсорсний комерційний фреймворк, який тихо втратив свого доглядача вдруге за десять років, — і конкурент, що повернувся з мертвих із бізнес-моделлю за плечима.

Повний звіт ↗1 / 38

Набір комерційних бібліотек для Rails. Ви запускаєте все; ви володієте всім.

Solidus — не хостований магазин: це набір бібліотек для Rails, які ви встановлюєте у власний застосунок — ви запускаєте сервери, ви володієте базою даних, ви тримаєте в себе кожну кастомізацію.

Повністю: Що таке Solidus насправді ↗2 / 38

знайдено

Технічно здоровий, стратегічно дрейфує.

Solidus технічно здоровий і стратегічно дрейфує. Обидва твердження правдиві, і розрив між ними — уся ця історія.

Повністю: Політики й операції ↗3 / 38

знайдено

Уся історія в чотирьох числах.

  • 60% → 0.8%Частка комітів Nebulab, 2023 → останні 12 місяців
  • $45,760Уже витрачено на адмінку, яка так і не вийшла
  • 3 yr 3 moВік нової адмінки, досі версія 0.4
  • $133,750Готівка на руках · тринадцять місяців без жодної витрати
Повністю: Політики й операції ↗4 / 38

PL1 · direction · proposed

Кожна заміна називає реліз, який прибирає те, що вона замінює

Addresses
RC1 (Міграції спроєктовано, але ніколи не заплановано), D1 (Три незавершені переписування — найбільша повторювана витрата проєкту)
Relation
доповнює S3 (Постачати заміни поруч зі старою версією як opt-in, з гайдом міграції), додаючи критерій виходу, якого їй бракує; підсилює S2 (Ніколи не ламати наявний магазин — депрекація перед видаленням) — опублікована дата тримає «депрекуй перед видаленням» чесним
Operations
рядок критеріїв виходу в шаблоні релізних нотаток (та сама автоматизація, що вже генерує чейнджлоги); порада «мігруйте вже» з гема промоакцій — як зразковий документ
Accepted by
Core Team (запропоновано)
Executed by
чекліст релізу — рядок критеріїв виходу в релізній автоматизації
Review
2027-02-08

Проєкт добре проєктує міграції і ніколи не планує їх у часі — RC1 (Міграції спроєктовано, але ніколи не заплановано) є механізмом за найбільшою повторюваною витратою в журналі, D1 (Три незавершені переписування — найбільша повторювана витрата проєкту). Промоакції вже два роки мають завершений движок і гайд міграції на 190 рядків — і жоден реліз ніде не каже, коли легасі-движок піде. Це правило закриває прогалину біля джерела: наступник виходить як паралельний opt-in лише поруч із названим релізом, що прибирає попередника. Rails і Ruby публікують таймлайни депрекації саме так; заява нічого не коштує й нікому не призначає праці. Її перше застосування — B5 (Назвати реліз, що прибирає легасі-промоакції), і зробити його можна було безплатно вже два роки.

Повністю: Запропонований реєстр політик ↗5 / 38

PL2 · allocation · proposed

Гроші колективу купують названі результати, а не час

Addresses
RC1 (Міграції спроєктовано, але ніколи не заплановано), R3 (Напівзбудована адмінка стає постійним третім станом), F1 (Визначення «готово» існувало, і гроші до нього не підключили)
Relation
заповнює порожнечу — писаного правила розподілу не існує; ратифікує неписану норму фінансування, яку Core Team назвала на 25-й редакції
Operations
наявне щотижневе голосування стейкхолдерів як місце затвердження; перевірка фіскального хоста як незалежний контроль; опис витрати сам несе результат і критерій, тож інспекція відбувається в момент затвердження без нової машинерії
Accepted by
голосування стейкхолдерів (запропоновано)
Executed by
крок затвердження витрати — витрату без названого результату повертають, а не затверджують
Review
2027-02-08

Кожен рік серйозних витрат фінансував одну-єдину співпрацю, і провалилася саме та, що купила активність замість результату — $45,760 за шість «Agile Design Sprints» 2023 року (F1 (Визначення «готово» існувало, і гроші до нього не підключили)). Правило: оплачувана співпраця називає свій артефакт, критерій завершення і того, хто нестиме роботу після того, як гроші скінчаться. Сама модель фінансування вже усталена й свідома — незалежні розробники, оплачувані з колективу, поки фірми-мейнтейнери лишаються на клієнтській роботі , — тож цей рядок ратифікує норму, яку проєкт уже тримає, і записує стандарт відстані витягнутої руки, який сьогодні існує лише у Slack та в голові одного мейнтейнера. Перевірено на минулому: співпраці 2020, 2024 і 2025 років проходять за формою і провалюються на наступності; купівля 2023-го провалюється повністю — і різниця якраз у цьому правилі.

Повністю: Запропонований реєстр політик ↗6 / 38

PL3 · guidance · proposed

Рішення публікуються там, де їх прочитає той, хто обирає

Addresses
D2 (Врядування описує проєкт, якого більше не існує), D3 (Архітектурні рішення ніколи не фіксуються), R4 (Spree забирає ринок нових проєктів)
Relation
ратифікує S1 (Свідомо відкинути напрям JavaScript-фреймворків), переносячи опубліковану стратегію у власні артефакти проєкту; підсилює S5 (Право мерджу належить Core Team, що сама себе призначає)
Operations
обидва канали вже існують і дрімають — перезапуск коштує годину на місяць; E1 (Проставити в чеклісті перенесення галочки за вже зроблене) та E5 (Переопублікувати заяву стратегії у власних артефактах проєкту) — перші два кроки, на хвилини
Accepted by
Core Team (запропоновано)
Executed by
два наявні канали — статус-пости й майбутні пункти роадмапу — на щомісячному нагадуванні
Review
2027-02-08

Core Team тримає явні технічні повноваження, спільнота збирається щотижня — і жодне рішення не досягає публічного артефакту: дошка роадмапу — чейнджлог, що носить ім'я роадмапу, а найясніша заява стратегії проєкту живе в маркетинговому блозі консалтингової фірми (S1 (Свідомо відкинути напрям JavaScript-фреймворків)). Потенційний користувач знаходить доглянутий запис того, що проєкт мав минуле, — і жодного свідчення, що він має майбутнє. Правило: кожне рішення Core Team упродовж місяця лягає статус-постом або майбутнім пунктом на дошці роадмапу. Це публікація, а не врядування — рішення, можливо, і так ухвалюються; просто їх не видно. Блог уже наполовину прокинувся сам: один реліз-анонс у травні 2026-го ; це правило перетворює поодинокий вчинок на звичку.

Повністю: Запропонований реєстр політик ↗7 / 38

PL4 · approval · proposed

Кожна паралельна ініціатива щокварталу дістає вердикт, зафіксований публічно

Addresses
R3 (Напівзбудована адмінка стає постійним третім станом), D1 (Три незавершені переписування — найбільша повторювана витрата проєкту), RC2 (Доглядач змінився в коді, але не у врядуванні)
Relation
доповнює S5 (Право мерджу належить Core Team, що сама себе призначає) — повноваження лишаються рівно там, де були; це додає місце, каденцію і запис, яких у них ніколи не було
Operations
їде на наявній щотижневій зустрічі, чотири рази на рік; запис — пункт на дошці роадмапу, що заразом годує PL3 (Рішення публікуються там, де їх прочитає той, хто обирає)
Accepted by
Core Team (запропоновано)
Executed by
один пункт порядку денного на квартал у наявній щотижневій зустрічі; список вердиктів живе на дошці роадмапу
Review
2027-02-08

Адмінку три роки ані відвантажили, ані скасували — всередині структури врядування, яка прямо дозволяє і те, і те: повноваження є, місця для них нема (S5 (Право мерджу належить Core Team, що сама себе призначає), D2 (Врядування описує проєкт, якого більше не існує)). Правило дає повторюваному рішенню адресу: раз на квартал кожна паралельна ініціатива оголошується — просувається, фінансується, призупиняється до названої дати або скасовується, — і відповідь записується там, де її прочитають зовні. Механізм не може провалитися тихо, і саме ця властивість важить: квартал без списку вердиктів сам собою видно. Це той рядок, який упіймав би зупинку адмінки ще 2024 року, замість лишати архітектурі, що ховає покинутість (R3 (Напівзбудована адмінка стає постійним третім станом)), ховати її ще два роки.

Повністю: Запропонований реєстр політик ↗8 / 38

PL5 · guidance · proposed

Роботу контриб'ютора, що пішов, підхоплюють або закривають за релізний цикл

Addresses
RC2 (Доглядач змінився в коді, але не у врядуванні), F2 (Збудовано однією організацією, передано нікому), F3 (Роботу останнього розробника покинули на півдорозі)
Relation
заповнює порожнечу — і ратифікує механізм порятунку, який спільнота вже раз продемонструвала
Operations
збережений пошук GitHub за чернетками без активності автора N місяців — оце й уся інспекція; нагадування йде лише в реально застояні гілки, мовчить в усіх інших
Accepted by
Core Team (запропоновано)
Executed by
прохід по застояних чернетках (збережений пошук або запланований action) плюс коментар з одним питанням: підхопити чи закрити?
Review
2027-02-08

Коли 2025 року зупинився оплачуваний розробник, сім адмінських pull request-ів застигли там, де стояли, і єдиним порятунком досі був один контриб'ютор, що зголосився вручну через рік (F3 (Роботу останнього розробника покинули на півдорозі)). Той порятунок спрацював — 30 липня 2026-го він переїхав у свіжий pull request, з підходом, якому надавав перевагу рев'юер , — і це водночас доводить механізм і виказує його покриття: один сирота з шести знайшов нового автора, випадково. Правило робить випадковість рутиною. Коли контриб'ютор іде, кожна його відкрита чернетка впродовж одного релізного циклу дістає явне рішення: підхопити чи закрити. Закрити — легітимний результат; нелегітимний лише теперішній дефолт — безстрокове підвішення, яке правило сумісності потім зберігає вічно.

Повністю: Запропонований реєстр політик ↗9 / 38

виведено

П'ять постійних правил, усі запропоновані, жодне не просить волонтера працювати.

Шар політик одним рядком: плануй те, що заміняєш, купуй результати, а не час, публікуй рішення, давай ініціативам квартальний вердикт, підхоплюй або закривай роботу тих, хто пішов. П'ять правил — і жодне не просить волонтера працювати.

Повністю: Що реєстр свідомо не покриває ↗10 / 38

знайдено

Форк Spree 2015 року. Творець пішов 2018-го; доглядач — 2024-го.

Уся дуга одним рядком: форк Spree 2015 року, творець зник до 2018-го, інженерія доглядача — до 2024-го, а машина досі їде на дисципліні, яку збудували ті, хто пішов.

Повністю: Хронологія ↗11 / 38

знайдено

Кожен серйозний рік фінансував один-єдиний контракт. 2021 і 2026 — нічого.

Витрати за роками — і хто отримав основну частину
РікВиплаченоВитратКуди пішло
2019$11,76810Витрати на конференцію — Sean Denny 43%, Cindy Backman 42%
2020$35,73624Peter Berkenbosch 80% — щомісячні «Development & Maintenance»
2021$00геть нічого
2022$5001Один інвойс за монтаж відео з конференції
2023$45,7607Адмінка — Nebulab 79%, Andrea Iurisci 21%. 100% року.
2024$32,50616Logicielle B.V. 100% — 16 інвойсів за розробку, серпень–грудень
2025$16,8886«e.c441» 100% — 6 інвойсів за розробку, лютий–липень
2026$00геть нічого
Повністю: Куди пішли гроші — і коли це припинилось ↗12 / 38

знайдено

Фінансована розробка зупинилася в липні 2025. $133,750 лежать невитраченими, поки дохід продовжує надходити.

Гроші одним рядком: фінансована розробка зупинилася в липні 2025 року, відтоді надійшло тринадцять місяців доходу, і $133,750 лежать невитраченими.

Повністю: Хто може їх витратити ↗13 / 38

знайдено

Обсяг комітів: пік 2023-го — це одна організація, що прийшла й пішла.

20152,194
20162,244
20171,980
20181,070
2019883
20201,252
2021817
2022828
20231,810
20241,016
2025685
2026 дотепер223
Повністю: Обсяг розробки за роками ↗14 / 38

знайдено

Три переписування виглядають застряглими. За свідченнями, застрягла лише адмінка.

Продукт одним рядком: три паралельні переписування читаються як системна нездатність доводити до кінця, але промоакції — керована міграція, сторфронт — успіх; застрягла лише адмінка.

Повністю: Екосистема розширень ↗15 / 38

знайдено

Передача в комітах: 696, потім 46, потім 4, потім нуль.

Людина (організація)20222023202420252026
Елія Скіто (Nebulab)1336964640
Альберто Вена (Nebulab)7023252123
Райнер Дема (Nebulab)168200
Super Good Software (усі)34314062136
Повністю: Відхід, рік за роком ↗16 / 38

знайдено

Доглядач написав 60% коду 2023-го — і 0.8% торішнього.

Люди одним рядком: Nebulab дали приблизно 60% усіх комітів 2023 року і 0.8% за останні дванадцять місяців — і жодного оголошення так і не було.

Повністю: Де ухвалюються рішення — і де ні ↗17 / 38

знайдено

Відмінна машина: найновіші Rails і Ruby, підхоплені за тижні після релізу.

Машина одним рядком: кожна зміна тестується проти чотирьох комбінацій Ruby–Rails, де найновішу з кожного підхоплюють за лічені тижні після релізу, депрекації валять збірку, фікси бекпортуються автоматично — машинерія доставлення з верхнього дециля для проєкту такого розміру.

Повністю: Машина ↗18 / 38

знайдено

За $45,760 і три роки куплено версію 0.4. Покинутість не дає жодного симптому.

Найдорожча ініціатива в історії проєкту зупинилась без жодного звуку: три роки і $45,760 по тому нова адмінка — на версії 0.4, а архітектура влаштована так, що покинутість не дає жодного симптому.

Повністю: Чому все зупинилось — три причини, що підсилюють одна одну ↗19 / 38

знайдено

Solidus і Spree, виміряні одного дня.

МетрикаSolidusSpree
Коміти за останні 52 тижні (власний ряд GitHub — git log у §06 нараховує 493 за те саме вікно; співвідношення 5.5× береться одним інструментом з обох боків)4002,190 — 5.5×
Зірки GitHub5,31715,572
Форки1,4005,287
Останній релізv4.7.0 · 15 квіт. 2026v5.6.1 · 28 лип. 2026
Платформні релізи в липні 202606
Сукупні завантаження пакетів3.22M2.85M
Повністю: Spree, виміряний ↗20 / 38

знайдено

Spree їде на бізнесі; Solidus — на банці пожертв.

Опенсорс Spree — маркетингова витрата на плечах справжнього бізнесу; опенсорс Solidus тримається на банці пожертв у $25k на рік.

Повністю: Порівняння можливостей ↗21 / 38

знайдено

Spree повернувся, відвантажуючи 5.5× коду, з enterprise-виручкою за спиною.

Конкурент одним рядком: Spree відвантажує у п'ять з половиною разів більше комітів, ніж Solidus, шість платформних релізів лише за липень 2026-го, а його безкоштовна редакція — воронка продажів платного enterprise-продукту.

Повністю: Порівняння можливостей ↗22 / 38

знайдено

Стратегія в дії: справжні правила, запроваджені машинами — і майже ніде не записані.

RuleWritten where?Health
S1Свідомо відкинути напрям JavaScript-фреймворків. Простота, один стек, жодних оплат, розподілене врядування.у блозі компанії провідного мейнтейнераФактична стратегія проєкту — сформульована, просто не тут
S2Ніколи не ламати наявний магазин. Депрекація перед видаленням; бекпорт виправлень у старі версії.ратифікованоТримається — ціною, яку ніхто не порахував
S3Постачати заміни поруч зі старою версією як opt-in, з написаним гайдом міграції; стара лишається, доки магазини не переїхали.у гемах, не у врядуванніПрацює — див. гайд міграції промоакцій
S4Ядро лишається худим; можливості живуть в окремих розширеннях.нідеСлабшає — чотири офіційні розширення заморожені
Повністю: Стратегія, що вже діє ↗23 / 38

знайдено

Стратегія в дії: справжні правила, запроваджені машинами — і майже ніде не записані.

RuleWritten where?Health
S5Право мерджити належить Core Team, яка сама себе призначає. Гроші купують голоси щодо витрат, ніколи — щодо коду.ратифікованоТак — розділення навмисне і здорове
S6Якість забезпечують машини; про стиль не сперечаються.лише в конфігурації CIПравило, що працює в проєкті найкраще
S7Усю доставку роблять люди.мовчазно, через відсутністьНеперевірено — агентського харнеса не існує
Повністю: Стратегія, що вже діє ↗24 / 38

виведено

Втрата доглядача — нормальний стан цього проєкту.

Втрата доглядача — це не шок, який цей проєкт пережив один раз; це його нормальний стан, і за десять років врядування так і не виростило механізму давати цьому раду.

Повністю: Першопричини ↗25 / 38

знайдено

Непрофінансована ініціатива поруч із невитраченим бюджетом.

Дві причини складаються в один стан: непрофінансована ініціатива поруч із невитраченим бюджетом.

Повністю: Першопричини ↗26 / 38

виведено

П'ять ризиків: шкода, помножена на ймовірність — і на те, наскільки тихо вони приземляються.

RiskFlagLikelihoodWould you notice?
R1Рутинний дрейф залежностей між безпековими релізамипониженоНизька для розкритих вразливостей — цей шлях покрито. Середня для дрейфуДля розкритої CVE — так. Для поступового дрейфу — ні
R2Дві фірми — це 78% грошей і більшість кодуважко помітитиСередня — це вже ставалося двічіМісяцями — ні. Відхід виглядає точнісінько як тихий квартал
R3Напівзбудована адмінка стає постійним третім станомважко помітитиЗнижена на 24-й редакції — за версією Core Team темп свідомий; підтверджувальне спостережуване ще не спрацювалоНі. Кожен сигнал, на який дивиться мейнтейнер, зелений
R4Spree забирає ринок нових проєктіввидно здалеку
R5Новий сторфронт ламає наявні розширення за задумом
Повністю: Реєстр ризиків ↗27 / 38

виведено

Карта ризиків: застрягла адмінка водночас імовірна й тиха.

Вплив, якщо станеться
Планувати й моніторитиДіяти заразСписок спостереженняЗапасний планR3Нова адмінка лишається застряглою — поставлено високо, бо тиша і є знахідкоюR2Концентрація контриб'юторів — відхід однієї організації вже довів цю формуR4Конкуренція зі Spree наростає, поки Solidus стоїть на місціR5Поломка розширень на мажорних оновленняхR1Рутинний дрейф залежностей між безпековими релізами
Імовірність упродовж дванадцяти місяців
  1. R3Нова адмінка лишається застряглою — поставлено високо, бо тиша і є знахідкою
  2. R2Концентрація контриб'юторів — відхід однієї організації вже довів цю форму
  3. R4Конкуренція зі Spree наростає, поки Solidus стоїть на місці
  4. R5Поломка розширень на мажорних оновленнях
  5. R1Рутинний дрейф залежностей між безпековими релізами
Експозиція до ризиків.
Повністю: Реєстр ризиків ↗28 / 38

виведено

Чотири борги, сплачувані з кожним релізом — найбільшого не видно на жодному дашборді.

DebtKind
D1Три незавершені переписуванняstrategic
D2Врядування описує проєкт, якого більше не існуєorganizational
D3Архітектурні рішення ніколи не фіксуютьсяknowledge
D4Агентський харнес і дві дрібні прогалини в автоматизаціїtechnical
Повністю: Журнал боргу ↗29 / 38

знайдено

Дев'ять кредитів у книзі: кожна інвестиція в машину окупилася; обидві продуктові ставки застрягли.

CreditStatus
C1Тестова матриця, актуальна до найновіших Rails і Rubyconfirmed
C2Гейт збірки на депрекаціяхconfirmed
C3Автоматизовані бекпортиconfirmed
C4Автоматизований стиль кодуconfirmed
C5Автоматизація релізів і чейнджлогівconfirmed
C6Відтворюване середовище розробкиconfirmed
C7Сторфронтconfirmed
C8solidus_promotionsoverdue
C9solidus_adminpast the point of write-off
Повністю: Журнал кредиту ↗30 / 38

виведено

Роль, а не камбек: фреймворк, яким ви ще володітимете через десять років.

Висновок, який підтримують ці свідчення, — роль, а не камбек: комерційний фреймворк, яким ви ще володітимете через десять років і який служить мерчантам, що його вже вибрали.

Повністю: Виберіть роль ↗31 / 38

виведено

Три легітимні ролі. Дрейф між ними — єдиний нелегітимний варіант.

Три ролі поряд
РольХідЗаковика
A — доглядати встановлену базуЖодних нових ініціатив; гарантувати оновлення й безпеку; завершити промоакції; скасувати адмінку й сторфронтЯвне прийняття керованого занепаду — частина контриб'юторів піде
B — боротися за агентський каналВідвантажити відсутній агентський харнес; продавати «один рантайм, одна команда тестів» будівникам, що працюють через агентівSpree відвантажив свій першим — модифікатор до Role A, а не альтернатива
C — зійтися зі SpreeВлитися назад у проєкт, від якого Solidus відгалузивсяНіхто всередині цього не запропонує — саме тому це мусить бути записано
Повністю: Виберіть роль ↗32 / 38

виведено

Сім ставок — більшість коштує наради, заяви про політику або одного складного екрана.

BetVerdictAddressesCost
B2Перезапустити фінансовану розробку — купуючи результат, а не спринтиDoR3, D1один пункт порядку денного наради
B5Назвати реліз, що прибирає легасі-промоакції — заява про політику, а не праця; перше застосування PL1DoD1, RC1безплатно
B6Вирішити долю адмінки — виготовивши свідчення, а не розмірковуючи без нихDecideR3, D1один складний екран
B7Наздогнати React-сторфронт SpreeKillR4
B8GraphQL / headless-поверхняWaitR4
Повністю: Ставки — вирішувати вам ↗33 / 38

виведено

Сім ставок — більшість коштує наради, заяви про політику або одного складного екрана.

BetVerdictAddressesCost
B9Подвійна підтримка асет-пайплайнів, з міграцією, яку виконує агентDoR1, D3, D4див. шаблон
B10Публікувати технічні рішення — перезапустити статусні пости, заводити перспективні пункти роадмапу; одноразовий акт, що стоїть за PL3DoD2, D3, S1, R4година на місяць
Повністю: Ставки — вирішувати вам ↗34 / 38

виведено

Послідовність: рішення зараз, делеговна робота потім.

Зараз — тижні
Наступний квартал
Горизонт 2
Ставки
B6 · портувати один складний екран адмінки
B10 · знову публікувати рішення
E1–E5 · спорожнити швидку смугу
PL1–PL5 · прийняти, змінити або відхилити реєстр
B5 · назвати реліз, що прибирає легасі-промоакції
Role A або A+B оголошено публічно
Повністю: Послідовність ↗35 / 38

виведено

Ліки дешеві: публікуйте рішення, називайте дати, фінансуйте результати — не спринти.

Ходи одним рядком: жоден із перших кроків не дорогий — публікуйте рішення, які ухвалюєте, назвіть реліз, що прибирає легасі-промоакції, і фінансуйте результати, а не спринти.

Повністю: Послідовність ↗36 / 38

Не вірте деку на слово: кожне твердження позначене й перевірне у звіті.

Ніщо тут не просить, щоб йому вірили: кожне фактичне твердження в цьому звіті несе позначку, як до нього дійшли, а позначки рахує збірка — їх ніколи не пишуть руками.

Повністю: Чого я не зміг встановити ↗37 / 38

Перед висновками

118 тверджень із джерелом

знайдено58%68
веб27%32
стейкхолдер10%12
виведено5%6
припущено0%0

Скільки з почутого справді знайдено в джерелах.

Повний звіт ↗38 / 38