← Dispensa: lista de comprasCONTENT HISTORY

Update to Dispensa: lista de compras

Snapshot Oct 24, 2026 · 18:05 UTC · version 0.1.3

WHAT CHANGED

Package or technical metadata updated

Package or technical metadata updated

Observed in package metadata. These changes alone do not establish a new customer-facing feature.

Save Dispensa: lista de compras and check future changes in Following.

Up to 10 plugins free · no card required.

All fields and original values.

These are saved file metadata. Open a changed file to read its text edits.

Package file

Before

Sep 30, 2026 · 23:10 UTC

6b0b10a4bdea03ad7d386f72fccb26b2165051cac27269e3997c1ade87bace41

After

Oct 24, 2026 · 18:05 UTC

f0c06f2286b678e59093fa2462a66ad30286919200825e8ccc702f80f1a70290

Package file

Before

Sep 30, 2026 · 23:10 UTC

127

After

Oct 24, 2026 · 18:05 UTC

108

Package file

Before

Sep 30, 2026 · 23:10 UTC

Not present

After

Oct 24, 2026 · 18:05 UTC

{"sha256":"30133df2701540ea4cbca5ec0a826729c3f472304852605b476aeccb1fde296e","size":519}

Package file

Before

Sep 30, 2026 · 23:10 UTC

{"sha256":"bfd484b6fce477274c097fd88492c9bd0701fabd3a53294d3f6ce63592c8820a","size":1459}

After

Oct 24, 2026 · 18:05 UTC

Not present

Compare saved observations

Download comparison JSON

Changed files

Choose a file to see its text changes. Binary or large files show metadata only.

.app.json →

.claude-plugin/plugin.json →

.codex-plugin/plugin.json →

.env.example →

.github/workflows/ci.yml →

.gitignore →

CLAUDE.md →

README.md →

alembic.ini →

alembic/env.py →

alembic/script.py.mako →

alembic/versions/0001_inicial.py →

alembic/versions/0002_config_apoio.py →

alembic/versions/0003_produto_o_que.py →

alembic/versions/0004_sentinelas.py →

assets/icon.png →

assets/logo.png →

docs/METODO.md →

docs/REVIEW-CHATGPT.md →

makefile →

mcp.json →

plans/00-esqueleto.md →

plans/01-mvp.md →

plans/02-predicao.md →

plans/03-apoio-lista.md →

plans/04-canonico-o-que.md →

plans/05-sem-null.md →

plans/06-registrar-mcp.md →

plans/Gemini_Generated_Image_suhkdhsuhkdhsuhk.jpeg →

plans/README.md →

plugin.json →

pyproject.toml →

render.yaml →

requirements-dev.txt →

requirements.txt →

server.json →

src/mcp_despensa_hub/__init__.py →

src/mcp_despensa_hub/__main__.py →

src/mcp_despensa_hub/admin.py →

src/mcp_despensa_hub/db.py →

src/mcp_despensa_hub/domain/__init__.py →

src/mcp_despensa_hub/domain/errors.py →

src/mcp_despensa_hub/legal.py →

src/mcp_despensa_hub/resolve.py →

src/mcp_despensa_hub/server.py →

src/mcp_despensa_hub/settings.py →

src/mcp_despensa_hub/shared/__init__.py →

src/mcp_despensa_hub/shared/canonico.py →

src/mcp_despensa_hub/shared/catalogo.py →

src/mcp_despensa_hub/shared/chave_nfe.py →

src/mcp_despensa_hub/shared/codigo.py →

src/mcp_despensa_hub/shared/frequencia.py →

src/mcp_despensa_hub/shared/grafo.py →

src/mcp_despensa_hub/shared/periodo.py →

src/mcp_despensa_hub/shared/preferencia.py →

src/mcp_despensa_hub/shared/sentinela.py →

src/mcp_despensa_hub/tools/__init__.py →

src/mcp_despensa_hub/tools/compra.py →

src/mcp_despensa_hub/tools/faltando.py →

src/mcp_despensa_hub/tools/historico.py →

src/mcp_despensa_hub/tools/lista.py →

src/mcp_despensa_hub/tools/ping.py →

src/mcp_despensa_hub/tools/preferencia.py →

src/mcp_despensa_hub/tools/privacidade.py →

src/mcp_despensa_hub/trace.py →

tests/conftest.py →

tests/test_canonico.py →

tests/test_catalogo.py →

tests/test_chave_nfe.py →

tests/test_compra.py →

tests/test_db.py →

tests/test_faltando.py →

tests/test_frequencia.py →

tests/test_historico.py →

tests/test_lista.py →

tests/test_periodo.py →

tests/test_ping.py →

tests/test_plugin.py →

tests/test_preferencia.py →

tests/test_preferencia_tools.py →

tests/test_privacidade.py →

tests/test_sentinela.py →

tests/test_server_health.py →

tests/test_settings.py →

tests/test_trace.py →

plugin.json

− removed · + added

