Реализация: sim3/sim3_anti_graveyard.py, numpy, seed=42, фигуры → figures/. Спека самодостаточна: реализуется без единого вопроса. Код — не здесь; здесь уравнения, параметры, допуски, приёмка.
Агентная токеномика с тремя популяциями (юзеры, артисты, спекулянты) и двумя режимами казны. Режим A («Закон Tonify»): казна собирает 5% комиссии с реальных внешних донатов; выплаты (кэшбэк/поощрения) в месяц t ≤ внешнего притока месяца t; эмиссии нет. Режим B (STEPN/Axie): выплаты юзерам — из эмиссии токена; доходность каждого зависит от притока новых; цена токена — функция чистого спроса. Форма коллапса B калибруется на Hamster Kombat: DAU 300M→12M за 6 месяцев, фактор ×25 (Caladan, апрель 2026 — якорь из ТЗ). Горизонт 36 мес, шаг — месяц. Выходы: траектории казны и DAU обоих режимов; распределение даты смерти B по 200 прогонам; один слайд-график «две кривые». Фальсификатор — §8.
| Параметр | Значение | Источник |
|---|---|---|
| Донат-чек | lognormal(медиана $5, σ=0,8) → средний чек $6,9 | допущение sim1, форма Bandcamp/Twitch (paper/RESULTS.md «Честные ограничения» п.2); в sim3 используется агрегатом — только среднее $6,9, как в milestone-солвере sim1 |
| Доля суперфанов s | 1,7% (диапазон 0,6–1,7%, правило 97-2-1) | SoundCloud FPR + paper/CRITIC.md §7; база 1,7% выбрана намеренно = конфигурация milestone-расчёта sim1, что даёт бесплатный кросс-чек казны (T3b) |
| Кеф k (платежей/суперфан/год) | 4 | ось «Объекта 3» sim1; 4 = значение milestone-расчёта sim1 (RESULTS §4); бенчмарки Twitch/Patreon 12 — не используем, консервативно |
| Комиссия Tonify | 5% от доната | PAPER §5, RESULTS §3 |
| TON-рельса | доставка 99,9% ($1 → артисту 94,9¢ / Tonify 5,0¢ / рельса 0,1¢) | RESULTS §3, fig4 |
| Контрактный сплит direct-механизма | independent ×1,0; signed-360 ×0,70 (DEAL360) | Addendum v0.5, fig7 (direct·360 MVA 4 577 = 3 204/0,70) |
| Лейбл-проход 6,8% (LABEL_PASS) | не применяется в sim3 | Addendum v0.5: 6,8% — цепочка пуло-подобных роялти; донат — direct-механизм, к нему применяется 360-сделка ×0,70. Обоснование — §6 |
| Распределение дохода по артистам | Парето-хвост α=1,4, Gini 0,97; нижние 90% артистов держат ~0,9% денег | PAPER §2, RESULTS «Валидация мира» |
| Якорь | Значение | Статус |
|---|---|---|
| Hamster Kombat: DAU 300M→12M за 6 мес после пика (×25; остаток 4% пика) | главный калибровочный якорь формы коллапса | источник: Caladan, апрель 2026 (из ТЗ). Целевой чистый темп сжатия в фазе коллапса: 25^(1/6) ≈ 1,71×/мес, т.е. ~41,5% DAU в месяц |
| STEPN GST 2022: payback входа на пике ~20–40 дней; затем цена GST −99%+ | стилизованный факт, флаг: точная цифра не проверена по первоисточнику | используется только для порядка величины стартовой доходности y₀ (payback ~2 мес — консервативнее пика) |
| Axie SLP 2021–22: эмиссия » сжигание, цена SLP −99% от пика, выплаты обесценились | стилизованный факт, флаг: точная цифра не проверена по первоисточнику | используется только качественно: казна/выплаты в собственном токене умирают вместе с ценой |
Hamster — это tap-to-earn без платного входа; STEPN/Axie — earn с платным входом. Sim3 намеренно совмещает: механика входа/эмиссии — STEPN/Axie-типа, форма коллапса DAU — хамстер-якорь. Это композит, а не модель конкретного проекта — зафиксировано в §11.
| # | Параметр | База | Обоснование |
|---|---|---|---|
| P1 | U₀ — стартовый DAU обоих режимов | 1 000 000 | выбор для сопоставимости с milestone-якорем sim1 (1M MAU → $1 955/мес комиссии); допущение |
| P2 | c_min — базовый месячный churn (оба режима) | 0,05 | допущение: порядок месячного оттока consumer-приложений; одинаков в A и B, чтобы вся разница режимов шла из механики денег, а не из вшитых констант |
| P3 | i_A — органический приток A, доля от U_t | 0,06/мес | допущение: скромный органический рост; чистый рост A = +1%/мес (6% − 5%). Фальсификатор §8 отдельно гоняет i_A = 0 |
| P4 | ρ — доля притока казны A, уходящая в кэшбэк | 0,5 | допущение (политика, не экономика): инвариант A выполняется при любом ρ ∈ [0,1]; sensitivity не требуется |
| P5 | c_e — стоимость входа в B (покупка токена/NFT) | $100 | стилизация STEPN-кроссовка; допущение |
| P6 | y₀ — стартовая месячная доходность B | 0,5/мес (payback 2 мес) | от стилизованного факта STEPN (§1.2), взято консервативнее пика; флаг |
| P7 | ε — эмиссия токенов юзеру | 50 ток./юзер/мес | производная: ε = y₀·c_e/P₀ при P₀=$1; не свободный параметр |
| P8 | δ_u — доля заработка, продаваемая юзером | 0,7 | допущение: 30% реинвест/холд (STEPN-минты, апгрейды) |
| P9 | κ — эластичность цены к дисбалансу спроса | 0,5 | допущение; цена — стилизация (§11), κ формует крутизну, калибруется в узком гриде §7 |
| P10 | ν — вирусный коэффициент притока B | 0,6 | калибровочная ручка под T1 (грид §7.1) |
| P11 | U_max — потолок рынка B (TAM) | 20 000 000 | калибровочная ручка под T1: даёт пик в месяцах 6–12 |
| P12 | λ — чувствительность оттока к падению доходности | 0,5 | калибровочная ручка под T1 |
| P13 | c_max — потолок месячного оттока B | 0,45 | от хамстер-темпа ~41,5%/мес (§1.2); верхняя граница clip |
| P14 | ω — доля спекулянтских покупок от входного объёма юзеров | 0,3 | допущение |
| P15 | d_trig — drawdown цены, триггер паники спекулянтов | ~U[0,15; 0,35] на прогон | допущение; стохастика тайминга паники (§5) |
| P16 | ψ — темп панического сброса инвентаря спекулянтов | 0,6/мес | допущение: слив за 2–3 мес, затяжная форма как у Hamster |
| P17 | σ_I — шум притока B (лognormal, мультипликативный) | 0,2 | допущение (§5) |
| P18 | σ_P — шум цены B (лognormal, мультипликативный) | 0,15 | допущение (§5) |
| P19 | φ_B — fee протокола B, в токенах, от sell-объёма | 0,05 | выбор для чистоты сравнения: та же ставка 5%, что у Tonify; различие режимов — в валюте и базе сбора, не в ставке |
| P20 | cap притока | min(y_t/y₀, 2) | допущение: вирусность не растёт бесконечно с доходностью |
| P21 | Артист уходит при доходе < $1/мес 6 мес подряд | — | допущение (порог логистики: ниже минимума вывода всё равно ничего не происходит) |
| P22 | N_art — размер артистного слоя | 10 000 агентов | допущение (достаточно для стабильной суммы весов; веса — из распределения sim1) |
| P23 | DAU ≈ MAU на месячном шаге | — | допущение-упрощение: шаг месяц не различает; в тексте пишем DAU как в ТЗ |
Три популяции. Месячный шаг t = 0..36. Всё — агрегатные переменные состояния (агентность — в поведенческих правилах популяций, не в поштучной симуляции юзеров; поштучный слой — только артисты, §2.3). Меньше параметров > больше реализма.
Режим A:
приток: I_t = i_A · U_t (базовый органический)
отток: O_t = c_min · U_t (базовый churn; доходности, к которой
быть чувствительным, в A нет — юзер
не зарабатывает, он донатит)
U_{t+1} = U_t + I_t − O_t
Донатный поток (реальные внешние деньги, $/мес):
D_t = U_t · s · (k/12) · $6,9 · w_t
где w_t ∈ [0,1] — коэффициент живого каталога артистов (§2.3), w₀ = 1. При U=1M, w=1: D = $39 100/мес, комиссия $1 955/мес — ровно milestone-число sim1 (кросс-чек T3b).
Режим B:
доходность: y_t = ε · P_t / c_e (месячный ROI фарма к цене входа)
приток: I_t = ν · min(y_t/y₀, 2) · U_t · (1 − U_t/U_max) · ξ_I,t
ξ_I,t ~ lognormal(0, σ_I) (шум притока, §5)
отток: c_t = clip(c_min + λ · max(0, 1 − y_t/y₀), c_min, c_max)
U_{t+1} = U_t + I_t − c_t · U_t
Механика понци-контура: доходность растёт только с ценой; цена растёт только при Buy > Sell (§3.2); Buy пропорционален притоку НОВЫХ. Новые кончились → цена вниз → доходность вниз → приток вниз, отток вверх → смерть. Требование ТЗ «доходность зависит от притока новых» замкнуто через цену — это и есть минимальная честная механика.
Агрегированный пул с инвентарём Q_t (токены) и переключателем panic ∈ {0,1}.
пока panic=0 и drawdown_t < d_trig:
покупают: Buy_spec_t = ω · c_e · I_t ($; докупают за новыми юзерами)
Q_{t+1} = Q_t + Buy_spec_t / P_t
при drawdown_t ≥ d_trig (drawdown_t = 1 − P_t / max_{τ≤t} P_τ):
panic := 1 (навсегда: sticky, обратно не входят)
пока panic=1:
продают: Sell_spec_t = ψ · Q_t (токены); Q_{t+1} = Q_t · (1−ψ); покупок нет
Роль в динамике: усиливают рост (добавляют ω к спросу) и усиливают коллапс (залповый сброс инвентаря в падение). Спекулянты — капитал, не DAU: в кривую DAU не входят. В режиме A спекулянты отсутствуют структурно: нет актива с ценой — донат является потребительским расходом, на нём нет позиции, которую можно продать. Это не упрощение, это свойство режима; печатается в выводах.
N_art = 10 000 агентов с весами дохода v_j, сэмплированными из распределения sim1
(lognormal-тело / Pareto-хвост α=1,4; нормировка Σv_j = 1; валидация сэмпла: топ-1%
агентов держит ≥ 50% суммы весов — грубый слепок Gini 0,97). Доход артиста j в месяц t:
inc_j,t = D_t · v_j · 0,949 (TON-рельса, до контрактного сплита — сплит в §6).
Правило ухода: inc_j,t < $1 шесть месяцев подряд → артист уходит навсегда (P21).
Обратная связь на донатный поток: w_t = Σ_{j активен} v_j.
Решение «насколько это влияет» (требование ТЗ): по миру sim1 нижние 90% артистов держат ~0,9% денег — уход хвоста режет поток на проценты, не в разы. Ожидание: w_36 ≥ 0,97 в режиме A. Слой оставлен в модели (а не выброшен), потому что это дёшево и потому что инженер обязан НАПЕЧАТАТЬ фактический w_36 и число ушедших артистов в обоих режимах — чтобы утверждение «влияние второго порядка» было проверенным числом, а не декларацией. В режиме B донатного потока нет; артистный слой B получает inc_j,t из выплатной эмиссии пропорционально тем же весам (стилизация «артисты как креаторы контента экосистемы B»), умирает вместе с ценой — те же правила, тот же вывод в печать. Каждая печать/таблица дохода артистов B (stdout и README) несёт маркер-сноску: «бумажная эмиссия (в зомби-фазе — токены с ценой на дне), не внешние деньги» — чтобы $-эквиваленты B не читались как сопоставимые с донатными $ режима A.
Внешний приток казны (только реальные $ извне, никакой эмиссии):
inflow_t = 0,05 · D_t
Выплаты (кэшбэк/поощрения юзерам и артистам):
payout_t = ρ · inflow_t, ρ = 0,5
Казна:
T^A_{t+1} = T^A_t + inflow_t − payout_t, T^A_0 = 0
Закон (инвариант, hard assert в коде на каждом шаге):
payout_t ≤ inflow_t и T^A_t ≥ 0 для всех t
Инвариант выполняется структурно — по построению, при любых траекториях U_t, включая вымирающие: приток → 0 влечёт выплаты → 0, казна замирает на плато, но не уходит в минус. Это и есть содержание закона: смерть казны в A невозможна не потому, что параметры удачные, а потому что выплатам запрещено превышать приток. Assert обязан стоять в коде несмотря на структурность — он ловит ошибки реализации (T2).
Кэшбэк payout_t возвращается юзерам, но НЕ создаёт петли доходности: кэшбэк ≤ 5% от собственного доната юзера, ROI строго отрицательный, «фармить донаты» нельзя — поэтому в A нет ни спекулянтов, ни чувствительности притока к «доходности» (§2.1, §2.2).
Токен с ценой P_t ($), P₀ = 1. Потоки за месяц (в токенах, если не указано $):
эмиссия юзерам (выплаты): M_t = ε · U_t (mint, ничем не обеспечен)
продажи юзеров: Sell_u,t = δ_u · ε · U_t
продажи спекулянтов: Sell_s,t = ψ · Q_t · panic
покупки (новые деньги, $): Buy$_t = c_e · I_t · (1 + ω · (1−panic))
Sell_t = Sell_u,t + Sell_s,t Buy_t = Buy$_t / P_t
Цена — стилизованная функция чистого спроса (§11, ограничение):
P_{t+1} = P_t · (Buy_t / Sell_t)^κ · ξ_P,t, ξ_P,t ~ lognormal(0, σ_P), floor P ≥ $0,001
Казна протокола (номинирована в собственном токене — определяющее свойство режима):
Z_{t+1} = Z_t + φ_B · Sell_t, Z₀ = 10M токенов
T^B_t ($) = Z_t · P_t
Выплаты режима B в $-эквиваленте: payoutB_t = M_t · P_t — не ограничены ничем.
Внешний приток B: inflowB_t = Buy$_t. Инженер обязан печатать помесячный
коэффициент понциности payoutB_t / inflowB_t для обоих режимов (в A он ≤ ρ·1 ≤ 1
структурно; в B он пересекает 1,0 в момент замедления роста — это число для дека,
новой механики не требует).
Механическое отличие режимов — одной строкой: A собирает 5% в долларах и платит меньше, чем собрала; B платит эмиссией больше, чем собирает, и хранит казну в бумаге, цену которой сама же обрушивает. Обе казны берут 5% (P19) — различие не в ставке.
Смерть по DAU (основной, единый для A и B, хамстер-порог):
режим мёртв в месяц t*, если U_t < 0,04 · max_{τ≤t}(U_τ) два месяца подряд;
t* = первый из этих двух месяцев
Порог 4% = 12M/300M (Hamster). Требование «два месяца подряд» — анти-дребезг на шуме (допущение). Если условие не наступило до t=36 — прогон «жив на горизонте» (в гистограмме fig12 такие прогоны, если появятся, показываются отдельным столбцом «36+»).
Смерть казны (вторичный датчик, печать в числах): T_t ($) < 5% от max_τ T_τ ($) два месяца подряд. В A недостижима структурно (§3.1, казна не убывает); в B — фиксируется и печатается рядом с датой смерти по DAU. Разводка двух смертей — требование §8.
Что стохастично (ровно три источника, всё остальное детерминировано):
Сиды: прогон r ∈ {0..199} использует np.random.default_rng([42, r]) — базовый
seed=42, сиды прогонов 0..199, полный детерминизм при любом порядке исполнения.
Веса артистов v_j сэмплируются один раз из np.random.default_rng(42) и общие для
всех прогонов (мир один, стохастика — в динамике).
Режим A в базовой конфигурации детерминирован (шума нет): его выводы — траектория и аналитика, Монте-Карло по ТЗ требуется только для B. Фигуры B показывают медиану и межквартильный коридор по 200 прогонам; гистограмма даты смерти t* — fig12.
Донат в sim3 — direct-механизм (fig7, Addendum v0.5). Каждое выходное число дохода артистов печатается в ДВУХ колонках:
| Колонка | Множитель к доходу артиста | Источник |
|---|---|---|
| independent | ×1,0 | Addendum v0.5 |
| signed (360-сделка) | ×0,70 | Addendum v0.5, DEAL360 |
LABEL_PASS = 6,8% НЕ применяется: это проход пуло-подобных роялти через лейбловую цепочку; к direct-донату применим контрактный сплит 360-сделки (в fig7 ровно так: direct·360 MVA 4 577 = 3 204 / 0,70).
Позиция economist по казне (требование ТЗ «согласен/не согласен»): согласен —
сплит контракта НЕ влияет на динамику казны Tonify. Обоснование: комиссия 5%
берётся на рельсе с транзакции доната (fig4: $1 → 94,9¢ артисту / 5,0¢ Tonify /
0,1¢ рельса) — до того, как артистова доля делится с лейблом по 360-контракту.
Контракт — двусторонняя сделка артист↔лейбл за пределами платформы; казна видит
5,0¢ с доллара при любом контракте. Следствие для модели: колонки signed/independent —
это пост-обработка артистного слоя (§2.3): inc^signed_j,t = inc_j,t · 0,70,
включая порог ухода P21 (signed-артист достигает $1/мес позже → уходит раньше;
w_t считается отдельно для обеих колонок, базовая динамика казны берёт independent-w_t,
дельта печатается). Инженер обязан вывести обе колонки в числовом блоке результатов:
агрегатный доход артистов/мес на t=36, число выживших артистов, w_36 — everything ×2.
Числовой блок VALIDATION печатается в stdout до блока результатов; провал любой
мишени = симуляция не принимается (жанр sim1: мишень → получено → ✓/✗).
T1 — калибровка B консистентна с Hamster (формулировка v1.2; не «воспроизводит»). По 200 прогонам: для каждого прогона фактор F_r = U_peak / U_{peak+6} (прогоны с t_peak > 30 исключаются из статистики T1 с печатью их количества).
мишень: медиана(F_r) ∈ [15, 35] (цель 25, допуск ±40%)
и P10(F_r) ≥ 10 (даже слабые коллапсы — не меньше порядка)
и медиана t_peak ∈ [4, 14] (пик — не мгновенный и не за горизонтом)
Честная семантика T1 (red team, v1.2): масштаб фактора F задаётся потолком оттока c_max (P13), который сам выведен из того же хамстер-якоря — T1 полуциркулярна по масштабу и проверяет согласованность конструкции, а не независимое воспроизведение. Числа red team: medF при c_max 0,30 / 0,375 / 0,45 / 0,60 → 6,2 / 11,0 / 20,8 / 101,7; κ на F не влияет вообще. Эмерджентная часть T1 — тайминг пика и то, что коллапс эндогенно загоняет отток на потолок (в окне коллапса отток сидит на клипе 83% месяцев): модель могла бы не дойти до клипа — доходит.
T2 — инвариант закона Tonify (hard assert, не мишень-с-допуском).
Для всех t всех конфигураций A (база §2.1, фальсификатор-сетка §8, обе контрактные
колонки): payout_t ≤ inflow_t + 1e-9 и T^A_t ≥ −1e-9. Нарушение = AssertionError,
падение прогона. Дополнительно: T2b — на фальсификатор-сетке §8 симуляционный t_death
совпадает с аналитическим ln(0,04)/ln(1−c) с точностью ±1 мес (дискретизация).
T3 — выбор economist (двойная; T3a в редакции v1.1, см. CHANGELOG):
T3a: (i) 200/200 прогонов B: min_{t≤36} U_t ≤ 0,20 · U_peak
(каждый прогон хотя бы раз теряет ≥80% пиковой аудитории);
(ii) медиана t* по строгому хамстер-критерию §4 ≤ 36
(эквивалентно: ≥101/200 прогонов строго мертвы на горизонте);
(iii) печать разбивки: N_dead/200 по §4, N_zombie/200,
для зомби-прогонов — min_t U_t/U_peak и U_36/U_peak.
T3b: кросс-чек с sim1: приток казны A при U=1M, w=1 равен $1 955/мес ± 1%
(milestone-число RESULTS §4: 1M × 1,7% × 4/12 × $6,9 × 5%)
Обоснование порогов T3a — внешнее, не из прогона (анти-circular): 80% потери аудитории = «смерть бизнес-кейса» по определению, и порог слабее обоих реальных якорей — Hamster потерял 96% DAU, GST −99% цены, — т.е. мишень консервативна к реальности (только проверяемые доводы; апелляций к внутренней переписке команды публичный док не содержит — v1.2). Форма min_{t≤36} выбрана потому, что не зависит от фазы зомби-цикла в точке t=36 (анти-флап). (ii) — исходный дух T3 «типичная смерть за конечное время ≤ 36», перенесённый на медиану; требование ко всем 200 прогонам сохранено в (i). Строгий порог 4% (§4) не меняется — он якорный (12M/300M) и остаётся критерием для t* и fig12.
Иерархия результатов (v1.2, обязательна в RESULTS и README): флагманское устойчивое число — «200/200 прогонов теряют ≥80% пика»: выдержало весь стресс red team (обе формы цены, κ, δ_u, c_min до 12%, fee-варианты, σ_P=0 — §11.1). Строгая статистика «182/200, медиана t*=12» — форм-зависима и цитируется ТОЛЬКО с квалификатором «при базовой форме цены §3.2», никогда как самостоятельный факт.
Процедура калибровки под T1 (чтобы инженер не задавал вопросов): заморожено всё, кроме трёх ручек (ν, U_max, λ) и при необходимости κ. Фиксированный грид: ν ∈ {0,4; 0,6; 0,8}, U_max ∈ {10, 20, 40}M, λ ∈ {0,35; 0,5; 0,65} (27 точек × 200 прогонов — секунды рантайма). Правило выбора: точка с медианой F_r, ближайшей к 25, при выполнении остальных условий T1; тай-брейк — меньший |медиана t_peak − 9|. Выбранная точка печатается в VALIDATION и фиксируется в коде как база. Если ни одна точка грида не проходит T1 — расширить грид по κ ∈ {0,35; 0,5; 0,65} один раз; если и это не проходит — стоп, возврат спеки economist с числами (не подгонять молча ничего сверх перечисленного).
«Если режим A тоже умирает при нулевом росте — найти при каком оттоке и честно показать.»
Развести два разных утверждения — обязательно:
t_death(c) = ln(0,04) / ln(1−c) (аналитика)
порог горизонта: t_death ≤ 36 ⇔ c ≥ c* = 1 − 0,04^{1/36} ≈ 8,55%/мес
На бесконечном горизонте A с нулевым притоком умирает по DAU при ЛЮБОМ c > 0 — писать это прямо, без смягчений.
Требования к исполнению: прогнать сетку c ∈ {2%, 5%, 8,55%, 12%, 20%, 41,5%} при i_A = 0 (41,5% = хамстер-темп, для сопоставления масштаба); напечатать таблицу c → t_death (симуляция и аналитика рядом, T2b); показать на фигуре (панель-инсет fig11, §9) симуляционные точки поверх аналитической кривой t_death(c) с вертикалью c* ≈ 8,55% (#FFD426). Обобщение на i_A > 0 (v1.2): динамика A зависит только от чистого темпа g = i_A − c (U_{t+1} = U_t·(1 + i_A − c)), поэтому смерть A по §4 ⇔ c − i_A ≥ 8,55%/мес — сетка при i_A = 0 покрывает все i_A через чистый темп (проверено red team симуляцией: при i_A = 6% смерть при c ≥ 14,6% — сходится с 6% + 8,55%). В тексте результатов зафиксировать формулировку (редакция v1.2, под фактические числа): «Закон Tonify гарантирует ненулевую казну, но не бессмертие продукта: при чистом темпе c − i_A ≥ 8,55%/мес продукт A умирает по хамстер-критерию внутри 36 мес — разница с B в том, что смерть A требует внешней причины (продукт перестал привлекать), а катастрофа B встроена в казначейскую механику: 200/200 прогонов теряют ≥80% пиковой аудитории (инвариант ко всем стресс-формам red team, §11.1); при базовой форме цены §3.2 медианная смерть по хамстер-критерию — месяц 12 [IQR 11–13]. Казна B, номинированная в собственном токене, “умирает” раньше продукта (медиана — месяц 6) — но это дефект деноминации, а не расхода: в $-моменте сбора она монотонно растёт, 0/200 смертей (§11.12); катастрофу продукта создаёт эмиссия — это два разных дефекта режима B. Выжившие по строгому критерию прогоны — не жизнь, а зомби-циклы на 5–8% пика (§11.11)».
Общее: фон #0D0A1A; палитра: режим A #6B2FFF, режим B #FF4D8D, вторичные линии/казна #00D4F5, акценты/пороги #FFD426; сетка едва видимая; каждая фигура несёт подпись происхождения каждой кривой: «симуляция (медиана, IQR, 200 прогонов)» для B, «симуляция (детерминированная траектория)» для A, «аналитика» для замкнутых формул. Оси подписаны всегда: «месяц» / «DAU» / «казна, $» / «доля прогонов».
fig11_treasury_dau.png — рабочая фигура, 3 панели:
fig12_death_dist.png — гистограмма месяца смерти t* режима B по 200 прогонам (критерий §4), bin = 1 мес; вертикаль медианы; аннотации: «мертво: N/200», «режим A: смертей казны 0/всех конфигураций (структурно, T2); по DAU при базовом росте — жив на горизонте». Столбец «36+», если есть выжившие прогоны.
fig13_two_curves.png — слайд-график, один месседж. DAU, нормированный к пику, 36 мес, ровно две кривые: A (#6B2FFF) живёт, B (#FF4D8D, медиана 200 прогонов) умирает. Минимум чернил: без сетки, без IQR, крупные подписи прямо у кривых («выплаты ≤ приток» / «выплаты из эмиссии»), одна вертикаль-отметка медианной даты смерти B (#FFD426). Мелкая сноска происхождения (v1.2): «A: детерминированная симуляция; B: медиана 200 прогонов; калибровка ×25/6 мес — Hamster (Caladan, апр. 2026); наклон A — допущение (органика 6%/мес > churn 5%/мес, P2–P3): закон Tonify гарантирует казну ≥ 0, не рост DAU». Никаких других элементов: это один слайд для дека.
np.random.default_rng([42, r])
(§5) и default_rng(42) для весов артистов. Повторный запуск даёт байт-в-байт те же
числа и фигуры. Никакого глобального np.random.seed, никакого os.urandom, никакой
зависимости от порядка итерации по прогонам.sim3/sim3_anti_graveyard.py; запуск python3 sim3/sim3_anti_graveyard.py;
фигуры пишутся в figures/; stdout: блок VALIDATION (§7), затем блок RESULTS
(числа обеих контрактных колонок §6, коэффициент понциности §3.2, таблица
фальсификатора §8, w_36 и ушедшие артисты §2.3, квантили U_36/U_peak по
строго-мёртвым прогонам — медиана и доли >50% / >100% пика (§11.11), маркер
«бумажная эмиссия» у артист-чисел B (§2.3)).| # | Проверка | Критерий |
|---|---|---|
| 1 | VALIDATION печатается до RESULTS | да/нет |
| 2 | T1 медиана F ∈ [15,35], P10 ≥ 10, t_peak ∈ [4,14] | числа в допуске |
| 3 | T2 assert в коде, T2b ±1 мес | прогон не падает; таблица §8 |
| 4 | T3a-v1.1: 200/200 потеря ≥80% пика; медиана t* ≤ 36; разбивка dead/zombie напечатана; T3b $1 955 ± 1% | числа |
| 5 | Обе контрактные колонки (×1,0 / ×0,70) во всех числах дохода артистов | печать ×2 |
| 6 | Коэффициент понциности payout/inflow обоих режимов в RESULTS | печать |
| 7 | Фальсификатор: таблица c → t_death (сим+аналитика), c* ≈ 8,55% на fig11c | печать + фигура |
| 8 | fig11, fig12, fig13 — палитра, оси, подписи «симуляция vs аналитика» | визуальная проверка |
| 9 | Рантайм ≤ 2 мин; повторный запуск байт-в-байт | секундомер + diff |
| 10 | Секция «Честные ограничения» дополнена фактами прогона (w_36 и пр.) | текст |
| 11 | v1.2: квантили U_36/U_peak мёртвых в stdout; маркер «бумажная эмиссия» у артист-чисел B; сноска fig13 про наклон A; строгие числа везде с квалификатором формы цены | печать + фигура + текст |
Спека закрыта. Вопросы инженера по недостающим числам — это дефект спеки: вернуть economist с указанием пункта, а не додумывать.
Вход: red team подтвердила механику, калибровку и код (реализация 1:1, детерминизм); ядро «200/200 теряют ≥80% пика» выдержало полный стресс (обе формы цены, κ ∈ {0,35–0,65}, δ_u ∈ [0,3–0,9], c_min до 12%, fee-варианты, σ_P=0). Блокеры касались формулировок и печати. Все требования выполнены, ни одно не оспорено — каждая находка воспроизведена прогонами, а обобщение c − i_A ≥ 8,55% перепроверено economist аналитически (1 + g = 1 + i_A − c; 6% + 8,55% = 14,55% ≈ симуляционным 14,6%).
Изменения по требованиям red team:
Что случилось. Engineer реализовал v1.0 1:1. T1 ✓ (медиана F=20,79, P10=16,25, t_peak=5; грид-точка ν=0,8, U_max=10M, λ=0,65, κ=0,5), T2 ✓ (0 нарушений), T2b ✓ (max Δ=0,996 мес), T3b ✓ ($1 955,00 байт-в-байт), рантайм ~1 с. T3a v1.0 провалена: 182/200 строгих смертей вместо 200/200. Engineer доказал структурно: в зомби-фазе цена сокращается в Buy_tok точно, Buy/Sell = (ν/(δ_u·y₀))·(1−U/U_max)·ξ ≈ 2,29·(1−U/U_max)·ξ — не зависит от P; после каждого коллапса при U « U_max цена гарантированно отрастает («феникс»). Дно циклов 5–8% пика > порога 4%; ни одна точка грида не даёт 200/200 (максимум 191/200). Economist проверил вывод подстановкой — подтверждён; при базовой ν=0,6 отношение 1,71 > 1, т.е. феникс — свойство уравнений, а не точки калибровки. v1.0 к тому же противоречила сама себе: fig12 предусматривала столбец «36+» (выжившие допустимы), T3a требовала нуля выживших.
Решение: вариант (а) — переформулировка T3a; механика B не тронута. Менять механику ради прохождения мишени — подгонка под результат (red team обязана такое расстрелять); удлинение горизонта ломает ТЗ и не лечит (циклы переживут любой горизонт). Зомби-фаза признана находкой, а не багом: реальные понци не умирают в ноль (GST −99% годами при живом дне DAU; хамстер-остаток 12M — зомби на 4%).
Изменено (минимальный дифф):
Факты прогона v1.0-реализации, зафиксированные как контекст решения: пик DAU B 9,82M на t=4; понциность payout/inflow пересекает 1,0 в месяц 3, пик 36,9; медиана строгой смерти t*=12 [IQR 11–13]; смерть казны B (вторичный датчик §4) медиана t=6, 183/200 — казна-в-собственном-токене умирает на ~6 мес раньше продукта.