Solidus
type: Report
alternative headline: Добре спроєктований опенсорсний комерційний фреймворк, який тихо втратив свого доглядача вдруге за десять років, — і конкурент, що повернувся з мертвих із бізнес-моделлю за плечима.
abstract: Аудит інженерної стратегії Solidus, комерційного фреймворку для Rails. Аудит наявної системи, проведений цілком на публічних свідченнях, із запропонованим реєстром політик.
date modified: 2026-08-09
version: 27
author: Віталій Панчук
language: uk
claim: claim-1
claim: claim-2
claim: claim-3
claim: claim-4
claim: claim-5
claim: claim-6
claim: claim-7
claim: claim-8
claim: claim-9
claim: claim-10
claim: claim-11
claim: claim-12
claim: claim-13
claim: claim-14
claim: claim-15
claim: claim-16
claim: claim-17
claim: claim-18
claim: claim-19
claim: claim-20
claim: claim-21
claim: claim-22
claim: claim-23
claim: claim-24
claim: claim-25
claim: claim-26
claim: claim-27
claim: claim-28
claim: claim-29
claim: claim-30
claim: claim-31
claim: claim-32
claim: claim-33
claim: claim-34
claim: claim-35
claim: claim-36
claim: claim-37
claim: claim-38
claim: claim-39
claim: claim-40
claim: claim-41
claim: claim-42
claim: claim-43
claim: claim-44
claim: claim-45
claim: claim-46
claim: claim-47
claim: claim-48
claim: claim-49
claim: claim-50
claim: claim-51
claim: claim-52
claim: claim-53
claim: claim-54
claim: claim-55
claim: claim-56
claim: claim-57
claim: claim-58
claim: claim-59
claim: claim-60
claim: claim-61
claim: claim-62
claim: claim-63
claim: claim-64
claim: claim-65
claim: claim-66
claim: claim-67
claim: claim-68
claim: claim-69
claim: claim-70
claim: claim-71
claim: claim-72
claim: claim-73

claim-1
type: Claim
text: Фреймворк, за яким написано цей звіт (ESF v0.7 — див. примітку про нотацію в «З чого почати»), вимагає відповісти на питання про мандат до того, як пропонувати політику, — тож ось відповідь, прямо. Автор не має жодного мандата над Solidus. Це аудит ззовні; ніщо нижче не є прийнятим, і зовнішній аналітик прийняти його не може. Кожен рядок PL виходить у стані proposed, адресований людям, яких справді уповноважує документ про врядування: Core Team — для всього, що торкається коду й релізів, і голосування стейкхолдерів — для всього, що торкається грошей
evidence: observed

claim-2
type: Claim
text: Solidus тримається на волонтерах: нікому не можна призначити дедлайн, за який йому не платять, — тож політика, яка вимагала б постійної праці від названих волонтерів, померла б у момент появи. Те, що проєкт може запроваджувати, він уже запроваджує добре — машинами. Депрекації валять збірку; стиль лінтується, а не обговорюється; мердж вимагає рев'ю Core Team
evidence: observed

claim-3
type: Claim
text: Ще один обов'язок, який накладає фреймворк: перш ніж писати стратегію, перевірити, чи стратегічна робота вже не ведеться. Ведеться. Провідний мейнтейнер опублікував цілісну стратегічну позицію в травні 2026-го — широке врядування, свобода ліцензії, свідома відмова від шляху JavaScript-фреймворків
evidence: web

claim-4
type: Claim
text: Кожен рік серйозних витрат фінансував одну-єдину співпрацю, і провалилася саме та, що купила активність замість результату — $45,760 за шість «Agile Design Sprints» 2023 року (F1). Правило: оплачувана співпраця називає свій артефакт, критерій завершення і того, хто нестиме роботу після того, як гроші скінчаться. Сама модель фінансування вже усталена й свідома — незалежні розробники, оплачувані з колективу, поки фірми-мейнтейнери лишаються на клієнтській роботі
evidence: user

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

claim-6
type: Claim
text: Коли 2025 року зупинився оплачуваний розробник, сім адмінських pull request-ів застигли там, де стояли, і єдиним порятунком досі був один контриб'ютор, що зголосився вручну через рік (F3). Той порятунок спрацював — 30 липня 2026-го він переїхав у свіжий pull request, з підходом, якому надавав перевагу рев'юер
evidence: observed

claim-7
type: Claim
text: Solidus народжується. Агенція Stembolt форкає Spree 2.4, бо їй не подобається, куди прямує Spree. Обіцянка на старті — стабільність, легкі оновлення та зворотна сумісність
evidence: web

claim-8
type: Claim
text: First Data купує Spree, і розробка повністю зупиняється. Форк виглядає далекоглядним; значна частина спільноти Spree мігрує на Solidus
evidence: web

claim-9
type: Claim
text: Перший доглядач іде. JUUL Labs купує Stembolt, і робота над Solidus припиняється. Опіку підхоплює Nebulab
evidence: web

claim-10
type: Claim
text: Фінансування йде через Open Collective. Агенції та мерчанти спонсорують щомісяця. Спонсори також починають скасовувати підтримку — сім 2019 року, сім 2020-го, сім 2021-го. Цей відтік так і не зупиняється
evidence: observed

claim-11
type: Claim
text: Починається нова адмінка. Стартує робота над solidus_admin, що має замінити застарілий інтерфейс
evidence: observed

claim-12
type: Claim
text: На неї витрачено $45,760. Шість платежів по $6,000 для Nebulab за «Agile Design Sprints», плюс $9,760 за аналіз редизайну. 2023-й стає найбільшим роком проєкту: 1,810 комітів, приблизно 60% — від людей Nebulab
evidence: observed

claim-13
type: Claim
text: Інженерія Nebulab обвалюється. Їхній провідний розробник падає з 696 комітів до 46. Робота над адмінкою просідає з 618 комітів до 205. Оголошення так і не з'являється
evidence: observed

claim-14
type: Claim
text: Стартує друге паралельне переписування: solidus_promotions, поруч із наявним движком промоакцій. Жоден не стає дефолтом
evidence: observed

claim-15
type: Claim
text: Spree повертається комерційно. Версія 5.0 розділяється на безплатну редакцію та платну Enterprise Edition за підтримки Vendo
evidence: web

claim-16
type: Claim
text: Solidus починає публікувати щомісячні статус-апдейти. Одну людину — Юджина Чайкіна — публічно називають тим, хто рухає нову адмінку вперед. Він напише 78% адмінських комітів того року
evidence: web

claim-17
type: Claim
text: Solidus починає публікувати щомісячні статус-апдейти. Одну людину — Юджина Чайкіна — публічно називають тим, хто рухає нову адмінку вперед. Він напише 78% адмінських комітів того року
evidence: observed

claim-18
type: Claim
text: Оплачено останню витрату. Фінансована розробка зупиняється. Гроші продовжують надходити; назовні більше нічого не йде
evidence: observed

claim-19
type: Claim
text: Щомісячні апдейти обриваються. Після п'яти випусків каденція статус-постів завершується. У травні 2026-го виходить один реліз-анонс — і далі знову тиша
evidence: web

claim-20
type: Claim
text: Виходить Solidus v4.7.0 — Ruby 3.2+, Rails 7.2+, а CI вже покриває Rails 8.1 і Ruby 4.0, кожен підхоплений за лічені тижні після релізу
evidence: observed

claim-21
type: Claim
text: Виходить Solidus v4.7.0 — Ruby 3.2+, Rails 7.2+, а CI вже покриває Rails 8.1 і Ruby 4.0, кожен підхоплений за лічені тижні після релізу
evidence: web

claim-22
type: Claim
text: solidus_starter_frontend — сторфронт, який роками жив окремим репозиторієм — перейменовано й поглинуто в монорепо як storefront/, разом із набором тестів на 64 файли й 5,510 рядків
evidence: observed

claim-23
type: Claim
text: Spree відвантажує шість платформних релізів за п'ять тижнів. Solidus не відвантажив жодного з квітня. Баланс колективу лежить невитраченим. Дві фірми дають 78% фінансування. Нова адмінка — на версії 0.4 з вимкненими головними екранами
evidence: observed

claim-24
type: Claim
text: Проєкт відповідає. Чернетка, викладена у Slack проєкту, за годину отримує відповідь Core Team — «не стовідсотково точно… але точно корисно побачити, який вигляд має публічний стан проєкту, коли зібрати його докупи» — і два найцінніші невідомі дістають відповіді
evidence: user

claim-25
type: Claim
text: Перевірено наново для цієї редакції: видатків досі немає — вже тринадцять місяців — при $133,750 на балансі; мета-гем без змін; порятунок осиротілого pull request-а 30 липня переїхав у свіжий
evidence: observed

claim-26
type: Claim
text: Фінанси Solidus повністю публічні — що незвично й корисно: цей розділ спирається на записи, а не на здогади. Усі цифри — з API Open Collective
evidence: observed

claim-27
type: Claim
text: Комісії хоста і платіжних систем (залишок, обчислений на знімку від 25 липня)
evidence: inferred