--- before
+++ after
@@ -0,0 +1,44 @@
+{
+  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
+  "name": "app-6a9837c5dc70819190c48f1f87850c01",
+  "version": "0.1.3",
+  "description": "Lista de compras que aprende suas marcas: foto do cupom, marca preferida e o que est\u00e1 acabando.",
+  "author": {
+    "name": "Cristiano Santana",
+    "email": "lexcrt@gmail.com",
+    "url": "https://github.com/cristianosantana"
+  },
+  "homepage": "https://github.com/cristianosantana/mcp-despensa-hub",
+  "repository": "https://github.com/cristianosantana/mcp-despensa-hub",
+  "keywords": [
+    "lista de compras",
+    "mercado",
+    "despensa",
+    "cupom fiscal",
+    "marca preferida",
+    "compras",
+    "mcp"
+  ],
+  "extensions": {
+    "com.openai": {
+      "interface": {
+        "displayName": "Dispensa: lista de compras",
+        "shortDescription": "Marcas e o que falta em casa",
+        "longDescription": "Uma lista de compras que a IA lembra: voc\u00ea manda a foto do cupom fiscal, ela aprende suas marcas e avisa o que est\u00e1 acabando em casa. Ponha itens na lista, registre a compra pela foto do cupom e pergunte o que falta. Exemplo: \"Dispensa, adiciona leite na lista\".",
+        "developerName": "Cristiano Santana",
+        "category": "Productivity",
+        "websiteURL": "https://mcp-despensa-hub.onrender.com",
+        "supportURL": "https://mcp-despensa-hub.onrender.com/support",
+        "privacyPolicyURL": "https://mcp-despensa-hub.onrender.com/privacy",
+        "termsOfServiceURL": "https://mcp-despensa-hub.onrender.com/terms",
+        "defaultPrompt": [
+          "Dispensa, adiciona leite na lista",
+          "Dispensa, o que est\u00e1 faltando em casa?"
+        ],
+        "composerIcon": "./assets/icon.png",
+        "logo": "./assets/logo.png"
+      },
+      "apps": "./.app.json"
+    }
+  }
+}
Full technical diff · 86 changed fields

changed /files/.app.json/sha256

BEFORE
"6b0b10a4bdea03ad7d386f72fccb26b2165051cac27269e3997c1ade87bace41"
AFTER
"f0c06f2286b678e59093fa2462a66ad30286919200825e8ccc702f80f1a70290"

changed /files/.app.json/size

BEFORE
127
AFTER
108

added /files/.claude-plugin~1plugin.json

BEFORE
Field was absent
AFTER
{
  "sha256": "30133df2701540ea4cbca5ec0a826729c3f472304852605b476aeccb1fde296e",
  "size": 519
}

removed /files/.codex-plugin~1plugin.json

BEFORE
{
  "sha256": "bfd484b6fce477274c097fd88492c9bd0701fabd3a53294d3f6ce63592c8820a",
  "size": 1459
}
AFTER
Field is absent

added /files/.env.example

BEFORE
Field was absent
AFTER
{
  "sha256": "f3b7795df014ed786cf97ce7f6ee48561e93ef132c3952704e6736d40e10a858",
  "size": 168
}

added /files/.github~1workflows~1ci.yml

BEFORE
Field was absent
AFTER
{
  "sha256": "cbcc1f669c2d5c628eb54af38246f6fd5124d6e5bb5bcd213aefe256d26642b8",
  "size": 426
}

added /files/.gitignore

BEFORE
Field was absent
AFTER
{
  "sha256": "559d345c201a92bd987c370bbf5ba8756c79e2a9376a1f55dab029eea8f1cdab",
  "size": 165
}

added /files/CLAUDE.md

BEFORE
Field was absent
AFTER
{
  "sha256": "58f300982ce27a2384163e5bbec7ab5cf90d50069aef4401655858f854b92f4e",
  "size": 445
}

added /files/README.md

BEFORE
Field was absent
AFTER
{
  "sha256": "69f39726b3364af4c9dba796d6614fb8d954f0b7ef177e6bcc43beac22eddfc5",
  "size": 4731
}

added /files/alembic.ini

BEFORE
Field was absent
AFTER
{
  "sha256": "3e883568cf5a98baecba8ea080b5b22c5e43b6a78261dc87fa79511b256deea7",
  "size": 4999
}

added /files/alembic~1env.py

BEFORE
Field was absent
AFTER
{
  "sha256": "3840a49a42c9e6b8e4545a4a2af16b0e8e91135148ccc91c263ab9f8d38a8405",
  "size": 1426
}

added /files/alembic~1script.py.mako

BEFORE
Field was absent
AFTER
{
  "sha256": "d38920781b4d31ae1c0a71bc09f41c2ade8feab9e5a087e3f30cb4bbf0c1c9d3",
  "size": 704
}

added /files/alembic~1versions~10001_inicial.py

BEFORE
Field was absent
AFTER
{
  "sha256": "85555139612bbaec74687d43350166bad67e27da194abca27052848afdf66a1c",
  "size": 7816
}

added /files/alembic~1versions~10002_config_apoio.py

BEFORE
Field was absent
AFTER
{
  "sha256": "17e545ecd648bf2b90d821f91961de95709338ace965546fb9e473023c4cfea0",
  "size": 1354
}

added /files/alembic~1versions~10003_produto_o_que.py

BEFORE
Field was absent
AFTER
{
  "sha256": "935dd0bc6aac1df688a2b94f4d2505277303ae3bbbe366c332855a18b3f94431",
  "size": 840
}

added /files/alembic~1versions~10004_sentinelas.py

BEFORE
Field was absent
AFTER
{
  "sha256": "523d1cc5a222e2f57ea9a0db0f2b41735fe687b8ca50539aa1d4be578281c096",
  "size": 5262
}

added /files/assets~1icon.png

BEFORE
Field was absent
AFTER
{
  "sha256": "312219d7c6162752753465e22712724fd05fcdb5d648de7f8763a432625749ae",
  "size": 201632
}

added /files/assets~1logo.png

