Backlog Unificado
Projeto: RioNoTeatro. Fonte principal: /www/wwwroot/rionoteatro.com.br/docs/BACKLOG.md.
Modo read-only: ações de escrita ficam disponíveis apenas para o Cérebro.
Sem itens pendentes em /www/wwwroot/rionoteatro.com.br/docs/BACKLOG.md.
Especificações Disponíveis (fora da fila pendente)
- BK-136
- BK-137
- BK-138
- BK-147
- BK-148
- BK-149
- BK-150
- BK-151
- BK-156
- BK-158
- BK-159
- BK-160
- BK-161
- BK-162
- BK-163
- BK-164
- BK-165
- BK-166
- BK-170
- BK-171
- BK-172
- BK-177
- BK-183
- BK-186
- BK-187
- BK-189
- BK-190
- BK-191
- BK-192
- BK-193
- BK-195
- BK-196
- BK-197
- BK-198
- BK-199
- BK-201
- BK-205
- BK-207
- BK-208
- BK-209
- BK-210
- BK-211
- BK-212
- BK-213
- BK-214
- BK-215
- BK-216
- BK-217
- BK-218
- BK-219
- BK-220
- BK-221
- BK-229
- BK-230
- BK-231
- BK-232
- BK-233
- BK-234
- BK-235
- BK-236
- BK-239
- BK-240
- BK-241
- BK-242
- BK-243
- BK-244
- BK-245
- BK-246
- BK-248
- BK-249
- BK-250
- BK-251
- BK-252
- BK-253
- BK-254
- BK-255
- BK-256
- BK-257
- BK-258
- BK-259
- BK-260
- BK-261
- BK-262
- BK-263
- BK-264
- BK-265
- BK-266
- BK-267
- BK-268
- BK-269
- BK-270
- BK-271
- BK-272
- BK-275
- BK-276
- BK-277
- BK-278
- BK-279
- BK-280
- BK-295
- BK-313
- BK-341
- BK-345
- BK-346
- BK-348
- BK-349
- BK-352
- BK-556
- BK-557
Detalhe do BK Selecionado
[BK-349] Grafo de dependências operacionais da VPS
> Aberto em 24/08/2026. Ordem revista no mesmo dia: a fatia estreita do
> grafo (reachability + includes + cron) foi promovida para a **Fase -1 do
> BK-348**, porque medir alcançabilidade antes de migrar corta a superfície de
> 943 para ~351 arquivos e revela 14 arquivos que só o cron alcança — invisíveis
> ao espelho 8.3. Este BK segue com o resto do escopo, reaproveitando as
> tabelas nodes/edges que o BK-348 vai produzir.
Problema
Ninguém consegue responder rápido: "se eu editar este arquivo, o que quebra?".
A resposta hoje está espalhada em ~48 memórias soltas e dezenas de docs:
- "re-seal obrigatório após editar arquivo monitorado, senão o MP integrity
guard spamma a cada 30min"
- "varredura de cron inclui
/etc/cron.d" — 17 automações moram lá, e
crontab -l não mostra nenhuma
- "push admin nunca para cliente"
- "sigaautobot é symlink para
.com.br" - BK-345 é duas coisas diferentes (créditos de produtor no código, Web Push
nos docs) — colisão de ID que só foi descoberta por acidente
Isso é literalmente um grafo arquivo → cron → tabela → canal → audiência que
hoje vive na cabeça do ADMIN.
Por que grafo, e por que NÃO Neo4j
Os dados de negócio não são problema de grafo: 51.064 clientes, 72.368
pedidos, 12.498 sessões, 1.267 peças, 94 tabelas. MySQL resolve com JOIN.
Neo4j custaria um serviço a mais (JVM, ~1-2 GB de RAM, backup próprio, porta,
monitoramento) numa VPS de 15 GB que já carrega vários sites, PM2 e containers.
E criaria uma segunda fonte da verdade num sistema que já precisou de um
integrity guard justamente porque drift acontece.
Decisão: grafo dentro do que já existe. Duas tabelas nodes/edges em
SQLite no lado do Cérebro (Node 22, sqlite3 já no PATH) ou MySQL 8.0.45, que
já tem WITH RECURSIVE. Custo: um scanner e duas tabelas. Só migra para banco
de grafo dedicado se a travessia ficar lenta, o que neste volume não fica.
Escopo (o que fica aqui, depois da Fase -1 do BK-348)
A Fase -1 do BK-348 entrega os nós arquivo/cron e as arestas
inclui/executa. Restam para este BK:
- Resto do scanner, lendo do código e não de doc manual:
- ~~
/etc/cron.d+crontab -l→ nóscron~~ (feito na Fase -1 do BK-348) - ~~
include/requiredo PHP → arestasarquivo → arquivo~~ (idem) - timers systemd → nós
cron(não coberto pela Fase -1) - queries → arestas
arquivo → tabela [[wikilinks]]das memórias → arestasmemoria → memoria- IDs
BK-NNNnos docs → nósbacklog, com detecção de colisão
- Travessia por
WITH RECURSIVE: "o que depende de X", "o que X afeta". - Consumo pelo guard. O
/root/cerebro/guard/hoje é regex sobre string de
shell. Com o grafo ele responde por travessia: "esse arquivo tem aresta
monitorado_por → mp_integrity_guard, exige re-seal". Ataca uma classe
inteira de bug em vez de um caso.
Critério de sucesso
O grafo tem que ser gerado do código, nunca escrito à mão. Doc manual não
sobrevive nesta VPS — a quantidade de .bkp_original é a prova. Se o scanner
não rodar em cron, o grafo apodrece e vira mais uma fonte que mente com
confiança.
Ligações
- Depende de BK-348 Fase 0 (limpeza do webroot).
- Consome e reforça
/root/cerebro/guard/(ver memóriaproject_vps_guard_hooks).
Lições já colhidas no protótipo (24/08/2026)
Valem para quem for escrever o scanner definitivo:
includeliteral não existe neste código. A primeira versão do scanner
achou zero arestas nos crons porque eles usam
require dirname(__DIR__) . '/data/setup.php'. Resolver __DIR__,
__FILE__ e dirname() aninhado é obrigatório, não refinamento.
\brequirecasa dentro derequires_qrerequiredScopes. Sem
(?![a-zA-Z0-9_]) no fim, o ruído inflou "não resolvidos" de 9 para 26.
- Análise estática sozinha é piso. 289 arestas web ficam como
require $helper;. Sem um passo de runtime (auto_prepend_file +
get_included_files()), o grafo não autoriza apagar nada.
- O grafo já achou um bug:
admin/data/__CLASS.SQL.phpinclui
/ecompact/__emails.php, que não existe em disco.