claim-28
type: Claim
text: Сукупні підсумки сильно прикрашають картину, бо враховують і спонсорів, які давно пішли. Чесне число — активні регулярні внески: їх дев'ять, разом $1,931 на місяць — набір, повторно підтверджений незмінним у циклі списань за серпень 2026
evidence: observed

claim-29
type: Claim
text: Понад тридцять спонсорів скасували підписку, серед них великі: Engine Commerce ($1,000/місяць), Modded Euros ($850 за трьома підписками), Firstleaf ($325), Magmalabs ($325) і Deseret Book ($200). Більшість — мерчанти, а не агенції: справжні магазини, які перестали платити
evidence: observed

claim-30
type: Claim
text: У кожен рік, коли проєкт витрачав серйозно, практично все йшло на один контракт
evidence: observed

claim-31
type: Claim
text: Шість платежів по $6,000 кожен на Nebulab, усі з підписом «Solidus Admin Dashboard Agile Design Sprint 1–6», плюс $9,760 для Andrea Iurisci за «Admin Panel Redesign Analysis»
evidence: observed

claim-32
type: Claim
text: Фінансована розробка після цього тривала — $32,506 нідерландській компанії за 16 інвойсами наприкінці 2024-го, $16,888 анонімізованому отримувачу за шістьма інвойсами в першій половині 2025-го — а тоді повністю зупинилась: останню витрату оплачено 5 липня 2025 року. Відтоді надійшло тринадцять місяців доходу, і жодної виплати не було. Перевірено ще раз 8 серпня 2026 року: найсвіжіший дебет у журналі — досі той інвойс за липень 2025-го
evidence: observed

claim-33
type: Claim
text: Перший прохід дивився лише на оплачені витрати, а так можна було б пропустити гроші, вже затверджені й поставлені в чергу на виплату. Запит за всіма станами повертає 67 витрат: 64 оплачені, 3 відхилені, і жодної в очікуванні, затвердженої чи в обробці. Найсвіжіша витрата будь-якого статусу — з липня 2025 року. Отже, ніщо не зарезервоване і не в дорозі
evidence: observed

claim-34
type: Claim
text: Повторна перевірка 8 серпня ще раз прочитала журнал дебетів і побачила ту саму картину; єдине, чого не прочитати без автентифікації, — витрати, подані, але ще не затверджені: це обмеження назване, а не приховане
evidence: observed

claim-35
type: Claim
text: Дві розбіжності звірки лишаються відкритими, і їх варто назвати. 64 оплачені витрати дають у сумі $143,158 проти звітованих загальних витрат $154,612 — різниця $11,453, найімовірніше комісії за виплати. А отримане-мінус-витрачене перевищує баланс на $42,885, тобто 13% усього отриманого — що узгоджується з комісією хоста плюс обробкою платежів. Жодне з цього не верифіковано
evidence: inferred

claim-36
type: Claim
text: Адміністраторів, які можуть затверджувати витрати на Open Collective, семеро: tvdeyen, Gregor MacDougall, Alberto Vena (Nebulab), Matteo Latini, Andrea Iurisci, Alessandro Desantis (співзасновник Nebulab) і Джаред Норман (Super Good)
evidence: observed

claim-37
type: Claim
text: Суміжна теорія — що спонсорство було грою за голоси — не витримує зіткнення з механікою. Вага голосу дорівнює місячному внеску з лімітом 1000; Nebulab і Super Good нарівні по $750, і жоден не витратив додаткові $250, які б добили ліміт. Голоси врядують лише тим, як витрачаються кошти і хто стає радником; вони не дають жодної влади над тим, який код мерджиться. А економіка йде на $44k не в той бік
evidence: observed

claim-38
type: Claim
text: На 25-й редакції стандарт незалежної угоди, якого, за цією знахідкою, бракувало, виявився заявленою нормою: мейнтейнери воліють взагалі не брати колективних грошей — «я волію уникати будь-якого враження, що ті з нас, хто підтримує Solidus, прямо заробляють на фінансуванні з OpenCollective» — а робота «кошти агенціям» прийнятна, «поки це прозоро і чесно оцінено», з перевагою для вправних третіх сторін
evidence: user

claim-39
type: Claim
text: Колонку «Типовий?» перевірено ще раз 8 серпня 2026 року: мета-гем досі називає solidus_api, solidus_backend, solidus_core, solidus_legacy_promotions і solidus_sample — і досі оминає solidus_admin та solidus_promotions
evidence: observed

claim-40
type: Claim
text: Гем має гайд міграції на 190 рядків, який покриває встановлення, міграцію наявних даних промоакцій, перемикання поведінки магазину, синхронізацію легасі-промоакцій у замовленнях, роботу з кастомними сторфронтами, портування кастомних правил і, нарешті, видалення легасі-гема з Gemfile
evidence: observed

claim-41
type: Claim
text: Одинадцять комітів за шість тижнів, чотири людини з двох організацій, включно з Альберто Веною з Nebulab
evidence: observed

claim-42
type: Claim
text: Разом із ним прийшов не семитижневий скелет. solidus_starter_frontend роками жив як окремий репозиторій і приніс 64 файли спеків і 5,510 рядків тестів — компоненти, контролери, хелпери, мейлери, request-спеки включно з авторизацією і 19 системних спеків на автентифікацію й кешування. Ці спеки копіюються в кожен згенерований магазин, а CI на кожен push встановлює магазин і ганяє їх наскрізно
evidence: observed

claim-43
type: Claim
text: Залишкова ціна реальна, але вужча, ніж звучало раніше: два движки промоакцій — це 205 файлів тестів на той самий домен, і кожна нова інсталяція досі тягне дві адмінки
evidence: observed

claim-44
type: Claim
text: Для комерційної платформи найпереконливіше свідчення — справжній магазин. Пошук публічних репозиторіїв, що залежать від Solidus, дає близько тридцяти результатів
evidence: observed

claim-45
type: Claim
text: Джаред Норман сам назвав це у How to Fail at Solidus, зауваживши, що багато впроваджень Solidus лишаються невидимими для спільноти
evidence: web

claim-46
type: Claim
text: Опціональні можливості Solidus тримає в окремих репозиторіях. Із 35 в офіційній організації у 2026-му ще працюють над платежами (Stripe, PayPal), підписками, автентифікацією, перекладами та інструментами для розробників. Сплять із жовтня 2023-го: GraphQL API, вебхуки і старий сторфронт
evidence: observed

claim-47
type: Claim
text: Nebulab дали приблизно 1,096 з 1,810 комітів 2023 року — близько 60% — і приблизно 3 з 223 у 2026-му. Жодного публічного оголошення про цей перехід не було; ретельний пошук нічого не знайшов
evidence: web

claim-48
type: Claim
text: Вони лишаються активною консалтинговою компанією на 27 людей і досі платять за найвищий рівень спонсорства. Але їхня сторінка послуг тепер перелічує «Shopify Development» точно нарівні з «Solidus Development»
evidence: web

claim-49
type: Claim
text: Дві речі з документа про врядування варто процитувати точно, бо разом вони чітко окреслюють прогалину
evidence: observed

claim-50
type: Claim
text: Публічна дошка роадмапу містить 76 пунктів — 65 змерджених pull request-ів і 7 закритих issue проти 3 відкритих, спрямованих уперед. Вона записує те, що вже зроблено
evidence: observed

claim-51
type: Claim
text: Блог публікував щомісячні статус-апдейти з травня по жовтень 2025-го, затих — і відтоді опублікував одне оголошення про реліз: для v4.7, у травні 2026
evidence: web

claim-52
type: Claim
text: Межа цієї знахідки: я не встановив, чи існують протоколи зустрічей десь непублічно. Твердження тут лише про те, що ззовні жодного запису не знайти
evidence: inferred

claim-53
type: Claim
text: Не читайте всі 40 відкритих pull request-ів як недбалість мейнтейнерів. У квітні 2026-го Джаред Норман опублікував оголошення, яке пояснило раптову хвилю перших внесків: онлайн-дошка вакансій давала кандидатам завдання виправляти issue Solidus як етап відбору
evidence: observed

claim-54
type: Claim
text: У репозиторії немає SECURITY.md, і це підштовхує до висновку, що платіжний фреймворк живе без політики розкриття вразливостей. Це не так. Політика живе на рівні організації і вказує на опублікований процес, помітно сильніший, ніж у більшості проєктів такого розміру
evidence: observed

claim-55
type: Claim
text: У репозиторії немає SECURITY.md, і це підштовхує до висновку, що платіжний фреймворк живе без політики розкриття вразливостей. Це не так. Політика живе на рівні організації і вказує на опублікований процес, помітно сильніший, ніж у більшості проєктів такого розміру
evidence: web

claim-56
type: Claim
text: За цим стоїть трек-рекорд: п'ять опублікованих advisories між 2020 і 2022, з оцінкою серйозності, один із CVE
evidence: observed

claim-57
type: Claim
text: Два спостереження, які варто тримати в голові. Перше: список підтримуваних версій актуальний — у ньому названа 4.7, випущена в квітні 2026, — тобто цю політику підтримують, поки блог і роадмап стоять. Це чесний сигнал того, що саме проєкт продовжує тягнути, коли вважає ставки достатньо високими. Друге: жодного advisory не опубліковано з 2022 року. Це чотири тихі роки: або нічого не знайшли, або процес затих разом з усім іншим; ніщо тут не дозволяє розрізнити ці два варіанти
evidence: inferred