BEFORE
Field was absent
AFTER
{
  "sha256": "312219d7c6162752753465e22712724fd05fcdb5d648de7f8763a432625749ae",
  "size": 201632
}

added /files/docs~1METODO.md

BEFORE
Field was absent
AFTER
{
  "sha256": "2b8d0eb89e685abe6cada265445458b5e00628d89ca951df275e7f0f1ae062e6",
  "size": 5195
}

added /files/docs~1REVIEW-CHATGPT.md

BEFORE
Field was absent
AFTER
{
  "sha256": "af82b46127bea7d1dd70fec919469771251ba810fac1418bcc58a31c001d6e65",
  "size": 9464
}

added /files/makefile

BEFORE
Field was absent
AFTER
{
  "sha256": "e8f579b9fb31c25dd33d7be3224079b009d8903c7cae778a3750c170542d0647",
  "size": 499
}

added /files/mcp.json

BEFORE
Field was absent
AFTER
{
  "sha256": "668088dbf0b1c1b9de216856c288611c86ddb2e11fede11343c0075527c34e4c",
  "size": 220
}

added /files/plans~100-esqueleto.md

BEFORE
Field was absent
AFTER
{
  "sha256": "f7c97b450390baf38d22a8ceb087d09ec31e652a56b839d3380daaa0a8940f91",
  "size": 716
}

added /files/plans~101-mvp.md

BEFORE
Field was absent
AFTER
{
  "sha256": "a309af4d9f83077a25ec44eff7b14d73afe193ce8aa96f948be8f5f515ecc1c4",
  "size": 840
}

added /files/plans~102-predicao.md

BEFORE
Field was absent
AFTER
{
  "sha256": "c41127cb0ac35c2121f55920e48e075bcb3effff40c5477c54015e965a19a15b",
  "size": 360
}

added /files/plans~103-apoio-lista.md

BEFORE
Field was absent
AFTER
{
  "sha256": "a45f3cae31ced9380ebe6a7337af833a323371cb50fc20931561d63981ad8832",
  "size": 570
}

added /files/plans~104-canonico-o-que.md

BEFORE
Field was absent
AFTER
{
  "sha256": "57126ade88bb3b85ccdabf0516ca1db7838130803864a9e02e685bd721ff1459",
  "size": 8077
}

added /files/plans~105-sem-null.md

BEFORE
Field was absent
AFTER
{
  "sha256": "199738d2c93cc58f3cebf6c48d3229679dba07e5d5f0e049b9c3d29ef69c0aae",
  "size": 2980
}

added /files/plans~106-registrar-mcp.md

BEFORE
Field was absent
AFTER
{
  "sha256": "befc89a5b55c5442e03ddc0072957401e8939e51b58847f5133a0af25d02ff37",
  "size": 1403
}

added /files/plans~1Gemini_Generated_Image_suhkdhsuhkdhsuhk.jpeg

BEFORE
Field was absent
AFTER
{
  "sha256": "49581eea9d684718a64970398fc47bef5d8f3435d21f874319ef66daf74686eb",
  "size": 101179
}

added /files/plans~1README.md

BEFORE
Field was absent
AFTER
{
  "sha256": "f272f3ac4ff721146d725878c74548532ec13f2cbfa72c972cada7edd3083c4e",
  "size": 835
}

added /files/plugin.json

BEFORE
Field was absent
AFTER
{
  "sha256": "52ef68875525384a2c48bac579df6a9e5544f176671acdfd93603d02330b89ce",
  "size": 1807
}

added /files/pyproject.toml

BEFORE
Field was absent
AFTER
{
  "sha256": "2da6dbe5c97eb09e4112fc6489d8ec2a44cbd1645d08f3e7dd80528294fc66a3",
  "size": 968
}

added /files/render.yaml

BEFORE
Field was absent
AFTER
{
  "sha256": "e181ae76a2185b1220d343315e79c1f02799742a70c063ed8f93318031656fb7",
  "size": 594
}

added /files/requirements-dev.txt

BEFORE
Field was absent
AFTER
{
  "sha256": "cad80d88048eed38d8be546e2949729ee2b117e79fd3e4fa6c0ff40b6d4e3d1d",
  "size": 74
}

added /files/requirements.txt

BEFORE
Field was absent
AFTER
{
  "sha256": "ceaf76f382156e98a19d84720cdc1519f45ee867100ee3ca93d941b7b494dcfd",
  "size": 143
}

added /files/server.json

BEFORE
Field was absent
AFTER
{
  "sha256": "670b11afcb8d2f4348e60773ac9eb3357f0b0b3dfc3c007eaa196f610e73b4f1",
  "size": 627
}

added /files/src~1mcp_despensa_hub~1__init__.py

BEFORE
Field was absent
AFTER
{
  "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
  "size": 0
}

added /files/src~1mcp_despensa_hub~1__main__.py

BEFORE
Field was absent
AFTER
{
  "sha256": "7405e55ead01678e20622a7e5a0abba54c38d33fca4fd7474b81ae72e94437aa",
  "size": 49
}

added /files/src~1mcp_despensa_hub~1admin.py

BEFORE
Field was absent
AFTER
{
  "sha256": "cdd364a6e4e22988e23d399b6075798e2f2ab3c253b4679606a570600744e533",
  "size": 1702
}

added /files/src~1mcp_despensa_hub~1db.py

BEFORE
Field was absent
AFTER
{
  "sha256": "16a9be94e098ba94bd3b24b0afe32aa37cc819fd13ce63895f5d9a89bfb3cc3c",
  "size": 9474
}

added /files/src~1mcp_despensa_hub~1domain~1__init__.py

