{"hash":"5133591c9b1afa673a87fabda82a41bb66139e10f7e9307f26bb158fe2a02efa","short_code":"2026-05-12T08:30:00+00:00","title":"PermitBundler — token_sha256 + composition fields shipped through federation (supersedes 110b3009)","kind":"bundler_declaration","principal":"doctortheisen","scope_tag":"espadvisorygroup","tier":"architect","issued_at":"2026-05-12T08:30:00+00:00","expires_at":"never","surface":"espadvisorygroup.com (Lightsail FastAPI canonical) + sister register","chain_hash":"","conditions":["All future PERMIT mints with kind=token MUST carry TOKEN_SHA256 inline at INSIDE.CONTENT (already true for PO-2026-0026 .. PO-2026-0036).","Federation ship code extracts the new INSIDE fields and INSERTs into the new columns; absence of a field leaves the column NULL.","Backfill: re-read each existing v_permit row's source MINT from main register; populate the new columns; idempotent on hash.","Sister DDL applies to ~/.ko/services/fastapi/register.db AND /home/admin/register.db on Lightsail; schemas must match for federation.","Supersedes 110b3009; prior bundler declaration remains in chain (append-only).","/home/admin/permits/active.json file MUST NOT be re-created; kernel reads register via query.py (Rule 13).","Composition rendering: composes_from_json carries the WHAT_IT_COMPOSES_FROM 4-tuples [KIND_LABEL, KIND_TYPE, FULL_HASH, description] verbatim; permit-office UI renders nested using that structure."],"hash_short":"5133591c9b1a","register_source":"espadvisorygroup_sister","register_genesis":"f3363f614347023565e0916ed13eff0c6ca42d830b60f2a56c56612975b2f91c","federation_note":"v_permit row from sister register; mint event sha256 preserved in main FIELD.db; bundler declaration at 110b3009"}