claim-58
type: Claim
text: github/CODEOWNERS містить одне правило: * @solidusio/core-team
evidence: observed

claim-59
type: Claim
text: Чого я не зміг перевірити: і налаштування захисту гілок, і членство в core team вимагають адмінських прав в організації, а запити повернули помилки доступу, а не відсутності. Тож вимога рев'ю спирається на опубліковану політику
evidence: web

claim-60
type: Claim
text: Rails 8 постачає Propshaft як дефолтний пайплайн асетів; Sprockets — попереднє покоління
evidence: web

claim-61
type: Claim
text: Ядро Solidus жорстко вимагає Sprockets
evidence: observed

claim-62
type: Claim
text: Шлях встановлення вже покритий безперервною інтеграцією, і покритий ґрунтовно. solidus_installer.yml запускається на кожен push і pull request у main: він встановлює нативну бібліотеку для зображень, запускає справжній інсталятор зі справжніми прапорцями, піднімає застосунок і перевіряє, що головна сторінка рендериться, звіряє резолвнуту версію платіжного гема, а потім запускає власний набір тестів згенерованого застосунку зі звітом про покриття. Другий воркфлоу покриває шлях генератора розширень
evidence: observed

claim-63
type: Claim
text: CI зелений на шляху встановлення, якого документація не описує. Офіційний гайд дає дві команди. CI тихо виконує три. Розробник, який іде за гайдом, влучає точно в той баг, який CI обходить, — а пояснення живе в коментарі до коду, а не там, де читає користувач
evidence: observed

claim-64
type: Claim
text: Фікс, на який Solidus неявно чекає, лежить незмердженим у гемі, що не релізився два роки і вже витіснений апстрімом
evidence: observed

claim-65
type: Claim
text: Фікс, на який Solidus неявно чекає, лежить незмердженим у гемі, що не релізився два роки і вже витіснений апстрімом
evidence: web

claim-66
type: Claim
text: У Solidus немає package.json, немає lock-файла і немає графа npm-залежностей ніде в репозиторії
evidence: observed

claim-67
type: Claim
text: Spree, для порівняння, носить package.json, pnpm-lock.yaml, pnpm-воркспейс, Turborepo і Biome, плюс одинадцять JavaScript-пакетів
evidence: observed

claim-68
type: Claim
text: Визначення пакета нової адмінки оголошує жорстку залежність від solidus_backend — старої адмінки, — а її компоненти посилаються на вебадреси старої адмінки для коригувань, рухів запасів та історії store credit
evidence: observed

claim-69
type: Claim
text: Найгостріше тут те, що чекліст завершення вже існував. Issue #5391, відкритий у вересні 2023-го і досі відкритий, викладає план перенесення з явним обґрунтуванням послідовності — «Ми хочемо взятися спершу за легкі сторінки, щоб поступово покращувати й нарощувати компоненти нашого UI-kit, а потім перевикористати їх для міграції складніших сторінок (напр. промоакцій)» — а далі список задач
evidence: observed

claim-70
type: Claim
text: Зауважте, що це за чекліст: шість найлегших екранів у застосунку — а нижче видно, чому вибрати їх першими було помилкою. Проєкт визначив, що означає «готово», опублікував це — а потім перестав доглядати визначення. Жоден пункт не відмічено за три роки, включно з роботою, яка доказово завершена — перевірено ще раз 8 серпня 2026 року: всі шість пунктів досі порожні
evidence: observed

claim-71
type: Claim
text: Був і публічний наратив: блогопост за Q2 2023 повідомляв, що «новий досвід адмінки потребував певних початкових зусиль; тепер, коли головні компоненти збудовано, реалізувати решту розділів буде легше і швидше»
evidence: web

claim-72
type: Claim
text: Авторство адмінки 2023 року: Елія Скіто 370, Райнер Дема 132, Марк Буске 102, Альберто Вена 6 — приблизно 98% з орбіти Nebulab. 2024-й розпорошився між шістьма людьми, поки вони згортались. 2025-й витягнула одна людина, Юджин Чайкін (комітить як chaimann), — 151 зі 193 комітів. 2026-й має 19 комітів від п'яти людей і жодного власника
evidence: observed

claim-73
type: Claim
text: Сім pull request-ів, відкритих уже рік, наводять на думку, що готова робота чекає на рев'юерів. Читання самих тредів — комітів, інлайн-коментарів рев'ю і розмов — дає точнішу відповідь
evidence: observed

claim-74
type: Claim
text: Єдиний PR, позначений готовим до рев'ю, має живий тред. Після повідомлення про конфлікт (липень 2025) і технічного заперечення від мейнтейнера, який волів нативну поведінку Turbo замість нової бібліотечної залежності (серпень 2025), долучився інший контриб'ютор
evidence: observed

claim-75
type: Claim
text: Це здорова спільнота, яка добре робить складну річ: мейнтейнер поступається в дизайнерській суперечці замість блокувати нею, а контриб'ютор зголошується підхопити чужу застряглу роботу і приймає підхід, якому віддає перевагу рев'юер. І обіцянку дотримано: 30 липня 2026 року forkata відкрив #6528 — «Admin confirm modal without external dependency» — ту саму функцію, перебудовану так, як хотів рев'юер
evidence: observed

claim-76
type: Claim
text: Побіжне спостереження: бот-рев'юер pull request-ів Copilot залишив рев'ю на #6232 у травні 2025
evidence: observed

claim-77
type: Claim
text: 132 наявні компоненти разом дають 7,716 рядків і покривають приблизно дев'ятнадцять робочих екранів. Контролер «лише список» — це 30–36 рядків з одним-двома файлами компонентів
evidence: observed

claim-78
type: Claim
text: Друга, незалежна міра показує те саме. Оскільки обидві адмінки рендеряться на сервері, шаблони в'ю — чесний прокси поверхні екранів: стара адмінка несе 277 ERB-шаблонів проти 111 у новій
evidence: observed

claim-79
type: Claim
text: Плейбук міграцій Вілла Ларсона — стандартний довідник з виплати технічного боргу в масштабі — задає три фази
evidence: web

claim-80
type: Claim
text: План перенесення Solidus формулює протилежну стратегію власними словами. Issue #5391: «Ми хочемо взятися спершу за легкі сторінки, щоб поступово покращувати й нарощувати компоненти нашого UI-kit, а потім перевикористати їх для міграції складніших сторінок (напр. промоакцій)»
evidence: observed

claim-81
type: Claim
text: Передбачений провал — саме той, який ми й спостерігаємо. Легкі сторінки налаштувань перенесли частково. Упевненість бігла попереду реальності — пост за Q2 2023 повідомляв, що «головні компоненти збудовано, реалізувати решту розділів буде легше і швидше»
evidence: web

claim-82
type: Claim
text: На 24-й редакції Core Team відповіла на цю знахідку прямо: часткова поступка щодо послідовності — «є аргумент, що варто було почати з важкого, або принаймні дійти до нього швидше» — але суперечка щодо ставок: «viability isn't a concern… не думаю, що хтось переймається, ніби їх неможливо збудувати. Поки проєкт до 1.0, переробки — не така вже й біда»
evidence: user

claim-83
type: Claim
text: Розумна теорія, і свідчення її не підтримують. Відкриті issue про адмінку — переважно запити на відсутні функції: «додайте створення таксономій», «додайте характеристики товару», «редагування кількості товару на складі», «увімкніть створення типів опцій» — підпис незавершеного, а не нелюбого. Тікетів про юзабіліті існує два. Статус-апдейт за травень 2025 відгукувався про роботу позитивно
evidence: observed

claim-84
type: Claim
text: Розумна теорія, і свідчення її не підтримують. Відкриті issue про адмінку — переважно запити на відсутні функції: «додайте створення таксономій», «додайте характеристики товару», «редагування кількості товару на складі», «увімкніть створення типів опцій» — підпис незавершеного, а не нелюбого. Тікетів про юзабіліті існує два. Статус-апдейт за травень 2025 відгукувався про роботу позитивно
evidence: web

claim-85
type: Claim
text: Одна поправка до народного наративу — від Core Team на 24-й редакції: на старті жодної ворожнечі не було. Після розколу проєкти якийсь час співпрацювали напряму — надто щодо проблем безпеки, які зачіпали обидва, — а зв'язки обірвалися пізніше, зі зсувами стратегії та зміною тих, хто вів цей проєкт. «Єдина справжня „драма“ — хіба те, що вони використовують проєкти на Solidus як кейси на сайті Spree»
evidence: user

claim-86
type: Claim
text: Теперішній час, той самий голос на 25-й редакції: «дуже різні підходи», незгода щодо ліцензування й технічної стратегії, і «no beef these days, though. Just different directions»
evidence: user

claim-87
type: Claim
text: Безкоштовна редакція Spree містить сторфронт, чекаут, канали продажів, резервування запасів, маршрутизацію замовлень і API. Enterprise Edition додає три окремо ліцензовані комерційні модулі — маркетплейс, B2B, мультитенантність — плюс рівень підтримки з градуйованими гарантіями часу відповіді, релізами з довгостроковою підтримкою та цілодобовим моніторингом
evidence: web