BEFORE
Field was absent
AFTER
{
  "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
  "size": 0
}

added /files/src~1mcp_despensa_hub~1domain~1errors.py

BEFORE
Field was absent
AFTER
{
  "sha256": "b88cce705ecc00cba97272c0984c0333cc4a2b0d4781e00cf1e68b4818dedf96",
  "size": 906
}

added /files/src~1mcp_despensa_hub~1legal.py

BEFORE
Field was absent
AFTER
{
  "sha256": "aa4e7b2769bd5bd7732b551f9d8131cdedb48a40acc7f8195f36c3ddbcae4634",
  "size": 17522
}

added /files/src~1mcp_despensa_hub~1resolve.py

BEFORE
Field was absent
AFTER
{
  "sha256": "563cc9ca3c191fb36629ffe20692593bcd7bd14ae6bb2efced8de87d13883c14",
  "size": 436
}

added /files/src~1mcp_despensa_hub~1server.py

BEFORE
Field was absent
AFTER
{
  "sha256": "85a4726117276729300598c3847b982f1996829cddccd26ebd88d04a68d9795d",
  "size": 16580
}

added /files/src~1mcp_despensa_hub~1settings.py

BEFORE
Field was absent
AFTER
{
  "sha256": "5ac4062d865ca4629c2d87ef5abf530395ae4f4b7b5b345370be70e2b5242843",
  "size": 333
}

added /files/src~1mcp_despensa_hub~1shared~1__init__.py

BEFORE
Field was absent
AFTER
{
  "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
  "size": 0
}

added /files/src~1mcp_despensa_hub~1shared~1canonico.py

BEFORE
Field was absent
AFTER
{
  "sha256": "d02a0b5ec3557d3722d81d5b42d859d300e3c8c91bc2db04779155305c2342f7",
  "size": 10069
}

added /files/src~1mcp_despensa_hub~1shared~1catalogo.py

BEFORE
Field was absent
AFTER
{
  "sha256": "2b11ef79590fff74ff9ebdcb9a262fa81f7ce10d1ec05d5252b78681841b9337",
  "size": 2389
}

added /files/src~1mcp_despensa_hub~1shared~1chave_nfe.py

BEFORE
Field was absent
AFTER
{
  "sha256": "8b2a8d2b352e27f21776ff0cd8f70c0e34a5cd1858e7de4c1a159dc50db4534e",
  "size": 2158
}

added /files/src~1mcp_despensa_hub~1shared~1codigo.py

BEFORE
Field was absent
AFTER
{
  "sha256": "0f580d8effd93e8a826e03dbc977ce22298d74a4cbe682d0036978d5ef328080",
  "size": 326
}

added /files/src~1mcp_despensa_hub~1shared~1frequencia.py

BEFORE
Field was absent
AFTER
{
  "sha256": "fc93d72def3c692177431f6d5e5d72594c878364e0a01a613d468ecdb06e75ba",
  "size": 1365
}

added /files/src~1mcp_despensa_hub~1shared~1grafo.py

BEFORE
Field was absent
AFTER
{
  "sha256": "37bb2bc3a611ef7caec76a1bb6fe9b3f5fbbc3c7a991d908b3e985f26cb8ba71",
  "size": 3072
}

added /files/src~1mcp_despensa_hub~1shared~1periodo.py

BEFORE
Field was absent
AFTER
{
  "sha256": "f40b3c48cbff4f8347ae4b75e8a3c58015b426d90dc83de7a7dd499b6900bc1f",
  "size": 3745
}

added /files/src~1mcp_despensa_hub~1shared~1preferencia.py

BEFORE
Field was absent
AFTER
{
  "sha256": "ff7711c36616799c16df5ca21a165a93754d8a2a82ce88a5851fe39956f4603b",
  "size": 5514
}

added /files/src~1mcp_despensa_hub~1shared~1sentinela.py

BEFORE
Field was absent
AFTER
{
  "sha256": "7b6812e0cf9cfa59ea26586bafaf93509b3a3195fbc11ce5f003eaf12fe840b6",
  "size": 764
}

added /files/src~1mcp_despensa_hub~1tools~1__init__.py

BEFORE
Field was absent
AFTER
{
  "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
  "size": 0
}

added /files/src~1mcp_despensa_hub~1tools~1compra.py

BEFORE
Field was absent
AFTER
{
  "sha256": "e3f2f28d33586fd5f49c0c5906d30a08f69ecb8efce6eecea10a6bcaaa3b1cb7",
  "size": 11216
}

added /files/src~1mcp_despensa_hub~1tools~1faltando.py

BEFORE
Field was absent
AFTER
{
  "sha256": "11405d0d235b95578f8dd8293822f21fbb2b3202caee4f4b33b336884a534f70",
  "size": 3257
}

added /files/src~1mcp_despensa_hub~1tools~1historico.py

BEFORE
Field was absent
AFTER
{
  "sha256": "f6c71a4e85efdd416afdbd1f396f0fbcd969a073615cb557595ae4b1703d98b4",
  "size": 3473
}

added /files/src~1mcp_despensa_hub~1tools~1lista.py

BEFORE
Field was absent
AFTER
{
  "sha256": "2cbbf1348bf9ebeab3dd6837a12fd8a709402ef9840ea32108b012ee8ea2b301",
  "size": 5800
}

added /files/src~1mcp_despensa_hub~1tools~1ping.py

BEFORE
Field was absent
AFTER
{
  "sha256": "2c3a6b133d5fd205d0da46467086315015d8dd7cec7ac9c225a0c28692bd333a",
  "size": 1832
}

added /files/src~1mcp_despensa_hub~1tools~1preferencia.py

BEFORE
Field was absent
AFTER
{
  "sha256": "1a38155be9314b167c02328d0d726e3a00b3af86b2618666f48e1c9ea7a8577a",
  "size": 3284
}

added /files/src~1mcp_despensa_hub~1tools~1privacidade.py

BEFORE
Field was absent
AFTER
{
  "sha256": "617db608d30111b88a93d443838fe71a7b8f812156ee0debd946cd943a7e2d97",
  "size": 5577
}

added /files/src~1mcp_despensa_hub~1trace.py

BEFORE
Field was absent
AFTER
{
  "sha256": "6f1c6cfcd2e2a60e51e2f6e4c920b3b089009351beb599ac55ed626a415db154",
  "size": 1828
}

added /files/tests~1conftest.py

BEFORE
Field was absent
AFTER
{
  "sha256": "823835a0b308295bc1b0393c9f11dae40c08b99144d2fa91e60a2bd536ca3e31",
  "size": 585
}

added /files/tests~1test_canonico.py

BEFORE
Field was absent
AFTER
{
  "sha256": "70579d2a80ab86457fe793e35eefa1cac9f044d4666c6b714d79b07a14208be3",
  "size": 2731
}

added /files/tests~1test_catalogo.py

BEFORE
Field was absent
AFTER
{
  "sha256": "325a14561b8ba4a612fe47df3b61575ff47f9113b20e3f50d6b19e765f436a73",
  "size": 5910
}

added /files/tests~1test_chave_nfe.py

BEFORE
Field was absent
AFTER
{
  "sha256": "b3dcd0e9912b913c8ea04e3986b3d63f2aad27fdaab5ba49489e6a1a34c4d9e0",
  "size": 1488
}

added /files/tests~1test_compra.py

BEFORE
Field was absent
AFTER
{
  "sha256": "a74cb0676b53cfec83ebc35fad1596e9a4a85bc763ba50578c3e88dd6ebaa38e",
  "size": 5655
}

added /files/tests~1test_db.py

BEFORE
Field was absent
AFTER
{
  "sha256": "c0ae929a8dcc180af3d15a3f194216c88596d8d47dd8d8910f2da6e76daa5a0f",
  "size": 447
}

added /files/tests~1test_faltando.py

BEFORE
Field was absent
AFTER
{
  "sha256": "77694758c8aa521ad03c7921ebdf651212c9e345cf1cb3cfaa464352fdae1db2",
  "size": 1992
}

added /files/tests~1test_frequencia.py

BEFORE
Field was absent
AFTER
{
  "sha256": "3fc3c53e7c592919c7ee2d62ec1dc4accd0a8a895df6bbc19c031a7714d2481c",
  "size": 946
}

added /files/tests~1test_historico.py

BEFORE
Field was absent
AFTER
{
  "sha256": "41e8bb05758a965bfa7efaba7176da6dfd4375df0ba9aca48c5bce8c7ccaffaa",
  "size": 1357
}

added /files/tests~1test_lista.py

BEFORE
Field was absent
AFTER
{
  "sha256": "2fd52030065ec6d159f64d4314e5b9208f6eed4400fb0fd53e5cfe266231f11d",
  "size": 5088
}

added /files/tests~1test_periodo.py

BEFORE
Field was absent
AFTER
{
  "sha256": "5ad5c902a553de59c85c405b5eb4524b470fcb7cf06ad0c29637b89eec0e0a51",
  "size": 1792
}

added /files/tests~1test_ping.py

BEFORE
Field was absent
AFTER
{
  "sha256": "755e289499ebd6e0c97e9e8fa437cc404272e2dd3ba305e520c5bb701abfa024",
  "size": 761
}

added /files/tests~1test_plugin.py

BEFORE
Field was absent
AFTER
{
  "sha256": "4fe0b0bcfd1e519b707f361c9d6a0e3557f11f9a30bed52a41b9bdea35ecbbce",
  "size": 859
}

added /files/tests~1test_preferencia.py

BEFORE
Field was absent
AFTER
{
  "sha256": "29f58029be84554c909345b4a6e1921a0a4c315ddd589a137fe308414a1e4917",
  "size": 2348
}

added /files/tests~1test_preferencia_tools.py

BEFORE
Field was absent
AFTER
{
  "sha256": "071d526450d419517e9f64697060582368f8cc23a3de39e485febe31d1286ef9",
  "size": 1770
}

added /files/tests~1test_privacidade.py

BEFORE
Field was absent
AFTER
{
  "sha256": "1897442fc2fe740c00d833c9b9378cc3235868fef9cc7d6f5267c79f1fd45be7",
  "size": 3383
}

added /files/tests~1test_sentinela.py

BEFORE
Field was absent
AFTER
{
  "sha256": "7484b60bde3bf82acfd30bef414cfadc7aa7733fb91754f293f5b1a496d490f0",
  "size": 725
}

added /files/tests~1test_server_health.py

BEFORE
Field was absent
AFTER
{
  "sha256": "9cd6535cefa8f1fc0de649515506493f320b36b918004bf03452437f38881fdd",
  "size": 9678
}

added /files/tests~1test_settings.py

BEFORE
Field was absent
AFTER
{
  "sha256": "3b0a55144ae4b5fb7c8a885663b7b8c9152c2a0b1a2fa1ba63a2413e48472983",
  "size": 1635
}

added /files/tests~1test_trace.py