claim-88
type: Claim
text: Ціни не опубліковані; за однією сторонньою оцінкою, ліцензія та впровадження першого року обійдуться в п'яти-шестизначні суми
evidence: web

claim-89
type: Claim
text: Це структурна різниця, а не збіг обставин. Опенсорсна робота Spree — це витрата на маркетинг і R&D, вписана в enterprise-звіт про прибутки й збитки; робота Solidus тримається на банці пожертв, що приносить близько $25k на рік. Колектив зі спільнотним врядуванням не може відтворити цю модель, не переставши ним бути
evidence: inferred

claim-90
type: Claim
text: Spree публікує скіли для AI-агентів, які встановлюються однією командою, тримає MCP-сервер документації й рекламує свій інструмент командного рядка як такий, що працює «hands-free для AI-агентів». Усередині він несе файли інструкцій для агентів, закомічені дозволи, хуки та скіли із зафіксованими версіями
evidence: observed

claim-91
type: Claim
text: Spree публікує скіли для AI-агентів, які встановлюються однією командою, тримає MCP-сервер документації й рекламує свій інструмент командного рядка як такий, що працює «hands-free для AI-агентів». Усередині він несе файли інструкцій для агентів, закомічені дозволи, хуки та скіли із зафіксованими версіями
evidence: web

claim-92
type: Claim
text: У Solidus нічого з цього немає — перевірено ще раз 8 серпня 2026 року: в корені репозиторію досі немає жодного файлу інструкцій для агентів
evidence: observed

claim-93
type: Claim
text: Чесне застереження: причинність не доведена. Spree має ще й комерційне фінансування, тож харнес може бути симптомом ресурсів, а не причиною пропускної здатності. А одна стороння стаття стверджує, що сплеск активності Spree «насамперед рухають LLM-згенеровані контрибуції»
evidence: web

claim-94
type: Claim
text: Spree комерційно перезапустився у квітні 2025-го. Скасування спонсорств Solidus — 7 · 7 · 7 · 4 · 5 · 2 · 5 · 2 на рік, починаючи з 2019-го, — причому 2024 і 2026 — два найнижчі роки за всю історію. Жодного виходу спонсорів після перезапуску немає. Інженерія Nebulab обвалилася ще 2024 року, за цілий рік до Spree 5.0
evidence: observed

claim-95
type: Claim
text: Технічний напрям Solidus записаний — його просто легко проґавити через те, де він живе. Провідний мейнтейнер опублікував його 12 травня 2026 року — в пості, що порівнює Solidus і Spree
evidence: web

claim-96
type: Claim
text: Статусне оновлення травня 2025-го обіцяло «подвоїти ставку на наявний GitHub-проєкт під назвою Roadmap» заради прозорості. Його справді тримали живим — оновлювали в червні 2026-го. Але з його 76 пунктів 65 — це змерджені pull request-и, а 7 — закриті issue. Рівно три відкриті issue й один відкритий pull request дивляться вперед, і один із цих трьох — господарський пункт, якого востаннє торкалися у травні 2025-го
evidence: observed

claim-97
type: Claim
text: Проєкт очевидно вміє добре проводити міграції. Промоакції йдуть із 190-рядковим гайдом, що покриває міграцію даних, перемикання поведінки, кастомні правила й видалення легасі, а на додачу прямо радить мігрувати вже зараз. Сторфронт чисто поглинули за шість тижнів чотири людини з двох організацій
evidence: observed

claim-98
type: Claim
text: Nebulab пішли з ~60% комітів до ~1% без жодного публічного оголошення
evidence: observed

claim-99
type: Claim
text: Nebulab пішли з ~60% комітів до ~1% без жодного публічного оголошення
evidence: web

claim-100
type: Claim
text: І це вже вдруге. Stembolt купили 2018 року, і вони теж пішли. Передача 2018-го вдалася лише тому, що охочий наступник випадково знайшовся. Ланцюг опіки читається так: Stembolt → Nebulab → ніхто
evidence: inferred

claim-101
type: Claim
text: Вужче, ніж підказує читання самого лише репозиторію. Solidus має програму розкриття вразливостей на HackerOne, автоматичні безпекові оновлення залежностей, 18-місячне вікно патчів для трьох підтримуваних версій, два обов'язкові рев'ю перед мерджем і багатофакторну автентифікацію на релізних акаунтах (§07)
evidence: web

claim-102
type: Claim
text: Лишається прогалина довкола цього шляху: немає автоматичних рутинних підвищень версій і немає кроку bundler-audit у збірці, тож звичайний дрейф залежностей накопичується між безпековими подіями і ловиться лише тоді, коли хтось подивиться
evidence: observed

claim-103
type: Claim
text: Концентрація коду й концентрація фінансування — одна й та сама залежність, побачена з двох боків. Найбільший індивідуальний контриб'ютор комітить з особистої адреси, без організації за спиною. Одна з двох фірм тепер рекламує роботу з Shopify нарівні з Solidus
evidence: observed

claim-104
type: Claim
text: Концентрація коду й концентрація фінансування — одна й та сама залежність, побачена з двох боків. Найбільший індивідуальний контриб'ютор комітить з особистої адреси, без організації за спиною. Одна з двох фірм тепер рекламує роботу з Shopify нарівні з Solidus
evidence: web

claim-105
type: Claim
text: Три роки, версія 0.4, 19 комітів за 2026 рік на цей момент, обидві адмінки в кожній інсталяції — і архітектура активно ховає проблему. Редакція 24, від Core Team: адмінка жива, і темп свідомий — реальні магазини вже сьогодні працюють на ній, хоч вона й неповна, а робота «відновиться в темпі, щойно матимемо нового кандидата на місці»
evidence: user

claim-106
type: Claim
text: Це саме та відповідь, про яку §22 казав, що вона зсуне цей ризик з високого до низького, — і вона зсуває, з одним застереженням: зниження тримається на заявленому намірі, а закриває ризик лише фальсифікатор. Наступна видаткова операція в бухгалтерії — ось спостережуване, яке підтвердить кандидата, і станом на 8 серпня 2026 воно не з'явилося — останній видаток у бухгалтерії досі за липень 2025
evidence: observed

claim-107
type: Claim
text: На 25-й редакції намір здобув другу опору: «Адмінка — пріоритет», і модель із кандидатом свідома — незалежні розробники, оплачувані з колективу, поки фірма-мейнтейнер лишається на клієнтській роботі
evidence: user

claim-108
type: Claim
text: Виміряно в §09. Зауважте: цей ризик стоїть нижче за R1–R3 попри високий вплив — саме тому, що він гучний і публічний: проєкт побачить, як це відбувається. Чого я не можу встановити — чи мерчанти справді переходять: сукупні завантаження досі на користь Solidus, а темпи завантажень на реліз спотворені швидшою релізною каденцією Spree
evidence: observed

claim-109
type: Claim
text: Його власний README каже, що розширення, які покладаються на старий сторфронт, «не працюватимуть із цим сторфронтом». Вплив середній, імовірність стовідсоткова — заявлена властивість, а не загроза
evidence: observed

claim-110
type: Claim
text: Solidus, за його ж власною документацією: створи Rails-застосунок, додай гем, руками напиши файл маніфесту асетів, запусти генератор і, можливо, руками збери CSS, бо «ця проблема зазвичай виникає, коли ви бандлите з гілки». А потім опинися в адмінці, яка не може відкрити замовлення
evidence: observed

claim-111
type: Claim
text: Ще вирішальніше: найбільший контриб'ютор самого проєкту публічно відмовляється від цього сегмента. How to Fail at Solidus Джареда Нормана (листопад 2024) стверджує, що Solidus пасує магазинам із великими обсягами, великим каталогам і маркетплейсам — а не простим маленьким крамницям
evidence: web

claim-112
type: Claim
text: Проставити в #5391 галочки за тим, що код показує вже зробленим, — Settings > Zones уже давно має повний CRUD. Чекліст, який ніхто не оновлює, каже, що робота зупинилася; той самий чекліст в актуальному стані каже, що ні. Повторно підтверджено: галочки досі не проставлені станом на 8 серпня 2026
evidence: observed

claim-113
type: Claim
text: Core Team уже тримає технічну владу. Група стейкхолдерів уже збирається щотижня. Проєкт уже володіє двома каналами, створеними саме для того, щоб нести публічний напрям, — дошкою роадмапу і блогом. Нічого не треба створювати; дві приспані речі треба перезапустити. Блог навіть ворухнувся сам: один анонс релізу в травні 2026 — і знову тиша
evidence: web

claim-114
type: Claim
text: Чому співпрацю 2025 року не продовжили. Найцінніше невідоме у звіті. Проєкт тричі окремо фінансував розробника (2020, 2024, 2025) і тричі окремо зупинявся, з повністю сухими роками між ними. Тож питання не «чому фінансування зупинилося» — зупинки тут норма, — а чому ця пауза триває тринадцять місяців, коли попередні зрештою заповнювалися. Бюджетна обережність, підрядник, що пішов далі, свідома пауза чи просто ніхто не запропонував наступної співпраці — усе це дає ідентичну бухгалтерію і передбачає протилежні відповіді. Відповідь на rev 24: «Кандидата немає. Просто зараз у нас у роботі новий кандидат, але поділитися нам нічим, окрім того, що ми над цим працюємо»
evidence: user