BEFORE
Field was absent
AFTER
{
  "sha256": "764ea2143b33decbc7d64fffebeba1c215861642b63e27e528906c6256d8f48e",
  "size": 1209
}
Full snapshot data
{
  "files": {
    ".app.json": {
      "sha256": "f0c06f2286b678e59093fa2462a66ad30286919200825e8ccc702f80f1a70290",
      "size": 108
    },
    ".claude-plugin/plugin.json": {
      "sha256": "30133df2701540ea4cbca5ec0a826729c3f472304852605b476aeccb1fde296e",
      "size": 519
    },
    ".env.example": {
      "sha256": "f3b7795df014ed786cf97ce7f6ee48561e93ef132c3952704e6736d40e10a858",
      "size": 168
    },
    ".github/workflows/ci.yml": {
      "sha256": "cbcc1f669c2d5c628eb54af38246f6fd5124d6e5bb5bcd213aefe256d26642b8",
      "size": 426
    },
    ".gitignore": {
      "sha256": "559d345c201a92bd987c370bbf5ba8756c79e2a9376a1f55dab029eea8f1cdab",
      "size": 165
    },
    "CLAUDE.md": {
      "sha256": "58f300982ce27a2384163e5bbec7ab5cf90d50069aef4401655858f854b92f4e",
      "size": 445
    },
    "README.md": {
      "sha256": "69f39726b3364af4c9dba796d6614fb8d954f0b7ef177e6bcc43beac22eddfc5",
      "size": 4731
    },
    "alembic.ini": {
      "sha256": "3e883568cf5a98baecba8ea080b5b22c5e43b6a78261dc87fa79511b256deea7",
      "size": 4999
    },
    "alembic/env.py": {
      "sha256": "3840a49a42c9e6b8e4545a4a2af16b0e8e91135148ccc91c263ab9f8d38a8405",
      "size": 1426
    },
    "alembic/script.py.mako": {
      "sha256": "d38920781b4d31ae1c0a71bc09f41c2ade8feab9e5a087e3f30cb4bbf0c1c9d3",
      "size": 704
    },
    "alembic/versions/0001_inicial.py": {
      "sha256": "85555139612bbaec74687d43350166bad67e27da194abca27052848afdf66a1c",
      "size": 7816
    },
    "alembic/versions/0002_config_apoio.py": {
      "sha256": "17e545ecd648bf2b90d821f91961de95709338ace965546fb9e473023c4cfea0",
      "size": 1354
    },
    "alembic/versions/0003_produto_o_que.py": {
      "sha256": "935dd0bc6aac1df688a2b94f4d2505277303ae3bbbe366c332855a18b3f94431",
      "size": 840
    },
    "alembic/versions/0004_sentinelas.py": {
      "sha256": "523d1cc5a222e2f57ea9a0db0f2b41735fe687b8ca50539aa1d4be578281c096",
      "size": 5262
    },
    "assets/icon.png": {
      "sha256": "312219d7c6162752753465e22712724fd05fcdb5d648de7f8763a432625749ae",
      "size": 201632
    },
    "assets/logo.png": {
      "sha256": "312219d7c6162752753465e22712724fd05fcdb5d648de7f8763a432625749ae",
      "size": 201632
    },
    "docs/METODO.md": {
      "sha256": "2b8d0eb89e685abe6cada265445458b5e00628d89ca951df275e7f0f1ae062e6",
      "size": 5195
    },
    "docs/REVIEW-CHATGPT.md": {
      "sha256": "af82b46127bea7d1dd70fec919469771251ba810fac1418bcc58a31c001d6e65",
      "size": 9464
    },
    "makefile": {
      "sha256": "e8f579b9fb31c25dd33d7be3224079b009d8903c7cae778a3750c170542d0647",
      "size": 499
    },
    "mcp.json": {
      "sha256": "668088dbf0b1c1b9de216856c288611c86ddb2e11fede11343c0075527c34e4c",
      "size": 220
    },
    "plans/00-esqueleto.md": {
      "sha256": "f7c97b450390baf38d22a8ceb087d09ec31e652a56b839d3380daaa0a8940f91",
      "size": 716
    },
    "plans/01-mvp.md": {
      "sha256": "a309af4d9f83077a25ec44eff7b14d73afe193ce8aa96f948be8f5f515ecc1c4",
      "size": 840
    },
    "plans/02-predicao.md": {
      "sha256": "c41127cb0ac35c2121f55920e48e075bcb3effff40c5477c54015e965a19a15b",
      "size": 360
    },
    "plans/03-apoio-lista.md": {
      "sha256": "a45f3cae31ced9380ebe6a7337af833a323371cb50fc20931561d63981ad8832",
      "size": 570
    },
    "plans/04-canonico-o-que.md": {
      "sha256": "57126ade88bb3b85ccdabf0516ca1db7838130803864a9e02e685bd721ff1459",
      "size": 8077
    },
    "plans/05-sem-null.md": {
      "sha256": "199738d2c93cc58f3cebf6c48d3229679dba07e5d5f0e049b9c3d29ef69c0aae",
      "size": 2980
    },
    "plans/06-registrar-mcp.md": {
      "sha256": "befc89a5b55c5442e03ddc0072957401e8939e51b58847f5133a0af25d02ff37",
      "size": 1403
    },
    "plans/Gemini_Generated_Image_suhkdhsuhkdhsuhk.jpeg": {
      "sha256": "49581eea9d684718a64970398fc47bef5d8f3435d21f874319ef66daf74686eb",
      "size": 101179
    },
    "plans/README.md": {
      "sha256": "f272f3ac4ff721146d725878c74548532ec13f2cbfa72c972cada7edd3083c4e",
      "size": 835
    },
    "plugin.json": {
      "sha256": "52ef68875525384a2c48bac579df6a9e5544f176671acdfd93603d02330b89ce",
      "size": 1807
    },
    "pyproject.toml": {
      "sha256": "2da6dbe5c97eb09e4112fc6489d8ec2a44cbd1645d08f3e7dd80528294fc66a3",
      "size": 968
    },
    "render.yaml": {
      "sha256": "e181ae76a2185b1220d343315e79c1f02799742a70c063ed8f93318031656fb7",
      "size": 594
    },
    "requirements-dev.txt": {
      "sha256": "cad80d88048eed38d8be546e2949729ee2b117e79fd3e4fa6c0ff40b6d4e3d1d",
      "size": 74
    },
    "requirements.txt": {
      "sha256": "ceaf76f382156e98a19d84720cdc1519f45ee867100ee3ca93d941b7b494dcfd",
      "size": 143
    },
    "server.json": {
      "sha256": "670b11afcb8d2f4348e60773ac9eb3357f0b0b3dfc3c007eaa196f610e73b4f1",
      "size": 627
    },
    "src/mcp_despensa_hub/__init__.py": {
      "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "size": 0
    },
    "src/mcp_despensa_hub/__main__.py": {
      "sha256": "7405e55ead01678e20622a7e5a0abba54c38d33fca4fd7474b81ae72e94437aa",
      "size": 49
    },
    "src/mcp_despensa_hub/admin.py": {
      "sha256": "cdd364a6e4e22988e23d399b6075798e2f2ab3c253b4679606a570600744e533",
      "size": 1702
    },
    "src/mcp_despensa_hub/db.py": {
      "sha256": "16a9be94e098ba94bd3b24b0afe32aa37cc819fd13ce63895f5d9a89bfb3cc3c",
      "size": 9474
    },
    "src/mcp_despensa_hub/domain/__init__.py": {
      "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "size": 0
    },
    "src/mcp_despensa_hub/domain/errors.py": {
      "sha256": "b88cce705ecc00cba97272c0984c0333cc4a2b0d4781e00cf1e68b4818dedf96",
      "size": 906
    },
    "src/mcp_despensa_hub/legal.py": {
      "sha256": "aa4e7b2769bd5bd7732b551f9d8131cdedb48a40acc7f8195f36c3ddbcae4634",
      "size": 17522
    },
    "src/mcp_despensa_hub/resolve.py": {
      "sha256": "563cc9ca3c191fb36629ffe20692593bcd7bd14ae6bb2efced8de87d13883c14",
      "size": 436
    },
    "src/mcp_despensa_hub/server.py": {
      "sha256": "85a4726117276729300598c3847b982f1996829cddccd26ebd88d04a68d9795d",
      "size": 16580
    },
    "src/mcp_despensa_hub/settings.py": {
      "sha256": "5ac4062d865ca4629c2d87ef5abf530395ae4f4b7b5b345370be70e2b5242843",
      "size": 333
    },
    "src/mcp_despensa_hub/shared/__init__.py": {
      "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "size": 0
    },
    "src/mcp_despensa_hub/shared/canonico.py": {
      "sha256": "d02a0b5ec3557d3722d81d5b42d859d300e3c8c91bc2db04779155305c2342f7",
      "size": 10069
    },
    "src/mcp_despensa_hub/shared/catalogo.py": {
      "sha256": "2b11ef79590fff74ff9ebdcb9a262fa81f7ce10d1ec05d5252b78681841b9337",
      "size": 2389
    },
    "src/mcp_despensa_hub/shared/chave_nfe.py": {
      "sha256": "8b2a8d2b352e27f21776ff0cd8f70c0e34a5cd1858e7de4c1a159dc50db4534e",
      "size": 2158
    },
    "src/mcp_despensa_hub/shared/codigo.py": {
      "sha256": "0f580d8effd93e8a826e03dbc977ce22298d74a4cbe682d0036978d5ef328080",
      "size": 326
    },
    "src/mcp_despensa_hub/shared/frequencia.py": {
      "sha256": "fc93d72def3c692177431f6d5e5d72594c878364e0a01a613d468ecdb06e75ba",
      "size": 1365
    },
    "src/mcp_despensa_hub/shared/grafo.py": {
      "sha256": "37bb2bc3a611ef7caec76a1bb6fe9b3f5fbbc3c7a991d908b3e985f26cb8ba71",
      "size": 3072
    },
    "src/mcp_despensa_hub/shared/periodo.py": {
      "sha256": "f40b3c48cbff4f8347ae4b75e8a3c58015b426d90dc83de7a7dd499b6900bc1f",
      "size": 3745
    },
    "src/mcp_despensa_hub/shared/preferencia.py": {
      "sha256": "ff7711c36616799c16df5ca21a165a93754d8a2a82ce88a5851fe39956f4603b",
      "size": 5514
    },
    "src/mcp_despensa_hub/shared/sentinela.py": {
      "sha256": "7b6812e0cf9cfa59ea26586bafaf93509b3a3195fbc11ce5f003eaf12fe840b6",
      "size": 764
    },
    "src/mcp_despensa_hub/tools/__init__.py": {
      "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "size": 0
    },
    "src/mcp_despensa_hub/tools/compra.py": {
      "sha256": "e3f2f28d33586fd5f49c0c5906d30a08f69ecb8efce6eecea10a6bcaaa3b1cb7",
      "size": 11216
    },
    "src/mcp_despensa_hub/tools/faltando.py": {
      "sha256": "11405d0d235b95578f8dd8293822f21fbb2b3202caee4f4b33b336884a534f70",
      "size": 3257
    },
    "src/mcp_despensa_hub/tools/historico.py": {
      "sha256": "f6c71a4e85efdd416afdbd1f396f0fbcd969a073615cb557595ae4b1703d98b4",
      "size": 3473
    },
    "src/mcp_despensa_hub/tools/lista.py": {
      "sha256": "2cbbf1348bf9ebeab3dd6837a12fd8a709402ef9840ea32108b012ee8ea2b301",
      "size": 5800
    },
    "src/mcp_despensa_hub/tools/ping.py": {
      "sha256": "2c3a6b133d5fd205d0da46467086315015d8dd7cec7ac9c225a0c28692bd333a",
      "size": 1832
    },
    "src/mcp_despensa_hub/tools/preferencia.py": {
      "sha256": "1a38155be9314b167c02328d0d726e3a00b3af86b2618666f48e1c9ea7a8577a",
      "size": 3284
    },
    "src/mcp_despensa_hub/tools/privacidade.py": {
      "sha256": "617db608d30111b88a93d443838fe71a7b8f812156ee0debd946cd943a7e2d97",
      "size": 5577
    },
    "src/mcp_despensa_hub/trace.py": {
      "sha256": "6f1c6cfcd2e2a60e51e2f6e4c920b3b089009351beb599ac55ed626a415db154",
      "size": 1828
    },
    "tests/conftest.py": {
      "sha256": "823835a0b308295bc1b0393c9f11dae40c08b99144d2fa91e60a2bd536ca3e31",
      "size": 585
    },
    "tests/test_canonico.py": {
      "sha256": "70579d2a80ab86457fe793e35eefa1cac9f044d4666c6b714d79b07a14208be3",
      "size": 2731
    },
    "tests/test_catalogo.py": {
      "sha256": "325a14561b8ba4a612fe47df3b61575ff47f9113b20e3f50d6b19e765f436a73",
      "size": 5910
    },
    "tests/test_chave_nfe.py": {
      "sha256": "b3dcd0e9912b913c8ea04e3986b3d63f2aad27fdaab5ba49489e6a1a34c4d9e0",
      "size": 1488
    },
    "tests/test_compra.py": {
      "sha256": "a74cb0676b53cfec83ebc35fad1596e9a4a85bc763ba50578c3e88dd6ebaa38e",
      "size": 5655
    },
    "tests/test_db.py": {
      "sha256": "c0ae929a8dcc180af3d15a3f194216c88596d8d47dd8d8910f2da6e76daa5a0f",
      "size": 447
    },
    "tests/test_faltando.py": {
      "sha256": "77694758c8aa521ad03c7921ebdf651212c9e345cf1cb3cfaa464352fdae1db2",
      "size": 1992
    },
    "tests/test_frequencia.py": {
      "sha256": "3fc3c53e7c592919c7ee2d62ec1dc4accd0a8a895df6bbc19c031a7714d2481c",
      "size": 946
    },
    "tests/test_historico.py": {
      "sha256": "41e8bb05758a965bfa7efaba7176da6dfd4375df0ba9aca48c5bce8c7ccaffaa",
      "size": 1357
    },
    "tests/test_lista.py": {
      "sha256": "2fd52030065ec6d159f64d4314e5b9208f6eed4400fb0fd53e5cfe266231f11d",
      "size": 5088
    },
    "tests/test_periodo.py": {
      "sha256": "5ad5c902a553de59c85c405b5eb4524b470fcb7cf06ad0c29637b89eec0e0a51",
      "size": 1792
    },
    "tests/test_ping.py": {
      "sha256": "755e289499ebd6e0c97e9e8fa437cc404272e2dd3ba305e520c5bb701abfa024",
      "size": 761
    },
    "tests/test_plugin.py": {
      "sha256": "4fe0b0bcfd1e519b707f361c9d6a0e3557f11f9a30bed52a41b9bdea35ecbbce",
      "size": 859
    },
    "tests/test_preferencia.py": {
      "sha256": "29f58029be84554c909345b4a6e1921a0a4c315ddd589a137fe308414a1e4917",
      "size": 2348
    },
    "tests/test_preferencia_tools.py": {
      "sha256": "071d526450d419517e9f64697060582368f8cc23a3de39e485febe31d1286ef9",
      "size": 1770
    },
    "tests/test_privacidade.py": {
      "sha256": "1897442fc2fe740c00d833c9b9378cc3235868fef9cc7d6f5267c79f1fd45be7",
      "size": 3383
    },
    "tests/test_sentinela.py": {
      "sha256": "7484b60bde3bf82acfd30bef414cfadc7aa7733fb91754f293f5b1a496d490f0",
      "size": 725
    },
    "tests/test_server_health.py": {
      "sha256": "9cd6535cefa8f1fc0de649515506493f320b36b918004bf03452437f38881fdd",
      "size": 9678
    },
    "tests/test_settings.py": {
      "sha256": "3b0a55144ae4b5fb7c8a885663b7b8c9152c2a0b1a2fa1ba63a2413e48472983",
      "size": 1635
    },
    "tests/test_trace.py": {
      "sha256": "764ea2143b33decbc7d64fffebeba1c215861642b63e27e528906c6256d8f48e",
      "size": 1209
    }
  }
}

SHA-256 of public snapshot: 4badc7a05dd777a5ca72b078cfa07ee1a5aab0f0366e14379671246de943a5b1