claim-115
type: Claim
text: Хто такі «Logicielle B.V.» та «e.c441». Разом вони отримали $49,394 — майже третину всіх коли-небудь виплачених грошей — упродовж 2024 і 2025. Особу не встановити з публічних записів, а від неї залежить, чи купували ці витрати тяглість, чи разову роботу. Контекст на rev 25: зовнішні отримувачі — це проговорена перевага, а не аномалія: колектив свідомо фінансує незалежних розробників з досвідом Solidus, щоб мейнтейнери трималися осторонь грошей
evidence: user

claim-116
type: Claim
text: Чи вважає Core Team нову адмінку живою. Виведено цілком із загасання комітів. Мейнтейнер може сказати, що темп навмисний. Ця єдина відповідь пересуває R3 з високого в низький. Відповідь на rev 24: жива і навмисно розмірена — реальні магазини вже сьогодні використовують незавершену адмінку в продакшені, і це сигнал використання, якого аудит, що читав лише загасання комітів, побачити не міг
evidence: user

claim-117
type: Claim
text: Цільові пошуки публікацій про те, що Solidus застряг, покинутий чи здає позиції Spree, не повернули нічого — повторний запуск 8 серпня 2026 дав той самий результат
evidence: web

claim-118
type: Claim
text: Вікно ввічливості звузило цю межу, не прибравши її. Один член Core Team — Джаред Норман, Super Good — відповів у Slack проєкту, і його вердикт про звіт — водночас і епістемічний статус самого звіту: «Оскільки він ґрунтується на публічно доступній інформації, він не на 100% точний, і я не з усіма оцінками тут згоден, але безумовно корисно побачити, який вигляд має публічний стан проєкту, зібраний докупи»
evidence: user

Routine dependency drift between security releases
type: risk
code: R1
status: open
checked at: 2026-07-25
flag: downgraded
happens: Stale transitive dependencies age quietly; the exposure window before a disclosed issue is noticed widens
likelihood: Low for disclosed vulnerabilities — that path is covered. Medium for drift
notice: For a disclosed CVE, yes. For gradual drift, no
cost: Moderate, not critical
falsifier: A Renovate or Dependabot version-update config landing, which would close this entirely

Two firms are 78% of the money and most of the code
type: risk
code: R2
status: open
checked at: 2026-07-25
flag: hard to detect
happens: Losing either firm removes ~39% of funding and a large share of throughput at once
likelihood: Medium — this has already happened twice
notice: Not for months. A departure looks exactly like a quiet quarter
cost: High
falsifier: Six consecutive months where no single party exceeds 25% of merged commits

The half-built admin becomes a permanent third state
type: risk
code: R3
status: open
checked at: 2026-07-25
flag: hard to detect
happens: The primary evaluation surface for new adopters stays broken, and the maintenance bill doubles indefinitely
likelihood: High — it is the current trajectory
notice: No. Every signal a maintainer looks at is green
cost: High and rising as the old admin ages
falsifier: Version 1.0 becoming the default — or a recorded decision to cancel it

Spree takes the new-project market
type: risk
code: R4
status: open
checked at: 2026-07-25
flag: easy to see coming

The new storefront breaks existing extensions by design
type: risk
code: R5
status: open
checked at: 2026-07-25

Three unfinished rewrites
type: debt
code: D1
status: open
checked at: 2026-07-25
kind: strategic

Governance describes a project that no longer exists
type: debt
code: D2
status: open
checked at: 2026-07-25
kind: organizational

Architectural decisions are never recorded
type: debt
code: D3
status: open
checked at: 2026-07-25
kind: knowledge

The agent harness, and two small automation gaps
type: debt
code: D4
status: open
checked at: 2026-07-25
kind: technical

Test matrix including unreleased Rails 8.1 and Ruby 4.0
type: credit
code: C1
status: settled
checked at: 2026-07-25

Deprecation build gate
type: credit
code: C2
status: settled
checked at: 2026-07-25

Automated back-porting
type: credit
code: C3
status: settled
checked at: 2026-07-25

Automated code style
type: credit
code: C4
status: settled
checked at: 2026-07-25

Release and changelog automation
type: credit
code: C5
status: settled
checked at: 2026-07-25

Reproducible development environment
type: credit
code: C6
status: settled
checked at: 2026-07-25

The storefront
type: credit
code: C7
status: settled
checked at: 2026-07-25

solidus_promotions
type: credit
code: C8
status: open
checked at: 2026-07-25
realized: false
realization: overdue

solidus_admin
type: credit
code: C9
status: open
checked at: 2026-07-25
realized: false
realization: past the point of write-off

Migrations are engineered but never scheduled
type: root-cause
code: RC1
status: open
checked at: 2026-07-25
ensures: A migration can stall indefinitely without anyone noticing

The steward changed in the code but not in the governance
type: root-cause
code: RC2
status: open
checked at: 2026-07-25
ensures: That one of the stalled migrations is exactly what happens next

Treat this as an existing-system audit, with single-decision depth on t…
type: decision
code: DEC01
status: standing
checked at: 2026-07-25

A deliberate strategy does exist — compatibility, merge authority and m…
type: decision
code: DEC02
status: superseded
checked at: 2026-07-25
was: Open with agent-harness engineering, on the grounds that no deliberate strategy exists.

The policy exists at organization level and was found by widening the s…
type: decision
code: DEC03
status: withdrawn
checked at: 2026-07-25
was: Report “no security policy for a payments framework” as a risk.

File the governance/reality mismatch as a debt, not a risk. (Accepted —…
type: decision
code: DEC04
status: standing
checked at: 2026-07-25

67 expenses totalling $154,612 say the mechanism works and was already…
type: decision
code: DEC05
status: superseded
checked at: 2026-07-25
was: Frame the $132,180 balance as capital nobody has a mechanism to spend.

Corrected against the API — $329,677 received, $154,612 spent, and the…
type: decision
code: DEC06
status: superseded
checked at: 2026-07-25
was: Cite “$26,322 annual budget” and “$287,359 raised” from the rendered donation page.

Wrong. Six of seven pull requests are drafts never submitted for review…
type: decision
code: DEC07
status: superseded
checked at: 2026-07-25
was: The stalled 2025 admin work is finished and blocked at review; reviewer capacity is the bottleneck.

Misleading — order and product editing are switched off, six controller…
type: decision
code: DEC08
status: superseded
checked at: 2026-07-25
was: Report the new admin as “64% complete by controller count.”

Wrong measure. There is no package.json, no lockfile and no npm graph.…
type: decision
code: DEC09
status: superseded
checked at: 2026-07-25
was: Describe Solidus as paying polyglot costs, citing 246 JavaScript files.

Count correct, implication wrong — it reads as a recent exodus. It is s…
type: decision
code: DEC10
status: superseded
checked at: 2026-07-25
was: “Thirty-plus sponsors have cancelled, so the base rate is not hypothetical.”

Reject the theory that Nebulab's sponsorship was a play for voting powe…
type: decision
code: DEC11
status: standing
checked at: 2026-07-25

Decline to characterize the Nebulab payments as extraction. (Net contri…
type: decision
code: DEC12
status: standing
checked at: 2026-07-25

Reject "Spree caused the decline." (Cancellations are steady from 2019…
type: decision
code: DEC13
status: standing
checked at: 2026-07-25

Decline to claim new merchants are choosing Spree over Solidus. (Not me…
type: decision
code: DEC14
status: standing
checked at: 2026-07-25

Reframe the report from "how to recover" to "choose a role." (Accepted…
type: decision
code: DEC15
status: standing
checked at: 2026-07-25

Over-generalized from one case. Promotions ships a 190-line migration g…
type: decision
code: DEC16
status: superseded
checked at: 2026-07-25
was: “Three unfinished rewrites” as a systemic pattern, generating root cause RC1.

It is written — the lead maintainer published it on 12 May 2026. This r…
type: decision
code: DEC17
status: superseded
checked at: 2026-07-25
was: Treat the project's technical direction as unwritten and derive it.

Vector removed entirely. "Director" covers business and organizational…
type: decision
code: DEC18
status: withdrawn
checked at: 2026-07-25
was: Treat the governance document's description of Nebulab's role as a finding at all (the governance-title strategy row, its bet, and its pre-mortem entry).

Partly external. A job board was setting candidates Solidus issues as a…
type: decision
code: DEC19
status: superseded
checked at: 2026-07-25
was: Read the 40 open pull requests as evidence of review neglect.

Wrong prescription for the mode. Unowned, undated work is the normal co…
type: decision
code: DEC35
status: superseded
checked at: 2026-07-25
was: RC1: “the gates were built; nobody is accountable for closing them, and no calendar says when.”

Metadata was misleading; the threads say more. Five chaimann drafts hav…
type: decision
code: DEC34
status: superseded
checked at: 2026-07-25
was: All seven stalled admin PRs characterized from API metadata: “the author never returned,” “reviewers engaged wherever they were asked.”

Wrong twice. The file exists and works, so marking it absent was incorr…
type: decision
code: DEC33
status: superseded
checked at: 2026-07-25
was: “Differentiated code ownership ✗ — CODEOWNERS is a single catch-all line.”

Diagnose the admin's sequencing against Larson's migration playbook, an…
type: decision
code: DEC32
status: standing
checked at: 2026-07-25

A definition existed. Issue #5391 (open since Sept 2023) publishes the…
type: decision
code: DEC31
status: superseded
checked at: 2026-07-25
was: The $45,760 admin purchase shows “the project's missing completion gate appearing in a purchase order rather than in code” — no definition of finished existed.

Wrong, and it was the top-ranked risk. The published security policy sh…
type: decision
code: DEC30
status: superseded
checked at: 2026-07-25
was: R1, ranked first: “no automated dependency updating and no vulnerability audit step — a vulnerable dependency reaches every store, and you would learn from a downstream report.”

Every one double-counted. The count included _spec.rb, so the Ruby and…
type: decision
code: DEC29
status: superseded
checked at: 2026-07-25
was: Component table “Ruby files” figures: 855 / 328 / 278 / 193 / 166 / 98.

Overstated. The document assigns the Core Team "final decision as to wh…
type: decision
code: DEC28
status: superseded
checked at: 2026-07-25
was: “The governance document defines no mechanism whatsoever for deciding technical direction, so no forum has the standing to decide the admin's fate.”

Wrong, and it inverted the finding. It holds 64 spec files and 5,510 li…
type: decision
code: DEC27
status: superseded
checked at: 2026-07-25
was: The new storefront has zero tests.

Misleading — reading across a row produced false statements ("2020 · Lo…
type: decision
code: DEC26
status: superseded
checked at: 2026-07-25
was: Present spending as one table combining year-by-year totals with all-time recipient totals.

Re-verify the $132,180 balance under challenge. (Survived, and strength…
type: decision
code: DEC24
status: standing
checked at: 2026-07-25

Softened. That figure covers the Open Collective account only. Donated…
type: decision
code: DEC25
status: superseded
checked at: 2026-07-25
was: “$132,180 sitting idle” as a characterization of the project's investment.

Wrong — it already exists and is stronger. The installer workflow boots…
type: decision
code: DEC21
status: superseded
checked at: 2026-07-25
was: Recommend adding CI that verifies the installation path.

Locate the real gap: CI is green on an undocumented install path. (The…
type: decision
code: DEC22
status: standing
checked at: 2026-07-25

Ten of the twelve are view templates responding to AJAX requests, which…
type: decision
code: DEC23
status: superseded
checked at: 2026-07-25
was: Count 12 ERB asset files as Propshaft blockers.

Add the Rails-generation gap as a distinct finding. (Rails 8 defaults t…
type: decision
code: DEC20
status: standing
checked at: 2026-07-25

Reject the JavaScript-framework direction on purpose. Simplicity, one s…
type: strategy
code: S1
status: standing
checked at: 2026-07-25
state: on the lead maintainer's company blog
health: The project's actual strategy — stated, just not here

Never break an existing store. Deprecate before removing; back-port fix…
type: strategy
code: S2
status: standing
checked at: 2026-07-25
state: ratified
health: Holding — at a cost nobody has priced

Ship replacements alongside the old version as opt-in, with a written m…
type: strategy
code: S3
status: standing
checked at: 2026-07-25
state: in the gems, not the governance
health: Working — see the promotions migration guide

Core stays lean; capabilities live in separate extensions.
type: strategy
code: S4
status: standing
checked at: 2026-07-25
state: nowhere
health: Weakening — four official extensions dormant

Merge authority belongs to a self-appointing Core Team. Money buys vote…
type: strategy
code: S5
status: standing
checked at: 2026-07-25
state: ratified
health: Yes — the separation is deliberate and healthy

Quality is enforced by machines; style is not argued about.
type: strategy
code: S6
status: standing
checked at: 2026-07-25
state: only in CI config
health: The best-functioning rule in the project

All delivery is done by humans.
type: strategy
code: S7
status: standing
checked at: 2026-07-25
state: by omission
health: Untested — no agent harness exists

Restart funded development — buying an outcome, not sprints
type: bet
code: B2
status: open
checked at: 2026-07-25
verdict: Do
cost: one meeting agenda item

Routine dependency-update automation (security updates already run)
type: bet
code: B3
status: open
checked at: 2026-07-25
verdict: Cheap
cost: a config file

Agent harness, scoped to executing →B3 (Routine dependency-update autom…
type: bet
code: B4
status: open
checked at: 2026-07-25
verdict: Do
cost: ~a day

Name the release that removes legacy promotions — a policy statement, n…
type: bet
code: B5
status: open
checked at: 2026-07-25
verdict: Do
cost: free

Decide the admin — by manufacturing the evidence, not deliberating with…
type: bet
code: B6
status: open
checked at: 2026-07-25
verdict: Decide
cost: one hard screen

Match Spree's React storefront
type: bet
code: B7
status: open
checked at: 2026-07-25
verdict: Kill
cost: —

GraphQL / headless surface
type: bet
code: B8
status: open
checked at: 2026-07-25
verdict: Wait
cost: —

Dual asset-pipeline support, with an agent-executed migration
type: bet
code: B9
status: open
checked at: 2026-07-25
verdict: Do
cost: see template
review date: 2027-01-25

Publish technical decisions — restart the status posts, file forward-lo…
type: bet
code: B10
status: open
checked at: 2026-07-25
verdict: Do
cost: an hour a month

withdrawn — numbering keeps the gap
type: bet
code: B1
status: withdrawn
checked at: 2026-07-25

A definition of "finished" existed, and the money was not wired to it
type: factor
code: F1
status: open
checked at: 2026-07-25

Built by one organization, handed to nobody
type: factor
code: F2
status: open
checked at: 2026-07-25

The last developer's work was abandoned mid-flight
type: factor
code: F3
status: open
checked at: 2026-07-25

solidusio/solidus @ cdcdfaf (audited checkout)
type: source
code: src-checkout
status: settled
mirror: https://github.com/solidusio/solidus/tree/cdcdfaf333c196c746d538c155762d0237189444
checked at: 2026-07-21
uri: https://github.com/solidusio/solidus/tree/cdcdfaf333c196c746d538c155762d0237189444

slack.solidus.io
type: source
code: src-slack-solidus-io
status: settled
uri: http://slack.solidus.io
checked at: 2026-07-25

github.com/solidusio/solidus
type: source
code: src-github-com-solidusio-solidus
status: settled
uri: https://github.com/solidusio/solidus
checked at: 2026-07-25

github.com/solidusio/solidus/commits/main
type: source
code: src-github-com-solidusio-solidus-commits-mai
status: settled
uri: https://github.com/solidusio/solidus/commits/main
checked at: 2026-07-25

github.com/solidusio/solidus/releases
type: source
code: src-github-com-solidusio-solidus-releases
status: settled
uri: https://github.com/solidusio/solidus/releases
checked at: 2026-07-25

guides.solidus.io/policies/security
type: source
code: src-guides-solidus-io-policies-security
status: settled
uri: https://guides.solidus.io/policies/security
checked at: 2026-07-25

jardo.dev/how-to-fail-at-solidus
type: source
code: src-jardo-dev-how-to-fail-at-solidus
status: settled
uri: https://jardo.dev/how-to-fail-at-solidus
checked at: 2026-07-25

nebulab.com/services
type: source
code: src-nebulab-com-services
status: settled
uri: https://nebulab.com/services
checked at: 2026-07-25

nebulab.com/team
type: source
code: src-nebulab-com-team
status: settled
uri: https://nebulab.com/team
checked at: 2026-07-25

opencollective.com/solidus
type: source
code: src-opencollective-com-solidus
status: settled
uri: https://opencollective.com/solidus
checked at: 2026-07-25

raw.githubusercontent.com/solidusio/solidus/main/GOVERNANCE.md
type: source
code: src-githubusercontent-com-solidusio-solidus-
status: settled
uri: https://raw.githubusercontent.com/solidusio/solidus/main/GOVERNANCE.md
checked at: 2026-07-25

rubygems.org/gems/solidus
type: source
code: src-rubygems-org-gems-solidus
status: settled
uri: https://rubygems.org/gems/solidus
checked at: 2026-07-25

solidus.io/
type: source
code: src-solidus-io
status: settled
uri: https://solidus.io/
checked at: 2026-07-25

solidus.io/blog
type: source
code: src-solidus-io-blog
status: settled
uri: https://solidus.io/blog
checked at: 2026-07-25

solidus.io/blog/project-status-may-2025
type: source
code: src-solidus-io-blog-project-status-may-2025
status: settled
uri: https://solidus.io/blog/project-status-may-2025
checked at: 2026-07-25

solidus.io/community/
type: source
code: src-solidus-io-community
status: settled
uri: https://solidus.io/community/
checked at: 2026-07-25

solidus.io/security
type: source
code: src-solidus-io-security
status: settled
uri: https://solidus.io/security
checked at: 2026-07-25

spreecommerce.org/enterprise/
type: source
code: src-spreecommerce-org-enterprise
status: settled
uri: https://spreecommerce.org/enterprise/
checked at: 2026-07-25

spreecommerce.org/pricing/
type: source
code: src-spreecommerce-org-pricing
status: settled
uri: https://spreecommerce.org/pricing/
checked at: 2026-07-25

supergood.software/solidus-versus-spree/
type: source
code: src-supergood-software-solidus-versus-spree
status: settled
uri: https://supergood.software/solidus-versus-spree/
checked at: 2026-07-25

The hard screen gets deferred for an easy one
type: premortem
code: P1
status: open
checked at: 2026-07-25
note: most likely
warning: The first screen attempted is one already on the #5391 checklist
mitigation: Name the screen before starting, in public; treat "we learned it does not work" as a successful outcome

Nobody puts the funding decision on an agenda
type: premortem
code: P2
status: open
checked at: 2026-07-25
warning: Two stakeholder meetings pass with no agenda item
mitigation: Send it as a one-page multiple-choice ballot over the three migrations

The harness gets built and nobody uses it
type: premortem
code: P3
status: open
checked at: 2026-07-25
warning: No pull request references it within two release cycles
mitigation: Scope it narrowly to B3 and B5; if those land, it paid for itself

The funded migration is chosen by money, not readiness
type: premortem
code: P4
status: open
checked at: 2026-07-25
warning: A single-choice ballot
mitigation: Multiple choice, producing a ranked list

The diagnosis is wrong and the constraint is attention, not money
type: premortem
code: P5
status: open
checked at: 2026-07-25
note: partly observed already
warning: A second, outcome-shaped funding round also fails to ship
mitigation: If money tied to a completion criterion fails too, cancel the admin

Role A — Steward the installed base
type: option
code: Role-A
status: open
checked at: 2026-07-25

Role B — Contest the agent channel
type: option
code: Role-B
status: open
checked at: 2026-07-25

Role C — Converge with Spree
type: option
code: Role-C
status: open
checked at: 2026-07-25

Why was the 2025 engagement not renewed?
type: question
code: q01
status: open
checked at: 2026-07-25
rank: 1

Why did Nebulab wind down?
type: question
code: q02
status: open
checked at: 2026-07-25
rank: 2

Who are Logicielle B.V. and e.c441?
type: question
code: q03
status: open
checked at: 2026-07-25
rank: 3

Is the balance reserved against something?
type: question
code: q04
status: open
checked at: 2026-07-25
rank: 4

Does the Core Team consider the new admin alive?
type: question
code: q05
status: open
checked at: 2026-07-25
rank: 5

Branch-protection settings and core-team membership
type: question
code: q06
status: open
checked at: 2026-07-25
rank: 6

Does Spree's commit volume reflect human or generated work?
type: question
code: q07
status: open
checked at: 2026-07-25
rank: 7

solidusio/solidus #5391 — new admin porting checklist, open since Sept 2023
type: source
code: src-recon-solidus-5391
status: settled
uri: https://github.com/solidusio/solidus/pull/5391
reconstructed: true
checked at: 2026-07-29

solidusio/solidus #5410 — new admin breaks asset compilation when the host app has Tailwind
type: source
code: src-recon-solidus-5410
status: settled
uri: https://github.com/solidusio/solidus/pull/5410
reconstructed: true
checked at: 2026-07-29

solidusio/solidus #6035 — installer may fail silently
type: source
code: src-recon-solidus-6035
status: settled
uri: https://github.com/solidusio/solidus/pull/6035
reconstructed: true
checked at: 2026-07-29

solidusio/solidus #6228 — store create/edit draft PR
type: source
code: src-recon-solidus-6228
status: settled
uri: https://github.com/solidusio/solidus/pull/6228
reconstructed: true
checked at: 2026-07-29

solidusio/solidus #6232 — shipping methods draft PR
type: source
code: src-recon-solidus-6232
status: settled
uri: https://github.com/solidusio/solidus/pull/6232
reconstructed: true
checked at: 2026-07-29

solidusio/solidus #6236 — option types draft PR
type: source
code: src-recon-solidus-6236
status: settled
uri: https://github.com/solidusio/solidus/pull/6236
reconstructed: true
checked at: 2026-07-29

solidusio/solidus #6295 — confirmation dialog PR, adopted July 2026
type: source
code: src-recon-solidus-6295
status: settled
uri: https://github.com/solidusio/solidus/pull/6295
reconstructed: true
checked at: 2026-07-29

solidusio/solidus #6296 — product categories draft PR
type: source
code: src-recon-solidus-6296
status: settled
uri: https://github.com/solidusio/solidus/pull/6296
reconstructed: true
checked at: 2026-07-29

solidusio/solidus #6298 — tax rate create/edit draft PR
type: source
code: src-recon-solidus-6298
status: settled
uri: https://github.com/solidusio/solidus/pull/6298
reconstructed: true
checked at: 2026-07-29

solidusio/solidus #6302 — payment methods create/edit draft PR
type: source
code: src-recon-solidus-6302
status: settled
uri: https://github.com/solidusio/solidus/pull/6302
reconstructed: true
checked at: 2026-07-29

solidusio/solidus #6327 — installer fails with a Sprockets error
type: source
code: src-recon-solidus-6327
status: settled
uri: https://github.com/solidusio/solidus/pull/6327
reconstructed: true
checked at: 2026-07-29

solidusio/solidus #6516 — align the install instructions with the storefront
type: source
code: src-recon-solidus-6516
status: settled
uri: https://github.com/solidusio/solidus/pull/6516
reconstructed: true
checked at: 2026-07-29

rails/sprockets-rails #546 — warn instead of raising on missing manifest.js
type: source
code: src-recon-sprockets-rails-546
status: settled
uri: https://github.com/rails/sprockets-rails/pull/546
reconstructed: true
checked at: 2026-07-29

Solidus Slack — courtesy-window thread: draft posted, Core Team reply
type: source
code: src-slack-courtesy-2026-08
status: settled
uri: http://slack.solidus.io
checked at: 2026-08-03

Record the courtesy-window answers; stakeholders none reached to partial (rev 24)
type: decision
code: DEC36
status: standing
checked at: 2026-08-03

Record the follow-up answers: admin a priority, funding model deliberate (rev 25)
type: decision
code: DEC37
status: standing
checked at: 2026-08-03

GitHub API re-verification sweep 2026-08-08
type: source
code: src-gh-recheck-2026-08
status: settled
uri: https://api.github.com/repos/solidusio/solidus
checked at: 2026-08-08

Open Collective ledger re-check 2026-08-08
type: source
code: src-oc-ledger-2026-08
status: settled
uri: https://opencollective.com/solidus/transactions
checked at: 2026-08-08

solidus.io blog — status update Solidus v4.7, 5 May 2026
type: source
code: src-blog-v47
status: settled
uri: https://solidus.io/blog/project-status-solidus-v4-7
checked at: 2026-08-08

Superseded: last blog post October 2025 / nine months of silence
type: decision
code: DEC38
status: superseded
checked at: 2026-08-08

Record the rev-26 re-verification, evidence window 2026-08-08
type: decision
code: DEC39
status: standing
checked at: 2026-08-08

Restructure to framework v0.7 at rev 26
type: decision
code: DEC40
status: standing
checked at: 2026-08-08

Rails and Ruby release dates plus Solidus CI adoption commits
type: source
code: src-release-dates
status: settled
uri: https://endoflife.date/rails
checked at: 2026-08-09

Superseded: tested against unreleased Rails and Ruby versions
type: decision
code: DEC41
status: superseded
checked at: 2026-08-09

from: Spree takes the new-project market
rel: DERIVED_FROM
to: Routine dependency drift between security releases

from: Spree takes the new-project market
rel: DERIVED_FROM
to: The half-built admin becomes a permanent third state

from: Architectural decisions are never recorded
rel: DERIVED_FROM
to: Ship replacements alongside the old version as opt-in, with a written m…

from: The steward changed in the code but not in the governance
rel: DERIVED_FROM
to: Never break an existing store. Deprecate before removing; back-port fix…

from: Reject "Spree caused the decline." (Cancellations are steady from 2019…
rel: DERIVED_FROM
to: Match Spree's React storefront

from: Over-generalized from one case. Promotions ships a 190-line migration g…
rel: DERIVED_FROM
to: Migrations are engineered but never scheduled

from: Vector removed entirely. "Director" covers business and organizational…
rel: DERIVED_FROM
to: The steward changed in the code but not in the governance

from: Vector removed entirely. "Director" covers business and organizational…
rel: DERIVED_FROM
to: Built by one organization, handed to nobody

from: Wrong prescription for the mode. Unowned, undated work is the normal co…
rel: DERIVED_FROM
to: Name the release that removes legacy promotions — a policy statement, n…

from: Diagnose the admin's sequencing against Larson's migration playbook, an…
rel: DERIVED_FROM
to: Decide the admin — by manufacturing the evidence, not deliberating with…

from: Wrong, and it was the top-ranked risk. The published security policy sh…
rel: DERIVED_FROM
to: Routine dependency drift between security releases

from: Wrong, and it was the top-ranked risk. The published security policy sh…
rel: DERIVED_FROM
to: The half-built admin becomes a permanent third state

from: Wrong, and it was the top-ranked risk. The published security policy sh…
rel: DERIVED_FROM
to: Two firms are 78% of the money and most of the code

from: Overstated. The document assigns the Core Team "final decision as to wh…
rel: DERIVED_FROM
to: Publish technical decisions — restart the status posts, file forward-lo…

from: Locate the real gap: CI is green on an undocumented install path. (The…
rel: DERIVED_FROM
to: Dual asset-pipeline support, with an agent-executed migration

from: Restart funded development — buying an outcome, not sprints
rel: DERIVED_FROM
to: The half-built admin becomes a permanent third state

from: Restart funded development — buying an outcome, not sprints
rel: DERIVED_FROM
to: Three unfinished rewrites

from: Routine dependency-update automation (security updates already run)
rel: DERIVED_FROM
to: Routine dependency drift between security releases

from: Agent harness, scoped to executing →B3 (Routine dependency-update autom…
rel: DERIVED_FROM
to: The agent harness, and two small automation gaps

from: Agent harness, scoped to executing →B3 (Routine dependency-update autom…
rel: DERIVED_FROM
to: All delivery is done by humans.

from: Agent harness, scoped to executing →B3 (Routine dependency-update autom…
rel: DERIVED_FROM
to: Routine dependency-update automation (security updates already run)

from: Agent harness, scoped to executing →B3 (Routine dependency-update autom…
rel: DERIVED_FROM
to: Name the release that removes legacy promotions — a policy statement, n…

from: Name the release that removes legacy promotions — a policy statement, n…
rel: DERIVED_FROM
to: Three unfinished rewrites

from: Name the release that removes legacy promotions — a policy statement, n…
rel: DERIVED_FROM
to: Migrations are engineered but never scheduled

from: Decide the admin — by manufacturing the evidence, not deliberating with…
rel: DERIVED_FROM
to: The half-built admin becomes a permanent third state

from: Decide the admin — by manufacturing the evidence, not deliberating with…
rel: DERIVED_FROM
to: Three unfinished rewrites

from: Match Spree's React storefront
rel: DERIVED_FROM
to: Spree takes the new-project market

from: GraphQL / headless surface
rel: DERIVED_FROM
to: Spree takes the new-project market

from: Dual asset-pipeline support, with an agent-executed migration
rel: DERIVED_FROM
to: Routine dependency drift between security releases

from: Dual asset-pipeline support, with an agent-executed migration
rel: DERIVED_FROM
to: Architectural decisions are never recorded

from: Dual asset-pipeline support, with an agent-executed migration
rel: DERIVED_FROM
to: The agent harness, and two small automation gaps

from: Publish technical decisions — restart the status posts, file forward-lo…
rel: DERIVED_FROM
to: Governance describes a project that no longer exists

from: Publish technical decisions — restart the status posts, file forward-lo…
rel: DERIVED_FROM
to: Architectural decisions are never recorded

from: Publish technical decisions — restart the status posts, file forward-lo…
rel: DERIVED_FROM
to: Reject the JavaScript-framework direction on purpose. Simplicity, one s…

from: Publish technical decisions — restart the status posts, file forward-lo…
rel: DERIVED_FROM
to: Spree takes the new-project market

from: Vector removed entirely. "Director" covers business and organizational…
rel: SUPERSEDES
to: withdrawn — numbering keeps the gap

from: The hard screen gets deferred for an easy one
rel: DERIVED_FROM
to: Decide the admin — by manufacturing the evidence, not deliberating with…

from: Nobody puts the funding decision on an agenda
rel: DERIVED_FROM
to: Restart funded development — buying an outcome, not sprints

from: The harness gets built and nobody uses it
rel: DERIVED_FROM
to: Agent harness, scoped to executing →B3 (Routine dependency-update autom…

from: The funded migration is chosen by money, not readiness
rel: DERIVED_FROM
to: Restart funded development — buying an outcome, not sprints

from: The diagnosis is wrong and the constraint is attention, not money
rel: DERIVED_FROM
to: Restart funded development — buying an outcome, not sprints

from: Role A — Steward the installed base
rel: DERIVED_FROM
to: Reframe the report from "how to recover" to "choose a role." (Accepted…

from: Role B — Contest the agent channel
rel: DERIVED_FROM
to: Reframe the report from "how to recover" to "choose a role." (Accepted…

from: Role C — Converge with Spree
rel: DERIVED_FROM
to: Reframe the report from "how to recover" to "choose a role." (Accepted…

from: Agent harness, scoped to executing →B3 (Routine dependency-update autom…
rel: DERIVED_FROM
to: Role B — Contest the agent channel

from: Why was the 2025 engagement not renewed?
rel: BLOCKS
to: Migrations are engineered but never scheduled

from: Does the Core Team consider the new admin alive?
rel: BLOCKS
to: The half-built admin becomes a permanent third state

from: Does Spree's commit volume reflect human or generated work?
rel: BLOCKS
to: Spree takes the new-project market

from: Publish technical decisions — restart the status posts, file forward-lo…
rel: DERIVED_FROM
to: solidusio/solidus #5391 — new admin porting checklist, open since Sept 2023

from: Decide the admin — by manufacturing the evidence, not deliberating with…
rel: DERIVED_FROM
to: solidusio/solidus #5391 — new admin porting checklist, open since Sept 2023

from: A definition existed. Issue #5391 (open since Sept 2023) publishes the…
rel: DERIVED_FROM
to: solidusio/solidus #5391 — new admin porting checklist, open since Sept 2023

from: Diagnose the admin's sequencing against Larson's migration playbook, an…
rel: DERIVED_FROM
to: solidusio/solidus #5391 — new admin porting checklist, open since Sept 2023

from: A definition of "finished" existed, and the money was not wired to it
rel: DERIVED_FROM
to: solidusio/solidus #5391 — new admin porting checklist, open since Sept 2023

from: The hard screen gets deferred for an easy one
rel: DERIVED_FROM
to: solidusio/solidus #5391 — new admin porting checklist, open since Sept 2023

from: Migrations are engineered but never scheduled
rel: DERIVED_FROM
to: solidusio/solidus #5391 — new admin porting checklist, open since Sept 2023

from: Dual asset-pipeline support, with an agent-executed migration
rel: DERIVED_FROM
to: solidusio/solidus #5410 — new admin breaks asset compilation when the host app has Tailwind

from: Dual asset-pipeline support, with an agent-executed migration
rel: DERIVED_FROM
to: solidusio/solidus #6327 — installer fails with a Sprockets error

from: Dual asset-pipeline support, with an agent-executed migration
rel: DERIVED_FROM
to: solidusio/solidus #6516 — align the install instructions with the storefront

from: Metadata was misleading; the threads say more. Five chaimann drafts hav…
rel: DERIVED_FROM
to: solidusio/solidus #6295 — confirmation dialog PR, adopted July 2026

from: The last developer's work was abandoned mid-flight
rel: DERIVED_FROM
to: solidusio/solidus #6295 — confirmation dialog PR, adopted July 2026

from: Metadata was misleading; the threads say more. Five chaimann drafts hav…
rel: DERIVED_FROM
to: solidusio/solidus #6232 — shipping methods draft PR

from: The last developer's work was abandoned mid-flight
rel: DERIVED_FROM
to: solidusio/solidus #6232 — shipping methods draft PR

from: The last developer's work was abandoned mid-flight
rel: DERIVED_FROM
to: solidusio/solidus #6228 — store create/edit draft PR

from: The last developer's work was abandoned mid-flight
rel: DERIVED_FROM
to: solidusio/solidus #6236 — option types draft PR

from: The last developer's work was abandoned mid-flight
rel: DERIVED_FROM
to: solidusio/solidus #6296 — product categories draft PR

from: The last developer's work was abandoned mid-flight
rel: DERIVED_FROM
to: solidusio/solidus #6298 — tax rate create/edit draft PR

from: The last developer's work was abandoned mid-flight
rel: DERIVED_FROM
to: solidusio/solidus #6302 — payment methods create/edit draft PR

from: Record the courtesy-window answers; stakeholders none reached to partial (rev 24)
rel: DERIVED_FROM
to: Solidus Slack — courtesy-window thread: draft posted, Core Team reply

from: Record the follow-up answers: admin a priority, funding model deliberate (rev 25)
rel: DERIVED_FROM
to: Solidus Slack — courtesy-window thread: draft posted, Core Team reply

from: Superseded: last blog post October 2025 / nine months of silence
rel: DERIVED_FROM
to: solidus.io blog — status update Solidus v4.7, 5 May 2026

from: Record the rev-26 re-verification, evidence window 2026-08-08
rel: DERIVED_FROM
to: GitHub API re-verification sweep 2026-08-08

from: Record the rev-26 re-verification, evidence window 2026-08-08
rel: DERIVED_FROM
to: Open Collective ledger re-check 2026-08-08

from: Superseded: tested against unreleased Rails and Ruby versions
rel: DERIVED_FROM
to: Rails and Ruby release dates plus Solidus CI adoption commits

total: 118
observed: 68
web: 32
user: 12
inferred: 6