auto-sync: tudo-para-ia-mais-humana 2026-05-02 07:24:14

This commit is contained in:
2026-05-02 07:24:14 -03:00
parent 0951751ebe
commit 89e69ff7bd
22 changed files with 156891 additions and 5347 deletions

Binary file not shown.

View File

@@ -0,0 +1,13 @@
{
"centralPlatformFolder": "G:\\_codex-git\\nucleo-gestao-operacional\\central-de-ordem-de-servico\\projects\\15_repo_tudo-para-ia-mais-humana-platform",
"centralReportError": "PermissionError: [Errno 13] Permission denied: 'G:\\\\_codex-git\\\\nucleo-gestao-operacional\\\\central-de-ordem-de-servico\\\\projects\\\\15_repo_tudo-para-ia-mais-humana-platform\\\\reports\\\\EXECUTADO__canonical-migration-plan.md'",
"centralReportOk": false,
"centralReportPath": "G:\\_codex-git\\nucleo-gestao-operacional\\central-de-ordem-de-servico\\projects\\15_repo_tudo-para-ia-mais-humana-platform\\reports\\EXECUTADO__canonical-migration-plan.md",
"centralSemanticWrite": {
"attempted": true,
"error": "PermissionError: [Errno 13] Permission denied: 'G:\\\\_codex-git\\\\nucleo-gestao-operacional\\\\central-de-ordem-de-servico\\\\projects\\\\15_repo_tudo-para-ia-mais-humana-platform\\\\reports\\\\EXECUTADO__canonical-migration-plan.md'",
"files_count": 1,
"ok": false,
"sqlite_path": "G:\\_codex-git\\nucleo-gestao-operacional\\central-de-ordem-de-servico\\projects\\15_repo_tudo-para-ia-mais-humana-platform\\controle-semantico.sqlite"
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -464,7 +464,7 @@
"G:\\_codex-git\\tudo-para-ia-mais-humana\\os-orientadoras\\central-materialization-fallback\\gerenciais\\0057_GERENCIAL__governar-migracao-coordenada-do-nome-canonico-platform.md", "G:\\_codex-git\\tudo-para-ia-mais-humana\\os-orientadoras\\central-materialization-fallback\\gerenciais\\0057_GERENCIAL__governar-migracao-coordenada-do-nome-canonico-platform.md",
"G:\\_codex-git\\tudo-para-ia-mais-humana\\os-orientadoras\\central-materialization-fallback\\gerenciais\\0058_GERENCIAL__fechar-decisao-docs-response-ready-ou-catalogonly-formal.md" "G:\\_codex-git\\tudo-para-ia-mais-humana\\os-orientadoras\\central-materialization-fallback\\gerenciais\\0058_GERENCIAL__fechar-decisao-docs-response-ready-ou-catalogonly-formal.md"
], ],
"generated_at": "2026-05-02T09:22:50+00:00", "generated_at": "2026-05-02T10:22:58+00:00",
"generated_files": [ "generated_files": [
"G:\\_codex-git\\tudo-para-ia-mais-humana\\dados\\central-materialization-report.json", "G:\\_codex-git\\tudo-para-ia-mais-humana\\dados\\central-materialization-report.json",
"G:\\_codex-git\\tudo-para-ia-mais-humana\\ecossistema\\CENTRAL-MATERIALIZATION-REPORT.md", "G:\\_codex-git\\tudo-para-ia-mais-humana\\ecossistema\\CENTRAL-MATERIALIZATION-REPORT.md",
@@ -764,7 +764,7 @@
], ],
"project_id": "tudo-para-ia-mais-humana-platform", "project_id": "tudo-para-ia-mais-humana-platform",
"project_root": "G:\\_codex-git\\tudo-para-ia-mais-humana", "project_root": "G:\\_codex-git\\tudo-para-ia-mais-humana",
"report_id": "central-materialization-916556597461", "report_id": "central-materialization-382892847432",
"semantic_write": { "semantic_write": {
"attempted": true, "attempted": true,
"error": "OperationalError: unable to open database file", "error": "OperationalError: unable to open database file",

View File

@@ -10,6 +10,6 @@
"path": "G:\\_codex-git\\nucleo-gestao-operacional\\central-de-ordem-de-servico\\projects\\15_repo_tudo-para-ia-mais-humana-platform\\indexes\\mcp-admin-route-acceptance-index.md" "path": "G:\\_codex-git\\nucleo-gestao-operacional\\central-de-ordem-de-servico\\projects\\15_repo_tudo-para-ia-mais-humana-platform\\indexes\\mcp-admin-route-acceptance-index.md"
} }
], ],
"generatedAt": "2026-05-02T08:24:24+00:00", "generatedAt": "2026-05-02T10:23:15+00:00",
"ok": false "ok": false
} }

View File

@@ -1120,571 +1120,11 @@
"sourceRecordsHash": "d360c27674acf2dc72bf64f8678f65de79f3c10c7ecbe733c0f2148ecf261dd9", "sourceRecordsHash": "d360c27674acf2dc72bf64f8678f65de79f3c10c7ecbe733c0f2148ecf261dd9",
"status": "ready", "status": "ready",
"toolId": "mais_humana.admin.explicacao" "toolId": "mais_humana.admin.explicacao"
},
{
"evidenceId": "evidence-043eb1e6a85bfc8da961f435",
"humanNextAction": "homologar rota administrativa acao para compliance/cliente_externo",
"operation": "acao",
"permissionScope": "mcp.admin.action.request",
"platformId": "compliance",
"profileId": "cliente_externo",
"routeId": "compliance.cliente_externo.acao.administration-route",
"sameSource": true,
"sourcePayloadHash": "438d9c7af33d986ec89d61252cbf4ee68a300c692f7e918b51b393f4c2c8283d",
"sourceRecordsHash": "043eb1e6a85bfc8da961f4358ce267f7d18fe93b613352f67ef09762c4917ff2",
"status": "ready",
"toolId": "mais_humana.admin.acao"
},
{
"evidenceId": "evidence-fccdeeffbefda06bfc324d12",
"humanNextAction": "homologar rota administrativa auditoria para compliance/cliente_externo",
"operation": "auditoria",
"permissionScope": "mcp.admin.audit",
"platformId": "compliance",
"profileId": "cliente_externo",
"routeId": "compliance.cliente_externo.auditoria.administration-route",
"sameSource": true,
"sourcePayloadHash": "4a24df0292527acbd75ee6599fc764f346cf58c156cf9f134816f8fdf2e29e40",
"sourceRecordsHash": "fccdeeffbefda06bfc324d122be0a52ac1ea52a4b57dd691e336cf9c934d686d",
"status": "ready",
"toolId": "mais_humana.admin.auditoria"
},
{
"evidenceId": "evidence-db5b3feefe77274a7ee958dd",
"humanNextAction": "homologar rota administrativa consulta para compliance/cliente_externo",
"operation": "consulta",
"permissionScope": "mcp.admin.readonly",
"platformId": "compliance",
"profileId": "cliente_externo",
"routeId": "compliance.cliente_externo.consulta.administration-route",
"sameSource": true,
"sourcePayloadHash": "a797d3c908d83e7ec274c484f2294c005485a9c155f17374d9a760ec7015c4cb",
"sourceRecordsHash": "db5b3feefe77274a7ee958dde60a934c9f0e84047f808746962a898396283ef4",
"status": "ready",
"toolId": "mais_humana.admin.consulta"
},
{
"evidenceId": "evidence-a7c2e4b1a1a9b7efccef8ef7",
"humanNextAction": "homologar rota administrativa diagnostico para compliance/cliente_externo",
"operation": "diagnostico",
"permissionScope": "mcp.admin.diagnostic",
"platformId": "compliance",
"profileId": "cliente_externo",
"routeId": "compliance.cliente_externo.diagnostico.administration-route",
"sameSource": true,
"sourcePayloadHash": "842485b47f1ded5d6dc50f3b3c566c52b1bdac7f2131373edaa8122f56f0b263",
"sourceRecordsHash": "a7c2e4b1a1a9b7efccef8ef75df07645fbfe2f61b4f9e3df6e7b6fa67743b123",
"status": "ready",
"toolId": "mais_humana.admin.diagnostico"
},
{
"evidenceId": "evidence-0769489680cf26dec1527f6e",
"humanNextAction": "homologar rota administrativa explicacao para compliance/cliente_externo",
"operation": "explicacao",
"permissionScope": "mcp.admin.explain",
"platformId": "compliance",
"profileId": "cliente_externo",
"routeId": "compliance.cliente_externo.explicacao.administration-route",
"sameSource": true,
"sourcePayloadHash": "49c9fd99dd696919f71435c00d611b81caa198bed17af5a48eedcf79694fa900",
"sourceRecordsHash": "0769489680cf26dec1527f6e2ab4a9287a80312e1aaa843d32db7bd686c6a2db",
"status": "ready",
"toolId": "mais_humana.admin.explicacao"
},
{
"evidenceId": "evidence-e1574481a65786a59e8667be",
"humanNextAction": "homologar rota administrativa acao para compliance/contador",
"operation": "acao",
"permissionScope": "mcp.admin.action.request",
"platformId": "compliance",
"profileId": "contador",
"routeId": "compliance.contador.acao.administration-route",
"sameSource": true,
"sourcePayloadHash": "76378cdd16d0e2119b5b5813981235f45a5a039ecced2c597b00a5a1a9aacffa",
"sourceRecordsHash": "e1574481a65786a59e8667beb156cdb2b44ab9e1a2648d88a1b0c1776e87b827",
"status": "ready",
"toolId": "mais_humana.admin.acao"
},
{
"evidenceId": "evidence-dfc305d7e6bc414380927365",
"humanNextAction": "homologar rota administrativa auditoria para compliance/contador",
"operation": "auditoria",
"permissionScope": "mcp.admin.audit",
"platformId": "compliance",
"profileId": "contador",
"routeId": "compliance.contador.auditoria.administration-route",
"sameSource": true,
"sourcePayloadHash": "2471e4c9bd650f2b354523f9db8d9fff5216fe64dc7d051b637cd5ae1a31483d",
"sourceRecordsHash": "dfc305d7e6bc4143809273658c11e7314b0bec0b21f0faf9e08347efba220448",
"status": "ready",
"toolId": "mais_humana.admin.auditoria"
},
{
"evidenceId": "evidence-a781034adf6a863661f74c40",
"humanNextAction": "homologar rota administrativa consulta para compliance/contador",
"operation": "consulta",
"permissionScope": "mcp.admin.readonly",
"platformId": "compliance",
"profileId": "contador",
"routeId": "compliance.contador.consulta.administration-route",
"sameSource": true,
"sourcePayloadHash": "df9f8c70a88faa7f2e1e60b2024113a60b074ac7fcb78a9c3bffdd2f28d83bca",
"sourceRecordsHash": "a781034adf6a863661f74c40100a8fd5779a0100b7c8b852e6932ea4d354805f",
"status": "ready",
"toolId": "mais_humana.admin.consulta"
},
{
"evidenceId": "evidence-3096bca3fbed3d072f4ba9c0",
"humanNextAction": "homologar rota administrativa diagnostico para compliance/contador",
"operation": "diagnostico",
"permissionScope": "mcp.admin.diagnostic",
"platformId": "compliance",
"profileId": "contador",
"routeId": "compliance.contador.diagnostico.administration-route",
"sameSource": true,
"sourcePayloadHash": "606c0b708c88c9c427fb7516f9614874a51eb7d57632a15d9dcb44d1075f35ac",
"sourceRecordsHash": "3096bca3fbed3d072f4ba9c07b793f8d51e17fc536ea09005fd2d839abcbe965",
"status": "ready",
"toolId": "mais_humana.admin.diagnostico"
},
{
"evidenceId": "evidence-4a9d30a7a3d2c99afe6519be",
"humanNextAction": "homologar rota administrativa explicacao para compliance/contador",
"operation": "explicacao",
"permissionScope": "mcp.admin.explain",
"platformId": "compliance",
"profileId": "contador",
"routeId": "compliance.contador.explicacao.administration-route",
"sameSource": true,
"sourcePayloadHash": "8b5ba21d027248869344dcd2a57e8a3dd73bc308e5b3a8223988e572de2d2e7e",
"sourceRecordsHash": "4a9d30a7a3d2c99afe6519beb4b3d46c21bc7e7bf26b22806c6021b95344a160",
"status": "ready",
"toolId": "mais_humana.admin.explicacao"
},
{
"evidenceId": "evidence-d9b19d82ef0a09658c9c29cd",
"humanNextAction": "homologar rota administrativa acao para compliance/financeiro",
"operation": "acao",
"permissionScope": "mcp.admin.action.request",
"platformId": "compliance",
"profileId": "financeiro",
"routeId": "compliance.financeiro.acao.administration-route",
"sameSource": true,
"sourcePayloadHash": "57e0105999ad67d092c708017f1103b92bf2d41e6c4b94efedb30ae27a56f7ca",
"sourceRecordsHash": "d9b19d82ef0a09658c9c29cdf100b90b9c8972d3d44f067cb7f622cc8f804a5c",
"status": "ready",
"toolId": "mais_humana.admin.acao"
},
{
"evidenceId": "evidence-711c0bd1b8ce79facd1a08b9",
"humanNextAction": "homologar rota administrativa auditoria para compliance/financeiro",
"operation": "auditoria",
"permissionScope": "mcp.admin.audit",
"platformId": "compliance",
"profileId": "financeiro",
"routeId": "compliance.financeiro.auditoria.administration-route",
"sameSource": true,
"sourcePayloadHash": "8dabea178584cd8eac838c210087fedc91a926395602d432453bc6d7897c749d",
"sourceRecordsHash": "711c0bd1b8ce79facd1a08b980ade64387e8c977262e9343624e3b72fcb04dcc",
"status": "ready",
"toolId": "mais_humana.admin.auditoria"
},
{
"evidenceId": "evidence-7fbb7dd1323952eeea9a0e1a",
"humanNextAction": "homologar rota administrativa consulta para compliance/financeiro",
"operation": "consulta",
"permissionScope": "mcp.admin.readonly",
"platformId": "compliance",
"profileId": "financeiro",
"routeId": "compliance.financeiro.consulta.administration-route",
"sameSource": true,
"sourcePayloadHash": "ee28bde90f33cf3227073f4bf3e490d9e155eb70c3579e8f963cc4ea5ee68d58",
"sourceRecordsHash": "7fbb7dd1323952eeea9a0e1aa9976621d861464d814baf4436ef6a9ebc8b4fa7",
"status": "ready",
"toolId": "mais_humana.admin.consulta"
},
{
"evidenceId": "evidence-ca5156c0c8582f5c6e2fb561",
"humanNextAction": "homologar rota administrativa diagnostico para compliance/financeiro",
"operation": "diagnostico",
"permissionScope": "mcp.admin.diagnostic",
"platformId": "compliance",
"profileId": "financeiro",
"routeId": "compliance.financeiro.diagnostico.administration-route",
"sameSource": true,
"sourcePayloadHash": "b21c4bf0c3ad4722c37ed6c1828bf0776d3dbb5068a401df2f535a431266515b",
"sourceRecordsHash": "ca5156c0c8582f5c6e2fb561320d7a70c373abaeee2767a2b1a2332b6b3268d1",
"status": "ready",
"toolId": "mais_humana.admin.diagnostico"
},
{
"evidenceId": "evidence-04399664610dafb4342c7fe8",
"humanNextAction": "homologar rota administrativa explicacao para compliance/financeiro",
"operation": "explicacao",
"permissionScope": "mcp.admin.explain",
"platformId": "compliance",
"profileId": "financeiro",
"routeId": "compliance.financeiro.explicacao.administration-route",
"sameSource": true,
"sourcePayloadHash": "459fb8cc9a27e565f5af7023075657bbeb3fae176af7ac6371131bb3e3187fa5",
"sourceRecordsHash": "04399664610dafb4342c7fe866699c4357a584ea16e889b222f0eabd43a863e4",
"status": "ready",
"toolId": "mais_humana.admin.explicacao"
},
{
"evidenceId": "evidence-2c706d2f0f15d65a86425a7e",
"humanNextAction": "homologar rota administrativa acao para compliance/gestor_operacional",
"operation": "acao",
"permissionScope": "mcp.admin.action.request",
"platformId": "compliance",
"profileId": "gestor_operacional",
"routeId": "compliance.gestor_operacional.acao.administration-route",
"sameSource": true,
"sourcePayloadHash": "4dc4b3184f00cae60fd5a367e952483b961a4f1ac2be7d0860bc82cb7a0de0b2",
"sourceRecordsHash": "2c706d2f0f15d65a86425a7e128d29037cc4dac3c68ccff4f055ff002907475c",
"status": "ready",
"toolId": "mais_humana.admin.acao"
},
{
"evidenceId": "evidence-626f043679ceb73668a44c49",
"humanNextAction": "homologar rota administrativa auditoria para compliance/gestor_operacional",
"operation": "auditoria",
"permissionScope": "mcp.admin.audit",
"platformId": "compliance",
"profileId": "gestor_operacional",
"routeId": "compliance.gestor_operacional.auditoria.administration-route",
"sameSource": true,
"sourcePayloadHash": "9643383632a567bf814e5e22900230753659ce75eb4da362e1b17c30766b2bb4",
"sourceRecordsHash": "626f043679ceb73668a44c494085f6b7bc019ddaabf0176c59cfa439d7c0c902",
"status": "ready",
"toolId": "mais_humana.admin.auditoria"
},
{
"evidenceId": "evidence-71e9470868e3cd5cee4dcb5d",
"humanNextAction": "homologar rota administrativa consulta para compliance/gestor_operacional",
"operation": "consulta",
"permissionScope": "mcp.admin.readonly",
"platformId": "compliance",
"profileId": "gestor_operacional",
"routeId": "compliance.gestor_operacional.consulta.administration-route",
"sameSource": true,
"sourcePayloadHash": "27092e4c7a47c9f953044fb8be415487afb52c85d44118e5e852936ccbb839d0",
"sourceRecordsHash": "71e9470868e3cd5cee4dcb5dca0a9aa91ee95bbc33a366f64172faa3ff1424f7",
"status": "ready",
"toolId": "mais_humana.admin.consulta"
},
{
"evidenceId": "evidence-3965499d44e0f059e2dd2754",
"humanNextAction": "homologar rota administrativa diagnostico para compliance/gestor_operacional",
"operation": "diagnostico",
"permissionScope": "mcp.admin.diagnostic",
"platformId": "compliance",
"profileId": "gestor_operacional",
"routeId": "compliance.gestor_operacional.diagnostico.administration-route",
"sameSource": true,
"sourcePayloadHash": "0f0c7d15dd0cc66ae69ef3730a045a78d594dd60d618468a9bc569da93c03dbe",
"sourceRecordsHash": "3965499d44e0f059e2dd275488a608c41c3b868c046c87cef625d672c36d974b",
"status": "ready",
"toolId": "mais_humana.admin.diagnostico"
},
{
"evidenceId": "evidence-b2d18bdce27cf85ebc603fc9",
"humanNextAction": "homologar rota administrativa explicacao para compliance/gestor_operacional",
"operation": "explicacao",
"permissionScope": "mcp.admin.explain",
"platformId": "compliance",
"profileId": "gestor_operacional",
"routeId": "compliance.gestor_operacional.explicacao.administration-route",
"sameSource": true,
"sourcePayloadHash": "cf53b062e44bef90594b122ba1f603ed7e19095eb67fa12651cbf78c61c9adcd",
"sourceRecordsHash": "b2d18bdce27cf85ebc603fc9cb1b5a74e50ad7d32f3800210fd28e14c027e049",
"status": "ready",
"toolId": "mais_humana.admin.explicacao"
},
{
"evidenceId": "evidence-6d4a344f9a12d1c66d4e3ec6",
"humanNextAction": "homologar rota administrativa acao para compliance/juridico",
"operation": "acao",
"permissionScope": "mcp.admin.action.request",
"platformId": "compliance",
"profileId": "juridico",
"routeId": "compliance.juridico.acao.administration-route",
"sameSource": true,
"sourcePayloadHash": "eaa561405af97490b772dbdc3748c40415754bea5c5e4c3876bcc05c4948e200",
"sourceRecordsHash": "6d4a344f9a12d1c66d4e3ec6b8da61a973cb9bd6918df5aabe41e4b1a775d970",
"status": "ready",
"toolId": "mais_humana.admin.acao"
},
{
"evidenceId": "evidence-2985d0c7dda4c233b2fc59bd",
"humanNextAction": "homologar rota administrativa auditoria para compliance/juridico",
"operation": "auditoria",
"permissionScope": "mcp.admin.audit",
"platformId": "compliance",
"profileId": "juridico",
"routeId": "compliance.juridico.auditoria.administration-route",
"sameSource": true,
"sourcePayloadHash": "630d3b626e5a65f86d5693a66afed56cb910319c86abf02f6a277eef80692ba2",
"sourceRecordsHash": "2985d0c7dda4c233b2fc59bd5decf8e2802837164e4940ae47688b15fe972a0c",
"status": "ready",
"toolId": "mais_humana.admin.auditoria"
},
{
"evidenceId": "evidence-e390831e33de80045514040f",
"humanNextAction": "homologar rota administrativa consulta para compliance/juridico",
"operation": "consulta",
"permissionScope": "mcp.admin.readonly",
"platformId": "compliance",
"profileId": "juridico",
"routeId": "compliance.juridico.consulta.administration-route",
"sameSource": true,
"sourcePayloadHash": "8410b16e56eee12ed2e25f488fc132c1d76cc807c9f70c791a46740c2afe2f3d",
"sourceRecordsHash": "e390831e33de80045514040faf207ce4fd8776582f13d6dfb40b81d2f641ddca",
"status": "ready",
"toolId": "mais_humana.admin.consulta"
},
{
"evidenceId": "evidence-c4e66185cdf949f41f90a1ab",
"humanNextAction": "homologar rota administrativa diagnostico para compliance/juridico",
"operation": "diagnostico",
"permissionScope": "mcp.admin.diagnostic",
"platformId": "compliance",
"profileId": "juridico",
"routeId": "compliance.juridico.diagnostico.administration-route",
"sameSource": true,
"sourcePayloadHash": "ba75d3dfddc8fcc0b8e2b6d116822ed9b37ead343f76416db844ddebf9a88d02",
"sourceRecordsHash": "c4e66185cdf949f41f90a1abbc089be7ecc65c9d8517692efd326feddb6b4317",
"status": "ready",
"toolId": "mais_humana.admin.diagnostico"
},
{
"evidenceId": "evidence-fbe864cfa750654d5741a786",
"humanNextAction": "homologar rota administrativa explicacao para compliance/juridico",
"operation": "explicacao",
"permissionScope": "mcp.admin.explain",
"platformId": "compliance",
"profileId": "juridico",
"routeId": "compliance.juridico.explicacao.administration-route",
"sameSource": true,
"sourcePayloadHash": "3c1f71411ee7cf8aae746255293fa10ea0cf60d07f987aa8a61376ada8ed3645",
"sourceRecordsHash": "fbe864cfa750654d5741a78695b9243f9b9270dd5ed2b048194991e248e36aef",
"status": "ready",
"toolId": "mais_humana.admin.explicacao"
},
{
"evidenceId": "evidence-ad8ccf701e72652bcae80479",
"humanNextAction": "homologar rota administrativa acao para compliance/planejamento_estrategico",
"operation": "acao",
"permissionScope": "mcp.admin.action.request",
"platformId": "compliance",
"profileId": "planejamento_estrategico",
"routeId": "compliance.planejamento_estrategico.acao.administration-route",
"sameSource": true,
"sourcePayloadHash": "c982b655518732cc50faa276f90f4169e99b084d399a2dabd8f270ac7effcb52",
"sourceRecordsHash": "ad8ccf701e72652bcae804799f82e5a9bfc8e8f2603f2c5ecfc4c3a8736b99b4",
"status": "ready",
"toolId": "mais_humana.admin.acao"
},
{
"evidenceId": "evidence-1e1b61e5839fae182833c595",
"humanNextAction": "homologar rota administrativa auditoria para compliance/planejamento_estrategico",
"operation": "auditoria",
"permissionScope": "mcp.admin.audit",
"platformId": "compliance",
"profileId": "planejamento_estrategico",
"routeId": "compliance.planejamento_estrategico.auditoria.administration-route",
"sameSource": true,
"sourcePayloadHash": "f5da9b8c417c9be3e70f8b6500cccae83ac3caa7e6c7107df310e1cee1ce0ec5",
"sourceRecordsHash": "1e1b61e5839fae182833c595af81468c81575a06293b48cbbf7641b32f3dec15",
"status": "ready",
"toolId": "mais_humana.admin.auditoria"
},
{
"evidenceId": "evidence-e9e5e308341227e00a81a581",
"humanNextAction": "homologar rota administrativa consulta para compliance/planejamento_estrategico",
"operation": "consulta",
"permissionScope": "mcp.admin.readonly",
"platformId": "compliance",
"profileId": "planejamento_estrategico",
"routeId": "compliance.planejamento_estrategico.consulta.administration-route",
"sameSource": true,
"sourcePayloadHash": "66aec318ba43e4b13c8893dfdc6176c1ea0288fab38e1ba4af30f81e56801c7a",
"sourceRecordsHash": "e9e5e308341227e00a81a5810fa273ec006945e72543ed1808825f72a81f9b58",
"status": "ready",
"toolId": "mais_humana.admin.consulta"
},
{
"evidenceId": "evidence-d219cbd8676c8a88b6927520",
"humanNextAction": "homologar rota administrativa diagnostico para compliance/planejamento_estrategico",
"operation": "diagnostico",
"permissionScope": "mcp.admin.diagnostic",
"platformId": "compliance",
"profileId": "planejamento_estrategico",
"routeId": "compliance.planejamento_estrategico.diagnostico.administration-route",
"sameSource": true,
"sourcePayloadHash": "21a7580f3b9f68a456451cd6538a06a4aeb077714f23552674e96a553b96d12d",
"sourceRecordsHash": "d219cbd8676c8a88b69275204dfc6a97723af6faab9aba8fb5ca10be43cf46c7",
"status": "ready",
"toolId": "mais_humana.admin.diagnostico"
},
{
"evidenceId": "evidence-17931610f091a97b1be26182",
"humanNextAction": "homologar rota administrativa explicacao para compliance/planejamento_estrategico",
"operation": "explicacao",
"permissionScope": "mcp.admin.explain",
"platformId": "compliance",
"profileId": "planejamento_estrategico",
"routeId": "compliance.planejamento_estrategico.explicacao.administration-route",
"sameSource": true,
"sourcePayloadHash": "af969ec8d85da56fa50ff88363f33e1578fbec2ec53ed1f2bd71242229175202",
"sourceRecordsHash": "17931610f091a97b1be26182342e7e12a0d4608e07469cd9fb4abf46cb144fb7",
"status": "ready",
"toolId": "mais_humana.admin.explicacao"
},
{
"evidenceId": "evidence-afb2d9e11859c0d9118a0a0e",
"humanNextAction": "homologar rota administrativa acao para compliance/secretaria",
"operation": "acao",
"permissionScope": "mcp.admin.action.request",
"platformId": "compliance",
"profileId": "secretaria",
"routeId": "compliance.secretaria.acao.administration-route",
"sameSource": true,
"sourcePayloadHash": "240c3db34b8a8d9ee81d8dd70f6d46083398021292cd87b8dd3e8b15a6581b75",
"sourceRecordsHash": "afb2d9e11859c0d9118a0a0e9f0bc753aa75c1bd4911800c66d9dc855bb17028",
"status": "ready",
"toolId": "mais_humana.admin.acao"
},
{
"evidenceId": "evidence-ceff2af0341593dba74f07cf",
"humanNextAction": "homologar rota administrativa auditoria para compliance/secretaria",
"operation": "auditoria",
"permissionScope": "mcp.admin.audit",
"platformId": "compliance",
"profileId": "secretaria",
"routeId": "compliance.secretaria.auditoria.administration-route",
"sameSource": true,
"sourcePayloadHash": "9deab34e4f3b4f2746c2abca72f1b6801a3ae11b0d7085b2ef2cb1ee92eee1bf",
"sourceRecordsHash": "ceff2af0341593dba74f07cf5da64dfa64a7a0b786111b7641d2419a52866fae",
"status": "ready",
"toolId": "mais_humana.admin.auditoria"
},
{
"evidenceId": "evidence-f3d917611ef8bb62c667c747",
"humanNextAction": "homologar rota administrativa consulta para compliance/secretaria",
"operation": "consulta",
"permissionScope": "mcp.admin.readonly",
"platformId": "compliance",
"profileId": "secretaria",
"routeId": "compliance.secretaria.consulta.administration-route",
"sameSource": true,
"sourcePayloadHash": "4147bb28d4ead07aa35f4eb3e48ab2fc587b11a42b4660468bf53db3ae32ada0",
"sourceRecordsHash": "f3d917611ef8bb62c667c7476bfc227ce1140ac6fbc7c454c6452e3024d631f3",
"status": "ready",
"toolId": "mais_humana.admin.consulta"
},
{
"evidenceId": "evidence-2a2120f5e6ac500183f8afec",
"humanNextAction": "homologar rota administrativa diagnostico para compliance/secretaria",
"operation": "diagnostico",
"permissionScope": "mcp.admin.diagnostic",
"platformId": "compliance",
"profileId": "secretaria",
"routeId": "compliance.secretaria.diagnostico.administration-route",
"sameSource": true,
"sourcePayloadHash": "fdb58bf8bda585eaee9d5d95223ba35565172a8890d90cba15aaf1353143841b",
"sourceRecordsHash": "2a2120f5e6ac500183f8afecd19e3d0e64bd583b3c68090a6b5c4653152500f2",
"status": "ready",
"toolId": "mais_humana.admin.diagnostico"
},
{
"evidenceId": "evidence-1a75fbf206a46a3a867c7f40",
"humanNextAction": "homologar rota administrativa explicacao para compliance/secretaria",
"operation": "explicacao",
"permissionScope": "mcp.admin.explain",
"platformId": "compliance",
"profileId": "secretaria",
"routeId": "compliance.secretaria.explicacao.administration-route",
"sameSource": true,
"sourcePayloadHash": "36bf8a71338c1d2fc1a601c5d71df1101e3705bc95817412e756debc8cdb5144",
"sourceRecordsHash": "1a75fbf206a46a3a867c7f40acb685866b1680601324d35e115c14cd9a7520b0",
"status": "ready",
"toolId": "mais_humana.admin.explicacao"
},
{
"evidenceId": "evidence-36499e555d54edeb736f7f8c",
"humanNextAction": "homologar rota administrativa acao para compliance/suporte",
"operation": "acao",
"permissionScope": "mcp.admin.action.request",
"platformId": "compliance",
"profileId": "suporte",
"routeId": "compliance.suporte.acao.administration-route",
"sameSource": true,
"sourcePayloadHash": "4f697a5f0129e0ea60fd03b5d942462d836f9c60beeac8b8b1c4b45f667104d1",
"sourceRecordsHash": "36499e555d54edeb736f7f8c54d276aadd980cde29b2809b67b9825c029e7072",
"status": "ready",
"toolId": "mais_humana.admin.acao"
},
{
"evidenceId": "evidence-b55cf00e3af8f4ec5e2b8325",
"humanNextAction": "homologar rota administrativa auditoria para compliance/suporte",
"operation": "auditoria",
"permissionScope": "mcp.admin.audit",
"platformId": "compliance",
"profileId": "suporte",
"routeId": "compliance.suporte.auditoria.administration-route",
"sameSource": true,
"sourcePayloadHash": "04db6ab59588c434420ada8c74869401774b7ebc99436fc30d14fe6769365686",
"sourceRecordsHash": "b55cf00e3af8f4ec5e2b832574db8ce9d7e7fd0a34466e458bd36cb812c526a0",
"status": "ready",
"toolId": "mais_humana.admin.auditoria"
},
{
"evidenceId": "evidence-298456292b7717b5c5174ec5",
"humanNextAction": "homologar rota administrativa consulta para compliance/suporte",
"operation": "consulta",
"permissionScope": "mcp.admin.readonly",
"platformId": "compliance",
"profileId": "suporte",
"routeId": "compliance.suporte.consulta.administration-route",
"sameSource": true,
"sourcePayloadHash": "807701cdddaa5c54c2b35e542afb59b37dc30487aa4a65aba78f54cc5ba59ab1",
"sourceRecordsHash": "298456292b7717b5c5174ec5e7f17d3f288da7166dce04d7669681cdbcda181c",
"status": "ready",
"toolId": "mais_humana.admin.consulta"
},
{
"evidenceId": "evidence-b67a15a015b3928efc9c4923",
"humanNextAction": "homologar rota administrativa diagnostico para compliance/suporte",
"operation": "diagnostico",
"permissionScope": "mcp.admin.diagnostic",
"platformId": "compliance",
"profileId": "suporte",
"routeId": "compliance.suporte.diagnostico.administration-route",
"sameSource": true,
"sourcePayloadHash": "31036b94029c53ad7672843aa537af2045a7bde91936d529d32be0e102731acc",
"sourceRecordsHash": "b67a15a015b3928efc9c4923cb3a19b38a6139e99ba9b86b6dac211f2159d0f7",
"status": "ready",
"toolId": "mais_humana.admin.diagnostico"
},
{
"evidenceId": "evidence-0583bdb82cfbcaec1bfaf870",
"humanNextAction": "homologar rota administrativa explicacao para compliance/suporte",
"operation": "explicacao",
"permissionScope": "mcp.admin.explain",
"platformId": "compliance",
"profileId": "suporte",
"routeId": "compliance.suporte.explicacao.administration-route",
"sameSource": true,
"sourcePayloadHash": "b67ba4a2d78969a39a1acb3c1f075bc834b40d38c2da91510f39d5fb354d864f",
"sourceRecordsHash": "0583bdb82cfbcaec1bfaf870f78ffbcbadbdaafc2df1ceda7b6724be5beac2ef",
"status": "ready",
"toolId": "mais_humana.admin.explicacao"
} }
], ],
"controlPlaneId": "tudo-para-ia-mcps-internos-plataform", "controlPlaneId": "tudo-para-ia-mcps-internos-plataform",
"evidenceId": "evidence-3e8315d3681d99686af5b998", "evidenceId": "evidence-3e8315d3681d99686af5b998",
"generatedAt": "2026-05-02T08:24:24+00:00", "generatedAt": "2026-05-02T10:23:15+00:00",
"operations": { "operations": {
"acao": 182, "acao": 182,
"auditoria": 182, "auditoria": 182,
@@ -1698,8 +1138,8 @@
"providerId": "mais_humana", "providerId": "mais_humana",
"readyCases": 520, "readyCases": 520,
"readyRatio": 0.5714285714285714, "readyRatio": 0.5714285714285714,
"reportId": "mcp-admin-route-acceptance-0687936a42e37619", "reportId": "mcp-admin-route-acceptance-9841af72a6e6588d",
"returnedCases": 120, "returnedCases": 80,
"sourceHash": "f9844f598bfbfb968acea6465fc4b8f7a277b5b071003f3808d1581ce3112363", "sourceHash": "f9844f598bfbfb968acea6465fc4b8f7a277b5b071003f3808d1581ce3112363",
"status": "blocked", "status": "blocked",
"totalCases": 910 "totalCases": 910

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@
"path": "G:\\_codex-git\\nucleo-gestao-operacional\\central-de-ordem-de-servico\\projects\\15_repo_tudo-para-ia-mais-humana-platform\\reports\\executivos\\MCP-PUBLICATION-GATE-MAIS-HUMANA__RODADA015.md" "path": "G:\\_codex-git\\nucleo-gestao-operacional\\central-de-ordem-de-servico\\projects\\15_repo_tudo-para-ia-mais-humana-platform\\reports\\executivos\\MCP-PUBLICATION-GATE-MAIS-HUMANA__RODADA015.md"
} }
], ],
"generatedAt": "2026-05-02T09:22:34+00:00", "generatedAt": "2026-05-02T10:23:16+00:00",
"ok": false, "ok": false,
"policy": "falha de escrita central nao aborta artefatos do projeto real" "policy": "falha de escrita central nao aborta artefatos do projeto real"
} }

View File

@@ -50,7 +50,7 @@
], ],
"next_action": "corrigir credencial Git/Schannel e reconciliar ahead/behind sem reset destrutivo", "next_action": "corrigir credencial Git/Schannel e reconciliar ahead/behind sem reset destrutivo",
"order_id": "0033_EXECUTIVA__sincronizar-git-mais-humana-mcps-central-com-credenciais", "order_id": "0033_EXECUTIVA__sincronizar-git-mais-humana-mcps-central-com-credenciais",
"reason": "fetch falhou por Permission denied em FETCH_HEAD; ls-remote/push falhou por SEC_E_NO_CREDENTIALS; repo mesh bloqueou sync destrutiva", "reason": "fetch failed: SEC_E_NO_CREDENTIALS",
"status": "blocked" "status": "blocked"
}, },
{ {
@@ -150,7 +150,7 @@
"mais_humana.admin_routes.acceptance" "mais_humana.admin_routes.acceptance"
] ]
}, },
"generated_at": "2026-05-02T09:22:34+00:00", "generated_at": "2026-05-02T10:23:16+00:00",
"liveReady": true, "liveReady": true,
"live_probes": [ "live_probes": [
{ {
@@ -160,7 +160,7 @@
"evidence_id": "evidence-a75a27e0669c49da1db8b615", "evidence_id": "evidence-a75a27e0669c49da1db8b615",
"http_status": 200, "http_status": 200,
"missing_transit_fields": [], "missing_transit_fields": [],
"observed_at": "2026-05-02T09:22:34+00:00", "observed_at": "2026-05-02T10:23:16+00:00",
"ok": true, "ok": true,
"response_excerpt": { "response_excerpt": {
"__truncated__": true, "__truncated__": true,
@@ -206,7 +206,7 @@
"evidence_id": "evidence-af37a8d489b0038a7a6b5575", "evidence_id": "evidence-af37a8d489b0038a7a6b5575",
"http_status": 200, "http_status": 200,
"missing_transit_fields": [], "missing_transit_fields": [],
"observed_at": "2026-05-02T09:22:34+00:00", "observed_at": "2026-05-02T10:23:16+00:00",
"ok": true, "ok": true,
"response_excerpt": { "response_excerpt": {
"__truncated__": true, "__truncated__": true,
@@ -252,7 +252,7 @@
"evidence_id": "evidence-3f0e3b9f829c7ff912b335d0", "evidence_id": "evidence-3f0e3b9f829c7ff912b335d0",
"http_status": 200, "http_status": 200,
"missing_transit_fields": [], "missing_transit_fields": [],
"observed_at": "2026-05-02T09:22:34+00:00", "observed_at": "2026-05-02T10:23:16+00:00",
"ok": true, "ok": true,
"response_excerpt": { "response_excerpt": {
"__truncated__": true, "__truncated__": true,
@@ -298,7 +298,7 @@
"evidence_id": "evidence-6be52832c728db2bbbbce461", "evidence_id": "evidence-6be52832c728db2bbbbce461",
"http_status": 200, "http_status": 200,
"missing_transit_fields": [], "missing_transit_fields": [],
"observed_at": "2026-05-02T09:22:34+00:00", "observed_at": "2026-05-02T10:23:16+00:00",
"ok": true, "ok": true,
"response_excerpt": { "response_excerpt": {
"__truncated__": true, "__truncated__": true,
@@ -340,7 +340,7 @@
], ],
"localReady": true, "localReady": true,
"provider_id": "mais_humana", "provider_id": "mais_humana",
"report_id": "mcp-publication-gate-2026-05-02t0922340000", "report_id": "mcp-publication-gate-2026-05-02t1023160000",
"status": "partial", "status": "partial",
"summary": [ "summary": [
"Provider local Mais Humana pronto: True.", "Provider local Mais Humana pronto: True.",
@@ -364,7 +364,7 @@
"wrangler_whoami": "unknown" "wrangler_whoami": "unknown"
}, },
"deploy_dry_run_ok": false, "deploy_dry_run_ok": false,
"raw_summary": "not attempted in this runner: router says deploy is manual by user; smoke live only", "raw_summary": "deploy manual informado pelo roteador; validacao live por HTTP; plugin Cloudflare nao usado como via operacional",
"version": "" "version": ""
} }
} }

View File

@@ -0,0 +1,234 @@
# Plano de migracao canonica - Mais Humana
- status: `blocked`
- plan_id: `canonical-migration-ef44c4c42f80650a072b`
- canonical_project_id: `tudo-para-ia-mais-humana-platform`
- current_project_id: `tudo-para-ia-mais-humana`
- legacy_alias: `tudo-para-ia-mais-humana-plataform`
- central_folder: `15_repo_tudo-para-ia-mais-humana-platform`
- decision_source: `015-ROTEADOR-PERMANENTE-DE-ORDEM_DE_SERVICO.MD`
- generated_from: `generated_canonical_migration_plan`
- controls: `9`
- acceptance_cases: `9315`
- accepted_cases: `9315`
- blocked_cases: `0`
## Regra institucional
Nome canonico institucional aprovado como tudo-para-ia-mais-humana-platform; o repositorio local historico tudo-para-ia-mais-humana e o alias tudo-para-ia-mais-humana-plataform permanecem aliases de compatibilidade ate migracao Git/MCP sincronizada, sem duplicar repositorio nem sobrescrever historico.
## Controles
### canonical-identity-approved
- layer: `identity`
- status: `ready`
- current_state: `repo materializado como tudo-para-ia-mais-humana; alias historico tudo-para-ia-mais-humana-plataform`
- canonical_state: `tudo-para-ia-mais-humana-platform`
- blockers: `nenhum`
- order_ids: `0035_EXECUTIVA__reconciliar-nome-canonico-real-alias-platform, 0052_GERENCIAL__formalizar-nome-canonico-mais-humana-platform-e-aliases`
### filesystem-alias-window
- layer: `filesystem`
- status: `manual_window_required`
- current_state: `G:/_codex-git/tudo-para-ia-mais-humana`
- canonical_state: `G:/_codex-git/tudo-para-ia-mais-humana-platform`
- blockers: `rename fisico depende de janela institucional e comparacao de remotes`
- order_ids: `0057_GERENCIAL__governar-migracao-coordenada-do-nome-canonico-platform`
### git-remote-canonicalization
- layer: `git_remote`
- status: `blocked`
- current_state: `origin historico https://git.ami.app.br/admin/tudo-para-ia-mais-humana.git`
- canonical_state: `https://git.ami.app.br/admin/tudo-para-ia-mais-humana-platform.git`
- blockers: `SEC_E_NO_CREDENTIALS no Git Windows; renome remoto depende de Gitea/owner`
- order_ids: `0038_EXECUTIVA__corrigir-acl-index-lock-e-commitar-artefatos-mcp, 0050_GERENCIAL__decidir-politica-de-sync-automatico-e-credencial-gitea`
### central-dossier-materialized
- layer: `central_dossier`
- status: `partial`
- current_state: `15_repo_tudo-para-ia-mais-humana-platform`
- canonical_state: `15_repo_tudo-para-ia-mais-humana-platform como dossie; project_id canonico tudo-para-ia-mais-humana-platform`
- blockers: `central ja possui alteracoes concorrentes nao pertencentes a esta rodada`
- order_ids: `0040_EXECUTIVA__materializar-escrita-central-e-sql-semantico-sem-permissionerror`
### mcp-contract-owner-canonical
- layer: `mcp_contract`
- status: `ready`
- current_state: `provider Mais Humana aceita aliases e tools live`
- canonical_state: `ownerPlatformId/canonicalProjectId = tudo-para-ia-mais-humana-platform`
- blockers: `nenhum`
- order_ids: `0037_EXECUTIVA__homologar-rotas-administrativas-mcp-no-gateway, 0049_GERENCIAL__homologar-mcp-only-administration-routes-como-politica-de-ecossistema`
### mcp-execute-live-readback
- layer: `mcp_execute`
- status: `partial`
- current_state: `tools Mais Humana respondem no endpoint live quando publicadas`
- canonical_state: `https://mcps-gateway.ami-app.workers.dev/v1/execute audita alias e canonico pelo MCPs Internos`
- blockers: `deploy live e smoke dependem de runner/deploy manual quando wrangler local falhar`
- order_ids: `0039_EXECUTIVA__reexecutar-wrangler-em-runner-homologado-e-registrar-deploy`
### docs-ui-same-source
- layer: `docs_ui`
- status: `blocked`
- current_state: `Docs pode estar catalogOnly; UI deve renderizar fonte MCP`
- canonical_state: `GPT e painel explicam a mesma instancia administrativa canonica`
- blockers: `Docs responseReady ou excecao catalogOnly depende de owner`
- order_ids: `0053_GERENCIAL__pactuar-docs-catalogonly-ou-response-ready-como-excecao-global`
### sync-mesh-no-reversal
- layer: `sync_mesh`
- status: `blocked`
- current_state: `fetch/push podem falhar por credencial ou ACL; central tem deltas concorrentes`
- canonical_state: `hashes comparados antes de qualquer renome, push ou materializacao remota`
- blockers: `SEC_E_NO_CREDENTIALS; FETCH_HEAD/index.lock Permission denied; worktree central divergente`
- order_ids: `0038_EXECUTIVA__corrigir-acl-index-lock-e-commitar-artefatos-mcp, 0050_GERENCIAL__decidir-politica-de-sync-automatico-e-credencial-gitea`
### rollback-and-audit-pack
- layer: `rollback`
- status: `partial`
- current_state: `aliases preservam operacao enquanto remoto/diretorio seguem historicos`
- canonical_state: `rollback inclui hashes, remotes, deployment id, ordem de servico e ledger MCP`
- blockers: `sem push remoto confirmado nao ha rollback remoto auditavel`
- order_ids: `0057_GERENCIAL__governar-migracao-coordenada-do-nome-canonico-platform`
## Casos MCP de aceitacao
- `canonical-migration-44c5d04b19fe632cb7fbb839` `tudo-para-ia-business-platform` `canonicalProjectId` -> `tudo-para-ia-business-platform` status `canonical` action `manter valor canonico`
- `canonical-migration-a877077358634d737f3618c9` `tudo-para-ia-business-platform` `canonicalProjectId` -> `tudo-para-ia-business-platform` status `canonical` action `manter valor canonico`
- `canonical-migration-ac6f2204c9d1c8dc0908f3f0` `tudo-para-ia-business-platform` `canonicalProjectId` -> `tudo-para-ia-business-platform` status `canonical` action `manter valor canonico`
- `canonical-migration-38362880aa6c4c1aacd7492f` `tudo-para-ia-business-platform` `canonicalProjectId` -> `tudo-para-ia-business-platform` status `canonical` action `manter valor canonico`
- `canonical-migration-c2f07eea5d398ccac7257ace` `tudo-para-ia-business-platform` `canonicalProjectId` -> `tudo-para-ia-business-platform` status `canonical` action `manter valor canonico`
- `canonical-migration-602383cfd8d05c019276e137` `tudo-para-ia-business-platform` `canonicalProjectId` -> `tudo-para-ia-business-plataform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-33fce81bd261d2bce85bf48b` `tudo-para-ia-business-platform` `canonicalProjectId` -> `tudo-para-ia-business-plataform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-7eb8a55ae7f0c3a4b681e171` `tudo-para-ia-business-platform` `canonicalProjectId` -> `tudo-para-ia-business-plataform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-0e04706b3fd515957c479481` `tudo-para-ia-business-platform` `canonicalProjectId` -> `tudo-para-ia-business-plataform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-6daca984ea438fc1e0c67121` `tudo-para-ia-business-platform` `canonicalProjectId` -> `tudo-para-ia-business-plataform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-c8fc1a2f3c9a20256715ac92` `tudo-para-ia-business-platform` `canonicalProjectId` -> `01_repo_tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-245877cd8651275528e0867d` `tudo-para-ia-business-platform` `canonicalProjectId` -> `01_repo_tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-b577a9e83cb70c4b30e2b028` `tudo-para-ia-business-platform` `canonicalProjectId` -> `01_repo_tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-10a218ba7482ee68386e0252` `tudo-para-ia-business-platform` `canonicalProjectId` -> `01_repo_tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-e858561342ae3aa880b7e6c3` `tudo-para-ia-business-platform` `canonicalProjectId` -> `01_repo_tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-3bc9e8b743fab1ac47b6c956` `tudo-para-ia-business-platform` `canonicalProjectId` -> `admin/tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-2a5ef8244f8a7b8e7cb9e9ed` `tudo-para-ia-business-platform` `canonicalProjectId` -> `admin/tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-3e8c7a91355191e634e10f8b` `tudo-para-ia-business-platform` `canonicalProjectId` -> `admin/tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-12ca08c041bd3cff89265951` `tudo-para-ia-business-platform` `canonicalProjectId` -> `admin/tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-e760c54c439933c3e5428b6a` `tudo-para-ia-business-platform` `canonicalProjectId` -> `admin/tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-2b03359adeb7d1240dfef262` `tudo-para-ia-business-platform` `canonicalProjectId` -> `https://git.ami.app.br/admin/tudo-para-ia-business-platform.git` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-e479a26e7a68b07b7c7a6992` `tudo-para-ia-business-platform` `canonicalProjectId` -> `https://git.ami.app.br/admin/tudo-para-ia-business-platform.git` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-69429c6b6acf1a714c62b498` `tudo-para-ia-business-platform` `canonicalProjectId` -> `https://git.ami.app.br/admin/tudo-para-ia-business-platform.git` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-dd91e80f97a24d81828e9daa` `tudo-para-ia-business-platform` `canonicalProjectId` -> `https://git.ami.app.br/admin/tudo-para-ia-business-platform.git` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-ac1a94cdf8da0c17131ab5ae` `tudo-para-ia-business-platform` `canonicalProjectId` -> `https://git.ami.app.br/admin/tudo-para-ia-business-platform.git` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-bdcd3fd4cc30b58ae300da2a` `tudo-para-ia-business-platform` `ownerPlatformId` -> `tudo-para-ia-business-platform` status `canonical` action `manter valor canonico`
- `canonical-migration-9899db0053e5c42ecefec4ff` `tudo-para-ia-business-platform` `ownerPlatformId` -> `tudo-para-ia-business-platform` status `canonical` action `manter valor canonico`
- `canonical-migration-ba04e581cbc2a3b1cc858867` `tudo-para-ia-business-platform` `ownerPlatformId` -> `tudo-para-ia-business-platform` status `canonical` action `manter valor canonico`
- `canonical-migration-44d605fc3f2886ad59f299ca` `tudo-para-ia-business-platform` `ownerPlatformId` -> `tudo-para-ia-business-platform` status `canonical` action `manter valor canonico`
- `canonical-migration-d0cc43491f4d2bb499463aff` `tudo-para-ia-business-platform` `ownerPlatformId` -> `tudo-para-ia-business-platform` status `canonical` action `manter valor canonico`
- `canonical-migration-ff73e9baedfd32d061cf4129` `tudo-para-ia-business-platform` `ownerPlatformId` -> `tudo-para-ia-business-plataform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-30ff1ca3d15f313efe13dac6` `tudo-para-ia-business-platform` `ownerPlatformId` -> `tudo-para-ia-business-plataform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-7aa277c3c937f5eebe3bca63` `tudo-para-ia-business-platform` `ownerPlatformId` -> `tudo-para-ia-business-plataform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-b644e08b4fa0f04ccc962d26` `tudo-para-ia-business-platform` `ownerPlatformId` -> `tudo-para-ia-business-plataform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-aeee734f742f477606a74f3c` `tudo-para-ia-business-platform` `ownerPlatformId` -> `tudo-para-ia-business-plataform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-1b0ab5730783a8906ff96636` `tudo-para-ia-business-platform` `ownerPlatformId` -> `01_repo_tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-e264bf6c00421b8d0308c318` `tudo-para-ia-business-platform` `ownerPlatformId` -> `01_repo_tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-b57345662ec85ed63ef5f168` `tudo-para-ia-business-platform` `ownerPlatformId` -> `01_repo_tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-ae70e1996c0316f026f641e9` `tudo-para-ia-business-platform` `ownerPlatformId` -> `01_repo_tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-8e2ec4d7c97566ce2f8729fe` `tudo-para-ia-business-platform` `ownerPlatformId` -> `01_repo_tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-4f9e3556c99c2d2af864db7b` `tudo-para-ia-business-platform` `ownerPlatformId` -> `admin/tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-547e4fdebfeb9023609f83bb` `tudo-para-ia-business-platform` `ownerPlatformId` -> `admin/tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-d0b8462735e0e16a2c31b885` `tudo-para-ia-business-platform` `ownerPlatformId` -> `admin/tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-2f29b665c5c3661af81a85a2` `tudo-para-ia-business-platform` `ownerPlatformId` -> `admin/tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-975daa71336cce4c61bed690` `tudo-para-ia-business-platform` `ownerPlatformId` -> `admin/tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-a6351160b74403e1e46dde53` `tudo-para-ia-business-platform` `ownerPlatformId` -> `https://git.ami.app.br/admin/tudo-para-ia-business-platform.git` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-84bd339909b785959853b02c` `tudo-para-ia-business-platform` `ownerPlatformId` -> `https://git.ami.app.br/admin/tudo-para-ia-business-platform.git` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-960faf1ade82d94c32b1c9c7` `tudo-para-ia-business-platform` `ownerPlatformId` -> `https://git.ami.app.br/admin/tudo-para-ia-business-platform.git` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-14f10fdbf208d974b105ee0e` `tudo-para-ia-business-platform` `ownerPlatformId` -> `https://git.ami.app.br/admin/tudo-para-ia-business-platform.git` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-61ccfc82e6dd8eb81bed8b87` `tudo-para-ia-business-platform` `ownerPlatformId` -> `https://git.ami.app.br/admin/tudo-para-ia-business-platform.git` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-ae008896ab414770226a3359` `tudo-para-ia-business-platform` `owner_platform_id` -> `tudo-para-ia-business-platform` status `canonical` action `manter valor canonico`
- `canonical-migration-22253aff5b02cef3dcea8c9f` `tudo-para-ia-business-platform` `owner_platform_id` -> `tudo-para-ia-business-platform` status `canonical` action `manter valor canonico`
- `canonical-migration-d3e32666185ba3ded218e970` `tudo-para-ia-business-platform` `owner_platform_id` -> `tudo-para-ia-business-platform` status `canonical` action `manter valor canonico`
- `canonical-migration-3e79f6d315370491024cd55b` `tudo-para-ia-business-platform` `owner_platform_id` -> `tudo-para-ia-business-platform` status `canonical` action `manter valor canonico`
- `canonical-migration-b72fb9bc5e3f5b5e1d243e21` `tudo-para-ia-business-platform` `owner_platform_id` -> `tudo-para-ia-business-platform` status `canonical` action `manter valor canonico`
- `canonical-migration-a1fc5ac3a1f8bba48db116fe` `tudo-para-ia-business-platform` `owner_platform_id` -> `tudo-para-ia-business-plataform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-518aa6010757eb93d38a3a9a` `tudo-para-ia-business-platform` `owner_platform_id` -> `tudo-para-ia-business-plataform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-eec736e6debf6b254a3d3971` `tudo-para-ia-business-platform` `owner_platform_id` -> `tudo-para-ia-business-plataform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-e1789466668511600c62e7f0` `tudo-para-ia-business-platform` `owner_platform_id` -> `tudo-para-ia-business-plataform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-99be71c20c480989cca2a317` `tudo-para-ia-business-platform` `owner_platform_id` -> `tudo-para-ia-business-plataform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-730cc176feb06669e853502a` `tudo-para-ia-business-platform` `owner_platform_id` -> `01_repo_tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-2c344951d920dd5189f35a2d` `tudo-para-ia-business-platform` `owner_platform_id` -> `01_repo_tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-a94b5d6717173ae44f833b42` `tudo-para-ia-business-platform` `owner_platform_id` -> `01_repo_tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-9cbc6c2e78a8114205bdc122` `tudo-para-ia-business-platform` `owner_platform_id` -> `01_repo_tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-bcdce7eca3b60830d6e24e73` `tudo-para-ia-business-platform` `owner_platform_id` -> `01_repo_tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-b30f240c2b1d1c4e59788627` `tudo-para-ia-business-platform` `owner_platform_id` -> `admin/tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-e9a10192bfa0081596a43f4d` `tudo-para-ia-business-platform` `owner_platform_id` -> `admin/tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-e32fdbd6bcd9f21d4b712eb6` `tudo-para-ia-business-platform` `owner_platform_id` -> `admin/tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-183edf4ee5bca9b630219116` `tudo-para-ia-business-platform` `owner_platform_id` -> `admin/tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-0ed883cc0dd0c22ee14e3c5d` `tudo-para-ia-business-platform` `owner_platform_id` -> `admin/tudo-para-ia-business-platform` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-667f8f2235d3a3c1570fc23a` `tudo-para-ia-business-platform` `owner_platform_id` -> `https://git.ami.app.br/admin/tudo-para-ia-business-platform.git` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-7dfd45958c7734d620158170` `tudo-para-ia-business-platform` `owner_platform_id` -> `https://git.ami.app.br/admin/tudo-para-ia-business-platform.git` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-3340de63fe8b57191939aabd` `tudo-para-ia-business-platform` `owner_platform_id` -> `https://git.ami.app.br/admin/tudo-para-ia-business-platform.git` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-8085a72fe8f8170a553179ab` `tudo-para-ia-business-platform` `owner_platform_id` -> `https://git.ami.app.br/admin/tudo-para-ia-business-platform.git` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-9b888b400a646532a0dc4de4` `tudo-para-ia-business-platform` `owner_platform_id` -> `https://git.ami.app.br/admin/tudo-para-ia-business-platform.git` status `canonical_field_rewrite_required` action `reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir`
- `canonical-migration-c867abe631250718eea17ced` `tudo-para-ia-business-platform` `projectId` -> `tudo-para-ia-business-platform` status `canonical` action `usar valor canonico`
- `canonical-migration-9580dff8b3717b71e2d27176` `tudo-para-ia-business-platform` `projectId` -> `tudo-para-ia-business-platform` status `canonical` action `usar valor canonico`
- `canonical-migration-3fc013240938eccbe4811154` `tudo-para-ia-business-platform` `projectId` -> `tudo-para-ia-business-platform` status `canonical` action `usar valor canonico`
- `canonical-migration-9548826039a2da37e89f66a1` `tudo-para-ia-business-platform` `projectId` -> `tudo-para-ia-business-platform` status `canonical` action `usar valor canonico`
- `canonical-migration-9a7a632eadc94185f3bb1e65` `tudo-para-ia-business-platform` `projectId` -> `tudo-para-ia-business-platform` status `canonical` action `usar valor canonico`
- `canonical-migration-2c24b7b524718a3801b02c72` `tudo-para-ia-business-platform` `projectId` -> `tudo-para-ia-business-plataform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-8377d81725e9c7eb9e795dd7` `tudo-para-ia-business-platform` `projectId` -> `tudo-para-ia-business-plataform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-511b60278c766215b1c4a543` `tudo-para-ia-business-platform` `projectId` -> `tudo-para-ia-business-plataform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-897b576ceb2d5ec5c0369907` `tudo-para-ia-business-platform` `projectId` -> `tudo-para-ia-business-plataform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-ca6a3bf7b1b1f58858ba5b3e` `tudo-para-ia-business-platform` `projectId` -> `tudo-para-ia-business-plataform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-c6350481b5c888a560c1cc8c` `tudo-para-ia-business-platform` `projectId` -> `01_repo_tudo-para-ia-business-platform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-d6a3032f3f4133190103460e` `tudo-para-ia-business-platform` `projectId` -> `01_repo_tudo-para-ia-business-platform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-b45278bd526f444e681b1dc7` `tudo-para-ia-business-platform` `projectId` -> `01_repo_tudo-para-ia-business-platform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-9e65acf5b7004a1a68062f1e` `tudo-para-ia-business-platform` `projectId` -> `01_repo_tudo-para-ia-business-platform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-65f4d2c0e8abadedc09ce508` `tudo-para-ia-business-platform` `projectId` -> `01_repo_tudo-para-ia-business-platform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-0950b88b9cca04731ea58142` `tudo-para-ia-business-platform` `projectId` -> `admin/tudo-para-ia-business-platform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-747f43e1de6b4300be281095` `tudo-para-ia-business-platform` `projectId` -> `admin/tudo-para-ia-business-platform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-7251bcf099505746dc324873` `tudo-para-ia-business-platform` `projectId` -> `admin/tudo-para-ia-business-platform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-2e5470716bea89e8eb83a206` `tudo-para-ia-business-platform` `projectId` -> `admin/tudo-para-ia-business-platform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-761535bfad7c3990ea83041a` `tudo-para-ia-business-platform` `projectId` -> `admin/tudo-para-ia-business-platform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-5e211d8d3f3a332e4da48e5e` `tudo-para-ia-business-platform` `projectId` -> `https://git.ami.app.br/admin/tudo-para-ia-business-platform.git` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-5591ffbdc88e821126be099f` `tudo-para-ia-business-platform` `projectId` -> `https://git.ami.app.br/admin/tudo-para-ia-business-platform.git` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-e21a7376cbbd6a795158f02c` `tudo-para-ia-business-platform` `projectId` -> `https://git.ami.app.br/admin/tudo-para-ia-business-platform.git` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-dbadfecd61374575ed4fff27` `tudo-para-ia-business-platform` `projectId` -> `https://git.ami.app.br/admin/tudo-para-ia-business-platform.git` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-62b35f6f0c0bf172fbada2c1` `tudo-para-ia-business-platform` `projectId` -> `https://git.ami.app.br/admin/tudo-para-ia-business-platform.git` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-2f0ab353e22bc3e1fe6947c5` `tudo-para-ia-business-platform` `project_id` -> `tudo-para-ia-business-platform` status `canonical` action `usar valor canonico`
- `canonical-migration-5cba8441cd6e385d1172289a` `tudo-para-ia-business-platform` `project_id` -> `tudo-para-ia-business-platform` status `canonical` action `usar valor canonico`
- `canonical-migration-0bc0961201c48d09d0a4311e` `tudo-para-ia-business-platform` `project_id` -> `tudo-para-ia-business-platform` status `canonical` action `usar valor canonico`
- `canonical-migration-23a3d21b8b5710c46ada563d` `tudo-para-ia-business-platform` `project_id` -> `tudo-para-ia-business-platform` status `canonical` action `usar valor canonico`
- `canonical-migration-85d7bb83ccb64421647c7d82` `tudo-para-ia-business-platform` `project_id` -> `tudo-para-ia-business-platform` status `canonical` action `usar valor canonico`
- `canonical-migration-7ba74241973ef4801606c828` `tudo-para-ia-business-platform` `project_id` -> `tudo-para-ia-business-plataform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-dfda6815dfaa44fe8020ca6a` `tudo-para-ia-business-platform` `project_id` -> `tudo-para-ia-business-plataform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-4f3ce2403eed04c31b225d87` `tudo-para-ia-business-platform` `project_id` -> `tudo-para-ia-business-plataform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-95e1d9a21cb23e2b735abc0c` `tudo-para-ia-business-platform` `project_id` -> `tudo-para-ia-business-plataform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-408c3b28f31d4a2b9dea7519` `tudo-para-ia-business-platform` `project_id` -> `tudo-para-ia-business-plataform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-9a04a74b9dfd8befe2afccf4` `tudo-para-ia-business-platform` `project_id` -> `01_repo_tudo-para-ia-business-platform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-88c0c055954e6f9320ea77f6` `tudo-para-ia-business-platform` `project_id` -> `01_repo_tudo-para-ia-business-platform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-a1ed3a3983dc86122c429ebe` `tudo-para-ia-business-platform` `project_id` -> `01_repo_tudo-para-ia-business-platform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-e325bb344cf59f3f2aed54c4` `tudo-para-ia-business-platform` `project_id` -> `01_repo_tudo-para-ia-business-platform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-07427d1df20f0f458dc22a0d` `tudo-para-ia-business-platform` `project_id` -> `01_repo_tudo-para-ia-business-platform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-26cd2b13d425d907696eeef0` `tudo-para-ia-business-platform` `project_id` -> `admin/tudo-para-ia-business-platform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-29f1996dc8ed02956f40bc39` `tudo-para-ia-business-platform` `project_id` -> `admin/tudo-para-ia-business-platform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-8361d2fb1c613e990c399780` `tudo-para-ia-business-platform` `project_id` -> `admin/tudo-para-ia-business-platform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-fbc65144fd256f64b2e45e60` `tudo-para-ia-business-platform` `project_id` -> `admin/tudo-para-ia-business-platform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
- `canonical-migration-d6ec056220b123c398d5afaa` `tudo-para-ia-business-platform` `project_id` -> `admin/tudo-para-ia-business-platform` status `alias_accepted` action `resolver alias para canonical_project_id no MCP e registrar trace/audit`
## Bloqueios reais
- rename fisico depende de janela institucional e comparacao de remotes
- SEC_E_NO_CREDENTIALS no Git Windows
- renome remoto depende de Gitea/owner
- central ja possui alteracoes concorrentes nao pertencentes a esta rodada
- deploy live e smoke dependem de runner/deploy manual quando wrangler local falhar
- Docs responseReady ou excecao catalogOnly depende de owner
- SEC_E_NO_CREDENTIALS
- FETCH_HEAD/index.lock Permission denied
- worktree central divergente
- sem push remoto confirmado nao ha rollback remoto auditavel
## Politica de transito MCP
- Toda migracao interplataforma deve passar pelo MCPs Internos.
- Campos de transito obrigatorios: `origin`, `destination`, `tool`, `payload`, `actor`, `permission`, `result`, `traceId`, `auditId`, `timestamp`.
- Escrita direta em repositorio, painel ou plataforma permanece bloqueada quando nao houver traceId/auditId.

View File

@@ -1,7 +1,7 @@
# EXECUTADO - Central Materialization # EXECUTADO - Central Materialization
- report_id: `central-materialization-916556597461` - report_id: `central-materialization-382892847432`
- generated_at: `2026-05-02T09:22:50+00:00` - generated_at: `2026-05-02T10:22:58+00:00`
- status: `failed` - status: `failed`
- project_id: `tudo-para-ia-mais-humana-platform` - project_id: `tudo-para-ia-mais-humana-platform`
- project_root: `G:\_codex-git\tudo-para-ia-mais-humana` - project_root: `G:\_codex-git\tudo-para-ia-mais-humana`

View File

@@ -1,7 +1,7 @@
# MCP Admin Route Acceptance # MCP Admin Route Acceptance
- report_id: `mcp-admin-route-acceptance-0687936a42e37619` - report_id: `mcp-admin-route-acceptance-9841af72a6e6588d`
- generated_at: `2026-05-02T08:24:24+00:00` - generated_at: `2026-05-02T10:23:15+00:00`
- provider_id: `mais_humana` - provider_id: `mais_humana`
- control_plane_id: `tudo-para-ia-mcps-internos-plataform` - control_plane_id: `tudo-para-ia-mcps-internos-plataform`
- status: `blocked` - status: `blocked`

View File

@@ -1,7 +1,7 @@
# Gate de publicacao MCP Mais Humana # Gate de publicacao MCP Mais Humana
- report_id: `mcp-publication-gate-2026-05-02t0922340000` - report_id: `mcp-publication-gate-2026-05-02t1023160000`
- generated_at: `2026-05-02T09:22:34+00:00` - generated_at: `2026-05-02T10:23:16+00:00`
- provider_id: `mais_humana` - provider_id: `mais_humana`
- current_project_id: `tudo-para-ia-mais-humana` - current_project_id: `tudo-para-ia-mais-humana`
- canonical_project_id: `tudo-para-ia-mais-humana-platform` - canonical_project_id: `tudo-para-ia-mais-humana-platform`
@@ -101,7 +101,7 @@
### 0033_EXECUTIVA__sincronizar-git-mais-humana-mcps-central-com-credenciais ### 0033_EXECUTIVA__sincronizar-git-mais-humana-mcps-central-com-credenciais
- status: `blocked` - status: `blocked`
- motivo: fetch falhou por Permission denied em FETCH_HEAD; ls-remote/push falhou por SEC_E_NO_CREDENTIALS; repo mesh bloqueou sync destrutiva - motivo: fetch failed: SEC_E_NO_CREDENTIALS
- evidencias: `git_sync_status` - evidencias: `git_sync_status`
- proxima_acao: corrigir credencial Git/Schannel e reconciliar ahead/behind sem reset destrutivo - proxima_acao: corrigir credencial Git/Schannel e reconciliar ahead/behind sem reset destrutivo

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,10 @@
control_id,layer,status,title,blockers,required_evidence,order_ids
canonical-identity-approved,identity,ready,Nome canonico aprovado e aliases preservados,,015-ROTEADOR-PERMANENTE-DE-ORDEM_DE_SERVICO.MD | dados/canonical-identity-graph.json,0035_EXECUTIVA__reconciliar-nome-canonico-real-alias-platform | 0052_GERENCIAL__formalizar-nome-canonico-mais-humana-platform-e-aliases
filesystem-alias-window,filesystem,manual_window_required,Diretorio fisico so muda em janela coordenada,rename fisico depende de janela institucional e comparacao de remotes,git status limpo antes/depois | hash HEAD antes/depois | ausencia de pasta duplicada,0057_GERENCIAL__governar-migracao-coordenada-do-nome-canonico-platform
git-remote-canonicalization,git_remote,blocked,Remote canonico sem sobrescrever remoto historico,SEC_E_NO_CREDENTIALS no Git Windows | renome remoto depende de Gitea/owner,git remote -v | git ls-remote --heads remoto canonico main | push dry-run com credencial valida,0038_EXECUTIVA__corrigir-acl-index-lock-e-commitar-artefatos-mcp | 0050_GERENCIAL__decidir-politica-de-sync-automatico-e-credencial-gitea
central-dossier-materialized,central_dossier,partial,Pasta central registra canonico e materializa ordens,central ja possui alteracoes concorrentes nao pertencentes a esta rodada,orders/executivas e orders/gerenciais materializadas | controle-semantico.sqlite atualizado,0040_EXECUTIVA__materializar-escrita-central-e-sql-semantico-sem-permissionerror
mcp-contract-owner-canonical,mcp_contract,ready,Contratos MCP usam ownerPlatformId canonico,,dados/mcp-provider-mais-humana.json | dados/mcp-contratos-humanos.json,0037_EXECUTIVA__homologar-rotas-administrativas-mcp-no-gateway | 0049_GERENCIAL__homologar-mcp-only-administration-routes-como-politica-de-ecossistema
mcp-execute-live-readback,mcp_execute,partial,Gateway MCP confirma tools e aliases via /v1/execute,deploy live e smoke dependem de runner/deploy manual quando wrangler local falhar,HTTP 200 ok=true por tool | traceId/auditId | source hash,0039_EXECUTIVA__reexecutar-wrangler-em-runner-homologado-e-registrar-deploy
docs-ui-same-source,docs_ui,blocked,Docs e UI renderizam a mesma fonte MCP,Docs responseReady ou excecao catalogOnly depende de owner,decisao Docs responseReady/catalogOnly | sameSourceValidation | instancia administrativa MCP,0053_GERENCIAL__pactuar-docs-catalogonly-ou-response-ready-como-excecao-global
sync-mesh-no-reversal,sync_mesh,blocked,Sincronizacao preserva a alteracao valida mais recente,SEC_E_NO_CREDENTIALS | FETCH_HEAD/index.lock Permission denied | worktree central divergente,targeted-sync-audit | ahead/behind | hash local/remoto | logs de autosync,0038_EXECUTIVA__corrigir-acl-index-lock-e-commitar-artefatos-mcp | 0050_GERENCIAL__decidir-politica-de-sync-automatico-e-credencial-gitea
rollback-and-audit-pack,rollback,partial,Rollback documentado antes da migracao fisica,sem push remoto confirmado nao ha rollback remoto auditavel,ledger MCP | AUDITORIA-GPT | PENDENCIAS-CODEX | deployment id,0057_GERENCIAL__governar-migracao-coordenada-do-nome-canonico-platform
1 control_id layer status title blockers required_evidence order_ids
2 canonical-identity-approved identity ready Nome canonico aprovado e aliases preservados 015-ROTEADOR-PERMANENTE-DE-ORDEM_DE_SERVICO.MD | dados/canonical-identity-graph.json 0035_EXECUTIVA__reconciliar-nome-canonico-real-alias-platform | 0052_GERENCIAL__formalizar-nome-canonico-mais-humana-platform-e-aliases
3 filesystem-alias-window filesystem manual_window_required Diretorio fisico so muda em janela coordenada rename fisico depende de janela institucional e comparacao de remotes git status limpo antes/depois | hash HEAD antes/depois | ausencia de pasta duplicada 0057_GERENCIAL__governar-migracao-coordenada-do-nome-canonico-platform
4 git-remote-canonicalization git_remote blocked Remote canonico sem sobrescrever remoto historico SEC_E_NO_CREDENTIALS no Git Windows | renome remoto depende de Gitea/owner git remote -v | git ls-remote --heads remoto canonico main | push dry-run com credencial valida 0038_EXECUTIVA__corrigir-acl-index-lock-e-commitar-artefatos-mcp | 0050_GERENCIAL__decidir-politica-de-sync-automatico-e-credencial-gitea
5 central-dossier-materialized central_dossier partial Pasta central registra canonico e materializa ordens central ja possui alteracoes concorrentes nao pertencentes a esta rodada orders/executivas e orders/gerenciais materializadas | controle-semantico.sqlite atualizado 0040_EXECUTIVA__materializar-escrita-central-e-sql-semantico-sem-permissionerror
6 mcp-contract-owner-canonical mcp_contract ready Contratos MCP usam ownerPlatformId canonico dados/mcp-provider-mais-humana.json | dados/mcp-contratos-humanos.json 0037_EXECUTIVA__homologar-rotas-administrativas-mcp-no-gateway | 0049_GERENCIAL__homologar-mcp-only-administration-routes-como-politica-de-ecossistema
7 mcp-execute-live-readback mcp_execute partial Gateway MCP confirma tools e aliases via /v1/execute deploy live e smoke dependem de runner/deploy manual quando wrangler local falhar HTTP 200 ok=true por tool | traceId/auditId | source hash 0039_EXECUTIVA__reexecutar-wrangler-em-runner-homologado-e-registrar-deploy
8 docs-ui-same-source docs_ui blocked Docs e UI renderizam a mesma fonte MCP Docs responseReady ou excecao catalogOnly depende de owner decisao Docs responseReady/catalogOnly | sameSourceValidation | instancia administrativa MCP 0053_GERENCIAL__pactuar-docs-catalogonly-ou-response-ready-como-excecao-global
9 sync-mesh-no-reversal sync_mesh blocked Sincronizacao preserva a alteracao valida mais recente SEC_E_NO_CREDENTIALS | FETCH_HEAD/index.lock Permission denied | worktree central divergente targeted-sync-audit | ahead/behind | hash local/remoto | logs de autosync 0038_EXECUTIVA__corrigir-acl-index-lock-e-commitar-artefatos-mcp | 0050_GERENCIAL__decidir-politica-de-sync-automatico-e-credencial-gitea
10 rollback-and-audit-pack rollback partial Rollback documentado antes da migracao fisica sem push remoto confirmado nao ha rollback remoto auditavel ledger MCP | AUDITORIA-GPT | PENDENCIAS-CODEX | deployment id 0057_GERENCIAL__governar-migracao-coordenada-do-nome-canonico-platform

View File

@@ -79,43 +79,3 @@ compliance.ceo.auditoria.administration-route,compliance,ceo,auditoria,mais_huma
compliance.ceo.consulta.administration-route,compliance,ceo,consulta,mais_humana.admin.consulta,mcp.admin.readonly,yes,ready,yes,yes,evidence-992f04a502f6ddd9daf0b97b, compliance.ceo.consulta.administration-route,compliance,ceo,consulta,mais_humana.admin.consulta,mcp.admin.readonly,yes,ready,yes,yes,evidence-992f04a502f6ddd9daf0b97b,
compliance.ceo.diagnostico.administration-route,compliance,ceo,diagnostico,mais_humana.admin.diagnostico,mcp.admin.diagnostic,yes,ready,yes,yes,evidence-9738c928212fa58c6b0a53fc, compliance.ceo.diagnostico.administration-route,compliance,ceo,diagnostico,mais_humana.admin.diagnostico,mcp.admin.diagnostic,yes,ready,yes,yes,evidence-9738c928212fa58c6b0a53fc,
compliance.ceo.explicacao.administration-route,compliance,ceo,explicacao,mais_humana.admin.explicacao,mcp.admin.explain,yes,ready,yes,yes,evidence-d360c27674acf2dc72bf64f8, compliance.ceo.explicacao.administration-route,compliance,ceo,explicacao,mais_humana.admin.explicacao,mcp.admin.explain,yes,ready,yes,yes,evidence-d360c27674acf2dc72bf64f8,
compliance.cliente_externo.acao.administration-route,compliance,cliente_externo,acao,mais_humana.admin.acao,mcp.admin.action.request,yes,ready,yes,yes,evidence-043eb1e6a85bfc8da961f435,
compliance.cliente_externo.auditoria.administration-route,compliance,cliente_externo,auditoria,mais_humana.admin.auditoria,mcp.admin.audit,yes,ready,yes,yes,evidence-fccdeeffbefda06bfc324d12,
compliance.cliente_externo.consulta.administration-route,compliance,cliente_externo,consulta,mais_humana.admin.consulta,mcp.admin.readonly,yes,ready,yes,yes,evidence-db5b3feefe77274a7ee958dd,
compliance.cliente_externo.diagnostico.administration-route,compliance,cliente_externo,diagnostico,mais_humana.admin.diagnostico,mcp.admin.diagnostic,yes,ready,yes,yes,evidence-a7c2e4b1a1a9b7efccef8ef7,
compliance.cliente_externo.explicacao.administration-route,compliance,cliente_externo,explicacao,mais_humana.admin.explicacao,mcp.admin.explain,yes,ready,yes,yes,evidence-0769489680cf26dec1527f6e,
compliance.contador.acao.administration-route,compliance,contador,acao,mais_humana.admin.acao,mcp.admin.action.request,yes,ready,yes,yes,evidence-e1574481a65786a59e8667be,
compliance.contador.auditoria.administration-route,compliance,contador,auditoria,mais_humana.admin.auditoria,mcp.admin.audit,yes,ready,yes,yes,evidence-dfc305d7e6bc414380927365,
compliance.contador.consulta.administration-route,compliance,contador,consulta,mais_humana.admin.consulta,mcp.admin.readonly,yes,ready,yes,yes,evidence-a781034adf6a863661f74c40,
compliance.contador.diagnostico.administration-route,compliance,contador,diagnostico,mais_humana.admin.diagnostico,mcp.admin.diagnostic,yes,ready,yes,yes,evidence-3096bca3fbed3d072f4ba9c0,
compliance.contador.explicacao.administration-route,compliance,contador,explicacao,mais_humana.admin.explicacao,mcp.admin.explain,yes,ready,yes,yes,evidence-4a9d30a7a3d2c99afe6519be,
compliance.financeiro.acao.administration-route,compliance,financeiro,acao,mais_humana.admin.acao,mcp.admin.action.request,yes,ready,yes,yes,evidence-d9b19d82ef0a09658c9c29cd,
compliance.financeiro.auditoria.administration-route,compliance,financeiro,auditoria,mais_humana.admin.auditoria,mcp.admin.audit,yes,ready,yes,yes,evidence-711c0bd1b8ce79facd1a08b9,
compliance.financeiro.consulta.administration-route,compliance,financeiro,consulta,mais_humana.admin.consulta,mcp.admin.readonly,yes,ready,yes,yes,evidence-7fbb7dd1323952eeea9a0e1a,
compliance.financeiro.diagnostico.administration-route,compliance,financeiro,diagnostico,mais_humana.admin.diagnostico,mcp.admin.diagnostic,yes,ready,yes,yes,evidence-ca5156c0c8582f5c6e2fb561,
compliance.financeiro.explicacao.administration-route,compliance,financeiro,explicacao,mais_humana.admin.explicacao,mcp.admin.explain,yes,ready,yes,yes,evidence-04399664610dafb4342c7fe8,
compliance.gestor_operacional.acao.administration-route,compliance,gestor_operacional,acao,mais_humana.admin.acao,mcp.admin.action.request,yes,ready,yes,yes,evidence-2c706d2f0f15d65a86425a7e,
compliance.gestor_operacional.auditoria.administration-route,compliance,gestor_operacional,auditoria,mais_humana.admin.auditoria,mcp.admin.audit,yes,ready,yes,yes,evidence-626f043679ceb73668a44c49,
compliance.gestor_operacional.consulta.administration-route,compliance,gestor_operacional,consulta,mais_humana.admin.consulta,mcp.admin.readonly,yes,ready,yes,yes,evidence-71e9470868e3cd5cee4dcb5d,
compliance.gestor_operacional.diagnostico.administration-route,compliance,gestor_operacional,diagnostico,mais_humana.admin.diagnostico,mcp.admin.diagnostic,yes,ready,yes,yes,evidence-3965499d44e0f059e2dd2754,
compliance.gestor_operacional.explicacao.administration-route,compliance,gestor_operacional,explicacao,mais_humana.admin.explicacao,mcp.admin.explain,yes,ready,yes,yes,evidence-b2d18bdce27cf85ebc603fc9,
compliance.juridico.acao.administration-route,compliance,juridico,acao,mais_humana.admin.acao,mcp.admin.action.request,yes,ready,yes,yes,evidence-6d4a344f9a12d1c66d4e3ec6,
compliance.juridico.auditoria.administration-route,compliance,juridico,auditoria,mais_humana.admin.auditoria,mcp.admin.audit,yes,ready,yes,yes,evidence-2985d0c7dda4c233b2fc59bd,
compliance.juridico.consulta.administration-route,compliance,juridico,consulta,mais_humana.admin.consulta,mcp.admin.readonly,yes,ready,yes,yes,evidence-e390831e33de80045514040f,
compliance.juridico.diagnostico.administration-route,compliance,juridico,diagnostico,mais_humana.admin.diagnostico,mcp.admin.diagnostic,yes,ready,yes,yes,evidence-c4e66185cdf949f41f90a1ab,
compliance.juridico.explicacao.administration-route,compliance,juridico,explicacao,mais_humana.admin.explicacao,mcp.admin.explain,yes,ready,yes,yes,evidence-fbe864cfa750654d5741a786,
compliance.planejamento_estrategico.acao.administration-route,compliance,planejamento_estrategico,acao,mais_humana.admin.acao,mcp.admin.action.request,yes,ready,yes,yes,evidence-ad8ccf701e72652bcae80479,
compliance.planejamento_estrategico.auditoria.administration-route,compliance,planejamento_estrategico,auditoria,mais_humana.admin.auditoria,mcp.admin.audit,yes,ready,yes,yes,evidence-1e1b61e5839fae182833c595,
compliance.planejamento_estrategico.consulta.administration-route,compliance,planejamento_estrategico,consulta,mais_humana.admin.consulta,mcp.admin.readonly,yes,ready,yes,yes,evidence-e9e5e308341227e00a81a581,
compliance.planejamento_estrategico.diagnostico.administration-route,compliance,planejamento_estrategico,diagnostico,mais_humana.admin.diagnostico,mcp.admin.diagnostic,yes,ready,yes,yes,evidence-d219cbd8676c8a88b6927520,
compliance.planejamento_estrategico.explicacao.administration-route,compliance,planejamento_estrategico,explicacao,mais_humana.admin.explicacao,mcp.admin.explain,yes,ready,yes,yes,evidence-17931610f091a97b1be26182,
compliance.secretaria.acao.administration-route,compliance,secretaria,acao,mais_humana.admin.acao,mcp.admin.action.request,yes,ready,yes,yes,evidence-afb2d9e11859c0d9118a0a0e,
compliance.secretaria.auditoria.administration-route,compliance,secretaria,auditoria,mais_humana.admin.auditoria,mcp.admin.audit,yes,ready,yes,yes,evidence-ceff2af0341593dba74f07cf,
compliance.secretaria.consulta.administration-route,compliance,secretaria,consulta,mais_humana.admin.consulta,mcp.admin.readonly,yes,ready,yes,yes,evidence-f3d917611ef8bb62c667c747,
compliance.secretaria.diagnostico.administration-route,compliance,secretaria,diagnostico,mais_humana.admin.diagnostico,mcp.admin.diagnostic,yes,ready,yes,yes,evidence-2a2120f5e6ac500183f8afec,
compliance.secretaria.explicacao.administration-route,compliance,secretaria,explicacao,mais_humana.admin.explicacao,mcp.admin.explain,yes,ready,yes,yes,evidence-1a75fbf206a46a3a867c7f40,
compliance.suporte.acao.administration-route,compliance,suporte,acao,mais_humana.admin.acao,mcp.admin.action.request,yes,ready,yes,yes,evidence-36499e555d54edeb736f7f8c,
compliance.suporte.auditoria.administration-route,compliance,suporte,auditoria,mais_humana.admin.auditoria,mcp.admin.audit,yes,ready,yes,yes,evidence-b55cf00e3af8f4ec5e2b8325,
compliance.suporte.consulta.administration-route,compliance,suporte,consulta,mais_humana.admin.consulta,mcp.admin.readonly,yes,ready,yes,yes,evidence-298456292b7717b5c5174ec5,
compliance.suporte.diagnostico.administration-route,compliance,suporte,diagnostico,mais_humana.admin.diagnostico,mcp.admin.diagnostic,yes,ready,yes,yes,evidence-b67a15a015b3928efc9c4923,
compliance.suporte.explicacao.administration-route,compliance,suporte,explicacao,mais_humana.admin.explicacao,mcp.admin.explain,yes,ready,yes,yes,evidence-0583bdb82cfbcaec1bfaf870,
1 route_id platform_id profile_id operation tool_id permission_scope same_source status approval_required dry_run_supported evidence_id blockers
79 compliance.ceo.consulta.administration-route compliance ceo consulta mais_humana.admin.consulta mcp.admin.readonly yes ready yes yes evidence-992f04a502f6ddd9daf0b97b
80 compliance.ceo.diagnostico.administration-route compliance ceo diagnostico mais_humana.admin.diagnostico mcp.admin.diagnostic yes ready yes yes evidence-9738c928212fa58c6b0a53fc
81 compliance.ceo.explicacao.administration-route compliance ceo explicacao mais_humana.admin.explicacao mcp.admin.explain yes ready yes yes evidence-d360c27674acf2dc72bf64f8
compliance.cliente_externo.acao.administration-route compliance cliente_externo acao mais_humana.admin.acao mcp.admin.action.request yes ready yes yes evidence-043eb1e6a85bfc8da961f435
compliance.cliente_externo.auditoria.administration-route compliance cliente_externo auditoria mais_humana.admin.auditoria mcp.admin.audit yes ready yes yes evidence-fccdeeffbefda06bfc324d12
compliance.cliente_externo.consulta.administration-route compliance cliente_externo consulta mais_humana.admin.consulta mcp.admin.readonly yes ready yes yes evidence-db5b3feefe77274a7ee958dd
compliance.cliente_externo.diagnostico.administration-route compliance cliente_externo diagnostico mais_humana.admin.diagnostico mcp.admin.diagnostic yes ready yes yes evidence-a7c2e4b1a1a9b7efccef8ef7
compliance.cliente_externo.explicacao.administration-route compliance cliente_externo explicacao mais_humana.admin.explicacao mcp.admin.explain yes ready yes yes evidence-0769489680cf26dec1527f6e
compliance.contador.acao.administration-route compliance contador acao mais_humana.admin.acao mcp.admin.action.request yes ready yes yes evidence-e1574481a65786a59e8667be
compliance.contador.auditoria.administration-route compliance contador auditoria mais_humana.admin.auditoria mcp.admin.audit yes ready yes yes evidence-dfc305d7e6bc414380927365
compliance.contador.consulta.administration-route compliance contador consulta mais_humana.admin.consulta mcp.admin.readonly yes ready yes yes evidence-a781034adf6a863661f74c40
compliance.contador.diagnostico.administration-route compliance contador diagnostico mais_humana.admin.diagnostico mcp.admin.diagnostic yes ready yes yes evidence-3096bca3fbed3d072f4ba9c0
compliance.contador.explicacao.administration-route compliance contador explicacao mais_humana.admin.explicacao mcp.admin.explain yes ready yes yes evidence-4a9d30a7a3d2c99afe6519be
compliance.financeiro.acao.administration-route compliance financeiro acao mais_humana.admin.acao mcp.admin.action.request yes ready yes yes evidence-d9b19d82ef0a09658c9c29cd
compliance.financeiro.auditoria.administration-route compliance financeiro auditoria mais_humana.admin.auditoria mcp.admin.audit yes ready yes yes evidence-711c0bd1b8ce79facd1a08b9
compliance.financeiro.consulta.administration-route compliance financeiro consulta mais_humana.admin.consulta mcp.admin.readonly yes ready yes yes evidence-7fbb7dd1323952eeea9a0e1a
compliance.financeiro.diagnostico.administration-route compliance financeiro diagnostico mais_humana.admin.diagnostico mcp.admin.diagnostic yes ready yes yes evidence-ca5156c0c8582f5c6e2fb561
compliance.financeiro.explicacao.administration-route compliance financeiro explicacao mais_humana.admin.explicacao mcp.admin.explain yes ready yes yes evidence-04399664610dafb4342c7fe8
compliance.gestor_operacional.acao.administration-route compliance gestor_operacional acao mais_humana.admin.acao mcp.admin.action.request yes ready yes yes evidence-2c706d2f0f15d65a86425a7e
compliance.gestor_operacional.auditoria.administration-route compliance gestor_operacional auditoria mais_humana.admin.auditoria mcp.admin.audit yes ready yes yes evidence-626f043679ceb73668a44c49
compliance.gestor_operacional.consulta.administration-route compliance gestor_operacional consulta mais_humana.admin.consulta mcp.admin.readonly yes ready yes yes evidence-71e9470868e3cd5cee4dcb5d
compliance.gestor_operacional.diagnostico.administration-route compliance gestor_operacional diagnostico mais_humana.admin.diagnostico mcp.admin.diagnostic yes ready yes yes evidence-3965499d44e0f059e2dd2754
compliance.gestor_operacional.explicacao.administration-route compliance gestor_operacional explicacao mais_humana.admin.explicacao mcp.admin.explain yes ready yes yes evidence-b2d18bdce27cf85ebc603fc9
compliance.juridico.acao.administration-route compliance juridico acao mais_humana.admin.acao mcp.admin.action.request yes ready yes yes evidence-6d4a344f9a12d1c66d4e3ec6
compliance.juridico.auditoria.administration-route compliance juridico auditoria mais_humana.admin.auditoria mcp.admin.audit yes ready yes yes evidence-2985d0c7dda4c233b2fc59bd
compliance.juridico.consulta.administration-route compliance juridico consulta mais_humana.admin.consulta mcp.admin.readonly yes ready yes yes evidence-e390831e33de80045514040f
compliance.juridico.diagnostico.administration-route compliance juridico diagnostico mais_humana.admin.diagnostico mcp.admin.diagnostic yes ready yes yes evidence-c4e66185cdf949f41f90a1ab
compliance.juridico.explicacao.administration-route compliance juridico explicacao mais_humana.admin.explicacao mcp.admin.explain yes ready yes yes evidence-fbe864cfa750654d5741a786
compliance.planejamento_estrategico.acao.administration-route compliance planejamento_estrategico acao mais_humana.admin.acao mcp.admin.action.request yes ready yes yes evidence-ad8ccf701e72652bcae80479
compliance.planejamento_estrategico.auditoria.administration-route compliance planejamento_estrategico auditoria mais_humana.admin.auditoria mcp.admin.audit yes ready yes yes evidence-1e1b61e5839fae182833c595
compliance.planejamento_estrategico.consulta.administration-route compliance planejamento_estrategico consulta mais_humana.admin.consulta mcp.admin.readonly yes ready yes yes evidence-e9e5e308341227e00a81a581
compliance.planejamento_estrategico.diagnostico.administration-route compliance planejamento_estrategico diagnostico mais_humana.admin.diagnostico mcp.admin.diagnostic yes ready yes yes evidence-d219cbd8676c8a88b6927520
compliance.planejamento_estrategico.explicacao.administration-route compliance planejamento_estrategico explicacao mais_humana.admin.explicacao mcp.admin.explain yes ready yes yes evidence-17931610f091a97b1be26182
compliance.secretaria.acao.administration-route compliance secretaria acao mais_humana.admin.acao mcp.admin.action.request yes ready yes yes evidence-afb2d9e11859c0d9118a0a0e
compliance.secretaria.auditoria.administration-route compliance secretaria auditoria mais_humana.admin.auditoria mcp.admin.audit yes ready yes yes evidence-ceff2af0341593dba74f07cf
compliance.secretaria.consulta.administration-route compliance secretaria consulta mais_humana.admin.consulta mcp.admin.readonly yes ready yes yes evidence-f3d917611ef8bb62c667c747
compliance.secretaria.diagnostico.administration-route compliance secretaria diagnostico mais_humana.admin.diagnostico mcp.admin.diagnostic yes ready yes yes evidence-2a2120f5e6ac500183f8afec
compliance.secretaria.explicacao.administration-route compliance secretaria explicacao mais_humana.admin.explicacao mcp.admin.explain yes ready yes yes evidence-1a75fbf206a46a3a867c7f40
compliance.suporte.acao.administration-route compliance suporte acao mais_humana.admin.acao mcp.admin.action.request yes ready yes yes evidence-36499e555d54edeb736f7f8c
compliance.suporte.auditoria.administration-route compliance suporte auditoria mais_humana.admin.auditoria mcp.admin.audit yes ready yes yes evidence-b55cf00e3af8f4ec5e2b8325
compliance.suporte.consulta.administration-route compliance suporte consulta mais_humana.admin.consulta mcp.admin.readonly yes ready yes yes evidence-298456292b7717b5c5174ec5
compliance.suporte.diagnostico.administration-route compliance suporte diagnostico mais_humana.admin.diagnostico mcp.admin.diagnostic yes ready yes yes evidence-b67a15a015b3928efc9c4923
compliance.suporte.explicacao.administration-route compliance suporte explicacao mais_humana.admin.explicacao mcp.admin.explain yes ready yes yes evidence-0583bdb82cfbcaec1bfaf870

View File

@@ -1,7 +1,7 @@
order_id,status,reason,next_action,evidence_refs order_id,status,reason,next_action,evidence_refs
0031_EXECUTIVA__publicar-provider-mais-humana-no-mcps-gateway-via-wrangler-homologado,partial,codigo local do provider existe; publicacao live depende de runner Wrangler sem spawn EPERM,homologar runner Node/esbuild/workerd e repetir wrangler deploy --dry-run antes do deploy real,c22d27b86de895b23a8a1f9cd932361cce45297757bb0c74bf88cf955a8cdd6d; wrangler_runner 0031_EXECUTIVA__publicar-provider-mais-humana-no-mcps-gateway-via-wrangler-homologado,partial,codigo local do provider existe; publicacao live depende de runner Wrangler sem spawn EPERM,homologar runner Node/esbuild/workerd e repetir wrangler deploy --dry-run antes do deploy real,c22d27b86de895b23a8a1f9cd932361cce45297757bb0c74bf88cf955a8cdd6d; wrangler_runner
0032_EXECUTIVA__validar-live-tools-mais-humana-v1-execute-com-evidencia,passed,endpoint live foi sondado sem persistir bearer bruto,retestar as tres tools apos deploy do mcps-gateway contendo o provider Mais Humana,evidence-a75a27e0669c49da1db8b615; evidence-af37a8d489b0038a7a6b5575; evidence-3f0e3b9f829c7ff912b335d0; evidence-6be52832c728db2bbbbce461 0032_EXECUTIVA__validar-live-tools-mais-humana-v1-execute-com-evidencia,passed,endpoint live foi sondado sem persistir bearer bruto,retestar as tres tools apos deploy do mcps-gateway contendo o provider Mais Humana,evidence-a75a27e0669c49da1db8b615; evidence-af37a8d489b0038a7a6b5575; evidence-3f0e3b9f829c7ff912b335d0; evidence-6be52832c728db2bbbbce461
0033_EXECUTIVA__sincronizar-git-mais-humana-mcps-central-com-credenciais,blocked,fetch falhou por Permission denied em FETCH_HEAD; ls-remote/push falhou por SEC_E_NO_CREDENTIALS; repo mesh bloqueou sync destrutiva,corrigir credencial Git/Schannel e reconciliar ahead/behind sem reset destrutivo,git_sync_status 0033_EXECUTIVA__sincronizar-git-mais-humana-mcps-central-com-credenciais,blocked,fetch failed: SEC_E_NO_CREDENTIALS,corrigir credencial Git/Schannel e reconciliar ahead/behind sem reset destrutivo,git_sync_status
0034_EXECUTIVA__corrigir-acl-escrita-central-e-sql-semantico-plataforma-15,partial,artefatos centrais foram testados pelo gerador de gate; falhas ficam registradas no projeto real,manter escrita automatica central e SQL semantico sob teste em toda rodada,central_write_status 0034_EXECUTIVA__corrigir-acl-escrita-central-e-sql-semantico-plataforma-15,partial,artefatos centrais foram testados pelo gerador de gate; falhas ficam registradas no projeto real,manter escrita automatica central e SQL semantico sob teste em toda rodada,central_write_status
0035_EXECUTIVA__reconciliar-nome-canonico-real-alias-platform,passed,politica de alias foi materializada sem renome destrutivo,"executar migracao Git/MCP/documentacao somente por janela coordenada, preservando aliases e hashes",alias_policy 0035_EXECUTIVA__reconciliar-nome-canonico-real-alias-platform,passed,politica de alias foi materializada sem renome destrutivo,"executar migracao Git/MCP/documentacao somente por janela coordenada, preservando aliases e hashes",alias_policy
0043_GERENCIAL__aprovar-janela-publicacao-provider-mais-humana-com-rollback,partial,"janela pode ser planejada, mas deploy real ainda depende do runner homologado","definir owner, janela, version atual, rollback e criterio de sucesso antes de deploy real",wrangler_runner; c22d27b86de895b23a8a1f9cd932361cce45297757bb0c74bf88cf955a8cdd6d 0043_GERENCIAL__aprovar-janela-publicacao-provider-mais-humana-com-rollback,partial,"janela pode ser planejada, mas deploy real ainda depende do runner homologado","definir owner, janela, version atual, rollback e criterio de sucesso antes de deploy real",wrangler_runner; c22d27b86de895b23a8a1f9cd932361cce45297757bb0c74bf88cf955a8cdd6d
1 order_id status reason next_action evidence_refs
2 0031_EXECUTIVA__publicar-provider-mais-humana-no-mcps-gateway-via-wrangler-homologado partial codigo local do provider existe; publicacao live depende de runner Wrangler sem spawn EPERM homologar runner Node/esbuild/workerd e repetir wrangler deploy --dry-run antes do deploy real c22d27b86de895b23a8a1f9cd932361cce45297757bb0c74bf88cf955a8cdd6d; wrangler_runner
3 0032_EXECUTIVA__validar-live-tools-mais-humana-v1-execute-com-evidencia passed endpoint live foi sondado sem persistir bearer bruto retestar as tres tools apos deploy do mcps-gateway contendo o provider Mais Humana evidence-a75a27e0669c49da1db8b615; evidence-af37a8d489b0038a7a6b5575; evidence-3f0e3b9f829c7ff912b335d0; evidence-6be52832c728db2bbbbce461
4 0033_EXECUTIVA__sincronizar-git-mais-humana-mcps-central-com-credenciais blocked fetch falhou por Permission denied em FETCH_HEAD; ls-remote/push falhou por SEC_E_NO_CREDENTIALS; repo mesh bloqueou sync destrutiva fetch failed: SEC_E_NO_CREDENTIALS corrigir credencial Git/Schannel e reconciliar ahead/behind sem reset destrutivo git_sync_status
5 0034_EXECUTIVA__corrigir-acl-escrita-central-e-sql-semantico-plataforma-15 partial artefatos centrais foram testados pelo gerador de gate; falhas ficam registradas no projeto real manter escrita automatica central e SQL semantico sob teste em toda rodada central_write_status
6 0035_EXECUTIVA__reconciliar-nome-canonico-real-alias-platform passed politica de alias foi materializada sem renome destrutivo executar migracao Git/MCP/documentacao somente por janela coordenada, preservando aliases e hashes alias_policy
7 0043_GERENCIAL__aprovar-janela-publicacao-provider-mais-humana-com-rollback partial janela pode ser planejada, mas deploy real ainda depende do runner homologado definir owner, janela, version atual, rollback e criterio de sucesso antes de deploy real wrangler_runner; c22d27b86de895b23a8a1f9cd932361cce45297757bb0c74bf88cf955a8cdd6d

View File

@@ -0,0 +1,875 @@
"""Executable canonical-name migration plan for Mais Humana.
The router made the institutional name explicit:
``tudo-para-ia-mais-humana-platform`` is canonical, while the physical
repository can remain materialized as ``tudo-para-ia-mais-humana`` until Git,
MCP, Docs, UI, and synchronization windows are coordinated. This module turns
that decision into machine-checkable controls and MCP acceptance cases so the
platform can migrate without creating a duplicate repository or bypassing the
MCP control plane.
"""
from __future__ import annotations
import csv
import io
import json
import sqlite3
from dataclasses import dataclass
from enum import Enum
from pathlib import Path
from typing import Any, Iterable, Mapping, Sequence
from .identity_policy import (
ACCEPTED_PROJECT_IDS,
CANONICAL_COMPATIBILITY_RULE,
CANONICAL_DECISION_SOURCE,
CANONICAL_DECISION_STATUS,
CANONICAL_PROJECT_ID,
CENTRAL_FOLDER_NAME,
CURRENT_PROJECT_ID,
LEGACY_PLATAFORM_ALIAS,
MCP_CONTROL_PLANE_ID,
MCP_EXECUTE_ENDPOINT,
)
from .models import GeneratedFile, as_plain_data, merge_unique, utc_now
from .repository_mesh import RepositoryTarget, default_repository_targets, stable_digest
from .repository_mesh_naming import plataform_to_platform, platform_to_plataform
from .storage import connect, upsert_files
class MigrationLayer(str, Enum):
"""Migration area controlled by the canonical-name plan."""
IDENTITY = "identity"
FILESYSTEM = "filesystem"
GIT_REMOTE = "git_remote"
CENTRAL_DOSSIER = "central_dossier"
MCP_CONTRACT = "mcp_contract"
MCP_EXECUTE = "mcp_execute"
DOCS_UI = "docs_ui"
SYNC_MESH = "sync_mesh"
ROLLBACK = "rollback"
class MigrationStatus(str, Enum):
"""Status for one migration control or the whole plan."""
READY = "ready"
PARTIAL = "partial"
BLOCKED = "blocked"
MANUAL_WINDOW_REQUIRED = "manual_window_required"
class AcceptanceStatus(str, Enum):
"""Decision for one identifier found in a migration payload."""
CANONICAL = "canonical"
ALIAS_ACCEPTED = "alias_accepted"
CANONICAL_FIELD_REWRITE_REQUIRED = "canonical_field_rewrite_required"
REMOTE_ALIAS_ACCEPTED = "remote_alias_accepted"
CENTRAL_FOLDER_ACCEPTED = "central_folder_accepted"
BLOCKED_UNKNOWN_IDENTIFIER = "blocked_unknown_identifier"
CANONICAL_OWNER_FIELDS: tuple[str, ...] = (
"canonicalProjectId",
"ownerPlatformId",
"owner_platform_id",
)
COMPATIBILITY_FIELDS: tuple[str, ...] = (
"projectId",
"project_id",
"currentProjectId",
"current_project_id",
"platformId",
"platform_id",
"origin",
"destination",
"targetPlatformId",
"target_platform_id",
"consumerPlatformId",
"consumer_platform_id",
)
REMOTE_FIELDS: tuple[str, ...] = (
"repoRemote",
"remoteOrigin",
"remote_origin",
"originRemote",
)
CENTRAL_FIELDS: tuple[str, ...] = (
"centralFolder",
"central_folder",
"centralPlatformFolder",
"central_platform_folder",
)
MCP_MIGRATION_OPERATIONS: tuple[tuple[str, str], ...] = (
("consulta", "mcp.admin.readonly"),
("diagnostico", "mcp.admin.diagnostic"),
("acao", "mcp.admin.action.request"),
("auditoria", "mcp.admin.audit"),
("explicacao", "mcp.admin.explain"),
)
MCP_TRANSIT_FIELDS: tuple[str, ...] = (
"origin",
"destination",
"tool",
"payload",
"actor",
"permission",
"result",
"traceId",
"auditId",
"timestamp",
)
@dataclass(frozen=True, slots=True)
class CanonicalMigrationControl:
"""One actionable control required to migrate without losing history."""
control_id: str
layer: MigrationLayer
title: str
current_state: str
canonical_state: str
status: MigrationStatus
required_evidence: tuple[str, ...]
blockers: tuple[str, ...]
allowed_actions: tuple[str, ...]
forbidden_actions: tuple[str, ...]
rollback_steps: tuple[str, ...]
mcp_transit_fields: tuple[str, ...]
order_ids: tuple[str, ...]
owner: str = "codex-operational-round"
@property
def ready(self) -> bool:
return self.status == MigrationStatus.READY
def to_dict(self) -> dict[str, Any]:
return as_plain_data(self)
@dataclass(frozen=True, slots=True)
class CanonicalMigrationAcceptanceCase:
"""One MCP acceptance case for a field/candidate/operation tuple."""
case_id: str
target_name: str
field_name: str
candidate_value: str
canonical_value: str
operation: str
permission_scope: str
accepted: bool
status: AcceptanceStatus
required_action: str
reason: str
mcp_transit_required: bool
direct_repository_write_blocked: bool
def to_dict(self) -> dict[str, Any]:
return as_plain_data(self)
@dataclass(frozen=True, slots=True)
class SemanticWriteStatus:
"""Compact result of writing generated file functions to SQLite."""
sqlite_path: str
attempted: bool
ok: bool
files_count: int
error: str = ""
def to_dict(self) -> dict[str, Any]:
return as_plain_data(self)
@dataclass(frozen=True, slots=True)
class CanonicalMigrationPlan:
"""Full canonical-name migration plan and MCP acceptance matrix."""
plan_id: str
generated_at: str
canonical_project_id: str
current_project_id: str
legacy_alias: str
central_folder: str
decision_status: str
decision_source: str
compatibility_rule: str
mcp_control_plane_id: str
mcp_execute_endpoint: str
controls: tuple[CanonicalMigrationControl, ...]
acceptance_cases: tuple[CanonicalMigrationAcceptanceCase, ...]
generated_from: str
semantic_write: SemanticWriteStatus | None = None
central_semantic_write: SemanticWriteStatus | None = None
@property
def controls_count(self) -> int:
return len(self.controls)
@property
def accepted_cases_count(self) -> int:
return sum(1 for case in self.acceptance_cases if case.accepted)
@property
def blocked_cases_count(self) -> int:
return sum(1 for case in self.acceptance_cases if not case.accepted)
@property
def blockers(self) -> tuple[str, ...]:
return merge_unique(blocker for control in self.controls for blocker in control.blockers)
@property
def status(self) -> MigrationStatus:
if any(control.status == MigrationStatus.BLOCKED for control in self.controls):
return MigrationStatus.BLOCKED
if any(control.status == MigrationStatus.MANUAL_WINDOW_REQUIRED for control in self.controls):
return MigrationStatus.MANUAL_WINDOW_REQUIRED
if any(control.status == MigrationStatus.PARTIAL for control in self.controls):
return MigrationStatus.PARTIAL
return MigrationStatus.READY
def to_dict(self) -> dict[str, Any]:
data = as_plain_data(self)
data["status"] = self.status.value
data["controls_count"] = self.controls_count
data["accepted_cases_count"] = self.accepted_cases_count
data["blocked_cases_count"] = self.blocked_cases_count
data["blockers"] = list(self.blockers)
return data
def expected_remote_for(repo_name: str) -> str:
"""Return the expected Gitea HTTPS remote for a repo name or gitea slug."""
clean = repo_name.strip().removeprefix("admin/")
if clean.startswith("http://") or clean.startswith("https://"):
return clean
return f"https://git.ami.app.br/admin/{clean}.git"
def target_canonical_name(target: RepositoryTarget) -> str:
"""Return the migration canonical name for one repository target."""
return target.canonical_name or target.expected_local_name
def target_identifier_candidates(target: RepositoryTarget) -> tuple[str, ...]:
"""Return all accepted identifiers and locators for a target."""
canonical = target_canonical_name(target)
names = [
canonical,
target.expected_local_name,
target.declared_name,
*target.aliases,
platform_to_plataform(target.expected_local_name),
plataform_to_platform(target.expected_local_name),
target.central_folder,
f"admin/{canonical}",
f"admin/{target.expected_local_name}",
target.gitea_repo,
expected_remote_for(canonical),
expected_remote_for(target.expected_local_name),
expected_remote_for(target.gitea_repo),
]
if target.declared_name == CANONICAL_PROJECT_ID:
names.extend(
[
CURRENT_PROJECT_ID,
LEGACY_PLATAFORM_ALIAS,
CENTRAL_FOLDER_NAME,
f"admin/{CURRENT_PROJECT_ID}",
f"admin/{LEGACY_PLATAFORM_ALIAS}",
expected_remote_for(CURRENT_PROJECT_ID),
expected_remote_for(LEGACY_PLATAFORM_ALIAS),
]
)
return merge_unique(value for value in names if value)
def canonical_remote_values(target: RepositoryTarget) -> tuple[str, ...]:
"""Return canonical remote forms for a target."""
canonical = target_canonical_name(target)
return (f"admin/{canonical}", expected_remote_for(canonical))
def classify_candidate(target: RepositoryTarget, field_name: str, candidate: str) -> tuple[bool, AcceptanceStatus, str, str]:
"""Classify one field/candidate pair for MCP migration payloads."""
canonical = target_canonical_name(target)
accepted = set(target_identifier_candidates(target))
canonical_values = {canonical, f"admin/{canonical}", expected_remote_for(canonical)}
central_values = {target.central_folder}
remote_values = set(canonical_remote_values(target))
remote_values.update({target.gitea_repo, expected_remote_for(target.gitea_repo), expected_remote_for(target.expected_local_name)})
if candidate not in accepted:
return (
False,
AcceptanceStatus.BLOCKED_UNKNOWN_IDENTIFIER,
"bloquear payload ate que o identificador seja mapeado no grafo canonico",
"identificador nao pertence ao conjunto aceito de aliases, remotes ou pasta central",
)
if field_name in CANONICAL_OWNER_FIELDS:
if candidate == canonical:
return (True, AcceptanceStatus.CANONICAL, "manter valor canonico", "campo canonico ja usa o nome institucional")
return (
True,
AcceptanceStatus.CANONICAL_FIELD_REWRITE_REQUIRED,
"reescrever campo canonico para tudo-para-ia-mais-humana-platform antes de persistir",
"alias aceito apenas como compatibilidade; campos owner/canonical devem carregar o canonico",
)
if field_name in REMOTE_FIELDS:
if candidate in canonical_values:
return (True, AcceptanceStatus.CANONICAL, "manter remote canonico", "remote ja aponta para forma canonica")
if candidate in remote_values or candidate in accepted:
return (
True,
AcceptanceStatus.REMOTE_ALIAS_ACCEPTED,
"registrar remote alias e migrar apenas em janela coordenada",
"remote historico aceito para nao duplicar repositorio nem perder commits",
)
if field_name in CENTRAL_FIELDS:
return (
True,
AcceptanceStatus.CENTRAL_FOLDER_ACCEPTED,
"manter pasta central numerada como dossie gerencial, sem propagar numero ao repo",
"pasta central e alias administrativo aceito, nao nome tecnico do projeto",
)
if candidate == canonical:
return (True, AcceptanceStatus.CANONICAL, "usar valor canonico", "identificador ja esta canonico")
return (
True,
AcceptanceStatus.ALIAS_ACCEPTED,
"resolver alias para canonical_project_id no MCP e registrar trace/audit",
"alias historico aceito somente com rastreabilidade e sem bypass direto",
)
def build_migration_acceptance_cases(targets: Sequence[RepositoryTarget] | None = None) -> tuple[CanonicalMigrationAcceptanceCase, ...]:
"""Build deterministic MCP acceptance cases for repository-name migration."""
cases: list[CanonicalMigrationAcceptanceCase] = []
fields = (*CANONICAL_OWNER_FIELDS, *COMPATIBILITY_FIELDS, *REMOTE_FIELDS, *CENTRAL_FIELDS)
for target in tuple(targets or default_repository_targets()):
canonical = target_canonical_name(target)
for field_name in fields:
for candidate in target_identifier_candidates(target):
for operation, permission in MCP_MIGRATION_OPERATIONS:
accepted, status, action, reason = classify_candidate(target, field_name, candidate)
seed = {
"target": target.declared_name,
"field": field_name,
"candidate": candidate,
"operation": operation,
"permission": permission,
}
cases.append(
CanonicalMigrationAcceptanceCase(
case_id=f"canonical-migration-{stable_digest(seed, 24)}",
target_name=target.declared_name,
field_name=field_name,
candidate_value=candidate,
canonical_value=canonical,
operation=operation,
permission_scope=permission,
accepted=accepted,
status=status,
required_action=action,
reason=reason,
mcp_transit_required=True,
direct_repository_write_blocked=True,
)
)
return tuple(cases)
def build_migration_controls() -> tuple[CanonicalMigrationControl, ...]:
"""Build the controls that gate a safe canonical-name migration."""
forbidden_git = (
"git reset --hard",
"git checkout -- <arquivo>",
"git restore destrutivo",
"git clean",
"pull/merge nao fast-forward",
"renomear pasta criando repositorio duplicado",
)
return (
CanonicalMigrationControl(
control_id="canonical-identity-approved",
layer=MigrationLayer.IDENTITY,
title="Nome canonico aprovado e aliases preservados",
current_state=f"repo materializado como {CURRENT_PROJECT_ID}; alias historico {LEGACY_PLATAFORM_ALIAS}",
canonical_state=CANONICAL_PROJECT_ID,
status=MigrationStatus.READY,
required_evidence=(CANONICAL_DECISION_SOURCE, "dados/canonical-identity-graph.json"),
blockers=(),
allowed_actions=("resolver aliases para canonicalProjectId", "manter aliases em payloads de compatibilidade"),
forbidden_actions=("apagar historico de aliases", "trocar ownerPlatformId sem trace/audit"),
rollback_steps=("voltar a aceitar CURRENT_PROJECT_ID como alias se consumidor legado falhar",),
mcp_transit_fields=MCP_TRANSIT_FIELDS,
order_ids=("0035_EXECUTIVA__reconciliar-nome-canonico-real-alias-platform", "0052_GERENCIAL__formalizar-nome-canonico-mais-humana-platform-e-aliases"),
),
CanonicalMigrationControl(
control_id="filesystem-alias-window",
layer=MigrationLayer.FILESYSTEM,
title="Diretorio fisico so muda em janela coordenada",
current_state=f"G:/_codex-git/{CURRENT_PROJECT_ID}",
canonical_state=f"G:/_codex-git/{CANONICAL_PROJECT_ID}",
status=MigrationStatus.MANUAL_WINDOW_REQUIRED,
required_evidence=("git status limpo antes/depois", "hash HEAD antes/depois", "ausencia de pasta duplicada"),
blockers=("rename fisico depende de janela institucional e comparacao de remotes",),
allowed_actions=("registrar alias de diretorio", "validar que destino canonico nao existe antes de renomear"),
forbidden_actions=forbidden_git,
rollback_steps=("renomear de volta somente se HEAD e remote forem iguais aos hashes pre-migracao",),
mcp_transit_fields=MCP_TRANSIT_FIELDS,
order_ids=("0057_GERENCIAL__governar-migracao-coordenada-do-nome-canonico-platform",),
),
CanonicalMigrationControl(
control_id="git-remote-canonicalization",
layer=MigrationLayer.GIT_REMOTE,
title="Remote canonico sem sobrescrever remoto historico",
current_state=f"origin historico https://git.ami.app.br/admin/{CURRENT_PROJECT_ID}.git",
canonical_state=f"https://git.ami.app.br/admin/{CANONICAL_PROJECT_ID}.git",
status=MigrationStatus.BLOCKED,
required_evidence=("git remote -v", "git ls-remote --heads remoto canonico main", "push dry-run com credencial valida"),
blockers=("SEC_E_NO_CREDENTIALS no Git Windows", "renome remoto depende de Gitea/owner"),
allowed_actions=("mapear remote historico como alias", "bloquear push se ahead/behind divergente"),
forbidden_actions=forbidden_git,
rollback_steps=("restaurar origin historico se remoto canonico nao resolver o mesmo HEAD",),
mcp_transit_fields=MCP_TRANSIT_FIELDS,
order_ids=("0038_EXECUTIVA__corrigir-acl-index-lock-e-commitar-artefatos-mcp", "0050_GERENCIAL__decidir-politica-de-sync-automatico-e-credencial-gitea"),
),
CanonicalMigrationControl(
control_id="central-dossier-materialized",
layer=MigrationLayer.CENTRAL_DOSSIER,
title="Pasta central registra canonico e materializa ordens",
current_state=CENTRAL_FOLDER_NAME,
canonical_state=f"{CENTRAL_FOLDER_NAME} como dossie; project_id canonico {CANONICAL_PROJECT_ID}",
status=MigrationStatus.PARTIAL,
required_evidence=("orders/executivas e orders/gerenciais materializadas", "controle-semantico.sqlite atualizado"),
blockers=("central ja possui alteracoes concorrentes nao pertencentes a esta rodada",),
allowed_actions=("criar arquivos ausentes da plataforma 15", "upsert SQL semantico escopado"),
forbidden_actions=("alterar pastas de outras plataformas para resolver esta OS",),
rollback_steps=("recriar ordens a partir de os-orientadoras/central-materialization-fallback",),
mcp_transit_fields=MCP_TRANSIT_FIELDS,
order_ids=("0040_EXECUTIVA__materializar-escrita-central-e-sql-semantico-sem-permissionerror",),
),
CanonicalMigrationControl(
control_id="mcp-contract-owner-canonical",
layer=MigrationLayer.MCP_CONTRACT,
title="Contratos MCP usam ownerPlatformId canonico",
current_state="provider Mais Humana aceita aliases e tools live",
canonical_state=f"ownerPlatformId/canonicalProjectId = {CANONICAL_PROJECT_ID}",
status=MigrationStatus.READY,
required_evidence=("dados/mcp-provider-mais-humana.json", "dados/mcp-contratos-humanos.json"),
blockers=(),
allowed_actions=("publicar aliasPolicy no provider", "validar sameSource por MCP"),
forbidden_actions=("chamada direta de plataforma sem traceId/auditId",),
rollback_steps=("manter aliases aceitos no gateway durante rollout",),
mcp_transit_fields=MCP_TRANSIT_FIELDS,
order_ids=("0037_EXECUTIVA__homologar-rotas-administrativas-mcp-no-gateway", "0049_GERENCIAL__homologar-mcp-only-administration-routes-como-politica-de-ecossistema"),
),
CanonicalMigrationControl(
control_id="mcp-execute-live-readback",
layer=MigrationLayer.MCP_EXECUTE,
title="Gateway MCP confirma tools e aliases via /v1/execute",
current_state="tools Mais Humana respondem no endpoint live quando publicadas",
canonical_state=f"{MCP_EXECUTE_ENDPOINT} audita alias e canonico pelo MCPs Internos",
status=MigrationStatus.PARTIAL,
required_evidence=("HTTP 200 ok=true por tool", "traceId/auditId", "source hash"),
blockers=("deploy live e smoke dependem de runner/deploy manual quando wrangler local falhar",),
allowed_actions=("smoke HTTP com bearer simulado informado", "registrar resposta redigida"),
forbidden_actions=("usar falha do plugin Cloudflare como diagnostico operacional",),
rollback_steps=("voltar para ultimo deployment Cloudflare observado por wrangler/manual",),
mcp_transit_fields=MCP_TRANSIT_FIELDS,
order_ids=("0039_EXECUTIVA__reexecutar-wrangler-em-runner-homologado-e-registrar-deploy",),
),
CanonicalMigrationControl(
control_id="docs-ui-same-source",
layer=MigrationLayer.DOCS_UI,
title="Docs e UI renderizam a mesma fonte MCP",
current_state="Docs pode estar catalogOnly; UI deve renderizar fonte MCP",
canonical_state="GPT e painel explicam a mesma instancia administrativa canonica",
status=MigrationStatus.BLOCKED,
required_evidence=("decisao Docs responseReady/catalogOnly", "sameSourceValidation", "instancia administrativa MCP"),
blockers=("Docs responseReady ou excecao catalogOnly depende de owner",),
allowed_actions=("registrar excecao formal", "exigir sameSource antes de release UI"),
forbidden_actions=("criar fonte paralela de painel fora do MCP",),
rollback_steps=("desabilitar renderizacao da fonte nao-MCP ate correcao",),
mcp_transit_fields=MCP_TRANSIT_FIELDS,
order_ids=("0053_GERENCIAL__pactuar-docs-catalogonly-ou-response-ready-como-excecao-global",),
),
CanonicalMigrationControl(
control_id="sync-mesh-no-reversal",
layer=MigrationLayer.SYNC_MESH,
title="Sincronizacao preserva a alteracao valida mais recente",
current_state="fetch/push podem falhar por credencial ou ACL; central tem deltas concorrentes",
canonical_state="hashes comparados antes de qualquer renome, push ou materializacao remota",
status=MigrationStatus.BLOCKED,
required_evidence=("targeted-sync-audit", "ahead/behind", "hash local/remoto", "logs de autosync"),
blockers=("SEC_E_NO_CREDENTIALS", "FETCH_HEAD/index.lock Permission denied", "worktree central divergente"),
allowed_actions=("fetch seguro quando credencial existir", "bloquear sincronizacao destrutiva em divergencia"),
forbidden_actions=forbidden_git,
rollback_steps=("preservar backup de hashes e bloquear autosync ate reconciliacao segura",),
mcp_transit_fields=MCP_TRANSIT_FIELDS,
order_ids=("0038_EXECUTIVA__corrigir-acl-index-lock-e-commitar-artefatos-mcp", "0050_GERENCIAL__decidir-politica-de-sync-automatico-e-credencial-gitea"),
),
CanonicalMigrationControl(
control_id="rollback-and-audit-pack",
layer=MigrationLayer.ROLLBACK,
title="Rollback documentado antes da migracao fisica",
current_state="aliases preservam operacao enquanto remoto/diretorio seguem historicos",
canonical_state="rollback inclui hashes, remotes, deployment id, ordem de servico e ledger MCP",
status=MigrationStatus.PARTIAL,
required_evidence=("ledger MCP", "AUDITORIA-GPT", "PENDENCIAS-CODEX", "deployment id"),
blockers=("sem push remoto confirmado nao ha rollback remoto auditavel",),
allowed_actions=("registrar rollback textual e hashes", "manter aliases por janela de deprecacao"),
forbidden_actions=("remover alias no mesmo ciclo do rename canonico",),
rollback_steps=("reativar alias historico", "restaurar remote anterior", "registrar auditoria de reversao no MCP"),
mcp_transit_fields=MCP_TRANSIT_FIELDS,
order_ids=("0057_GERENCIAL__governar-migracao-coordenada-do-nome-canonico-platform",),
),
)
def build_canonical_migration_plan(*, use_generated: bool = True) -> CanonicalMigrationPlan:
"""Build the full canonical-name migration plan."""
cases: tuple[CanonicalMigrationAcceptanceCase, ...]
generated_from = "runtime"
if use_generated:
try:
from .generated_canonical_migration_plan import iter_acceptance_cases
cases = tuple(iter_acceptance_cases())
generated_from = "generated_canonical_migration_plan"
except (ImportError, AttributeError):
cases = build_migration_acceptance_cases()
else:
cases = build_migration_acceptance_cases()
seed = {
"canonical": CANONICAL_PROJECT_ID,
"current": CURRENT_PROJECT_ID,
"alias": LEGACY_PLATAFORM_ALIAS,
"cases": len(cases),
"controls": [control.control_id for control in build_migration_controls()],
}
return CanonicalMigrationPlan(
plan_id=f"canonical-migration-{stable_digest(seed, 20)}",
generated_at=utc_now(),
canonical_project_id=CANONICAL_PROJECT_ID,
current_project_id=CURRENT_PROJECT_ID,
legacy_alias=LEGACY_PLATAFORM_ALIAS,
central_folder=CENTRAL_FOLDER_NAME,
decision_status=CANONICAL_DECISION_STATUS,
decision_source=CANONICAL_DECISION_SOURCE,
compatibility_rule=CANONICAL_COMPATIBILITY_RULE,
mcp_control_plane_id=MCP_CONTROL_PLANE_ID,
mcp_execute_endpoint=MCP_EXECUTE_ENDPOINT,
controls=build_migration_controls(),
acceptance_cases=cases,
generated_from=generated_from,
)
def migration_plan_payload(plan: CanonicalMigrationPlan, *, limit_cases: int = 80) -> dict[str, Any]:
"""Return compact JSON payload for humans, GPT, and MCP discovery."""
payload = plan.to_dict()
payload["accepted_project_ids"] = list(ACCEPTED_PROJECT_IDS)
payload["acceptance_cases"] = [case.to_dict() for case in plan.acceptance_cases[: max(0, limit_cases)]]
payload["acceptance_cases_total"] = len(plan.acceptance_cases)
return payload
def migration_case_rows(cases: Sequence[CanonicalMigrationAcceptanceCase]) -> list[list[str]]:
"""Return CSV rows for the acceptance matrix."""
rows = [
[
"case_id",
"target_name",
"field_name",
"candidate_value",
"canonical_value",
"operation",
"permission_scope",
"accepted",
"status",
"required_action",
"reason",
]
]
for case in cases:
rows.append(
[
case.case_id,
case.target_name,
case.field_name,
case.candidate_value,
case.canonical_value,
case.operation,
case.permission_scope,
"yes" if case.accepted else "no",
case.status.value,
case.required_action,
case.reason,
]
)
return rows
def migration_control_rows(controls: Sequence[CanonicalMigrationControl]) -> list[list[str]]:
"""Return CSV rows for migration controls."""
rows = [["control_id", "layer", "status", "title", "blockers", "required_evidence", "order_ids"]]
for control in controls:
rows.append(
[
control.control_id,
control.layer.value,
control.status.value,
control.title,
" | ".join(control.blockers),
" | ".join(control.required_evidence),
" | ".join(control.order_ids),
]
)
return rows
def rows_to_csv(rows: Sequence[Sequence[str]]) -> str:
"""Serialize rows to CSV text."""
buffer = io.StringIO()
writer = csv.writer(buffer, lineterminator="\n")
writer.writerows(rows)
return buffer.getvalue()
def migration_plan_markdown(plan: CanonicalMigrationPlan, *, limit_cases: int = 30) -> str:
"""Render a concise human report for the canonical migration plan."""
lines = [
"# Plano de migracao canonica - Mais Humana",
"",
f"- status: `{plan.status.value}`",
f"- plan_id: `{plan.plan_id}`",
f"- canonical_project_id: `{plan.canonical_project_id}`",
f"- current_project_id: `{plan.current_project_id}`",
f"- legacy_alias: `{plan.legacy_alias}`",
f"- central_folder: `{plan.central_folder}`",
f"- decision_source: `{plan.decision_source}`",
f"- generated_from: `{plan.generated_from}`",
f"- controls: `{plan.controls_count}`",
f"- acceptance_cases: `{len(plan.acceptance_cases)}`",
f"- accepted_cases: `{plan.accepted_cases_count}`",
f"- blocked_cases: `{plan.blocked_cases_count}`",
"",
"## Regra institucional",
"",
plan.compatibility_rule,
"",
"## Controles",
"",
]
for control in plan.controls:
blockers = "; ".join(control.blockers) if control.blockers else "nenhum"
lines.extend(
[
f"### {control.control_id}",
f"- layer: `{control.layer.value}`",
f"- status: `{control.status.value}`",
f"- current_state: `{control.current_state}`",
f"- canonical_state: `{control.canonical_state}`",
f"- blockers: `{blockers}`",
f"- order_ids: `{', '.join(control.order_ids)}`",
"",
]
)
lines.extend(["## Casos MCP de aceitacao", ""])
for case in plan.acceptance_cases[: max(0, limit_cases)]:
lines.append(
f"- `{case.case_id}` `{case.target_name}` `{case.field_name}` -> `{case.candidate_value}` "
f"status `{case.status.value}` action `{case.required_action}`"
)
lines.extend(
[
"",
"## Bloqueios reais",
"",
]
)
for blocker in plan.blockers or ("nenhum",):
lines.append(f"- {blocker}")
lines.extend(
[
"",
"## Politica de transito MCP",
"",
"- Toda migracao interplataforma deve passar pelo MCPs Internos.",
"- Campos de transito obrigatorios: " + ", ".join(f"`{field}`" for field in MCP_TRANSIT_FIELDS) + ".",
"- Escrita direta em repositorio, painel ou plataforma permanece bloqueada quando nao houver traceId/auditId.",
"",
]
)
return "\n".join(lines)
def migration_generated_files(project_root: Path, central_platform_folder: Path | None = None) -> tuple[GeneratedFile, ...]:
"""Return semantic file records for generated migration artifacts."""
relation = "0057_GERENCIAL__governar-migracao-coordenada-do-nome-canonico-platform"
specs = [
("dados/canonical-migration-plan.json", "Plano JSON de migracao canonica.", "canonical migration plan", "json"),
("dados/canonical-migration-central-write-status.json", "Status da escrita central do plano de migracao canonica.", "canonical migration central write status", "json"),
("matrizes/canonical-migration-acceptance-cases.csv", "Matriz MCP de aceite de aliases.", "canonical migration cases", "csv"),
("matrizes/canonical-migration-controls.csv", "Controles de migracao canonica.", "canonical migration controls", "csv"),
("ecossistema/CANONICAL-MIGRATION-PLAN.md", "Relatorio humano da migracao canonica.", "canonical migration report", "markdown"),
]
records = [
GeneratedFile(
path=str(project_root / relative),
description=description,
function=function,
file_type=file_type,
changed_by="mais_humana.canonical_migration",
change_summary="Gerado plano de migracao canonica -platform com aliases rastreaveis e controles MCP.",
relation_to_order=relation,
)
for relative, description, function, file_type in specs
]
if central_platform_folder is not None:
records.append(
GeneratedFile(
path=str(central_platform_folder / "reports" / "EXECUTADO__canonical-migration-plan.md"),
description="Registro central do plano de migracao canonica.",
function="canonical migration central report",
file_type="markdown",
changed_by="mais_humana.canonical_migration",
change_summary="Registrada migracao canonica no dossie central da plataforma 15.",
relation_to_order=relation,
)
)
return tuple(records)
def write_semantic_records(sqlite_path: Path, files: Iterable[GeneratedFile]) -> SemanticWriteStatus:
"""Upsert generated file functions into a semantic SQLite database."""
records = tuple(files)
try:
with connect(sqlite_path) as conn:
upsert_files(conn, records)
conn.commit()
return SemanticWriteStatus(str(sqlite_path), True, True, len(records))
except (OSError, sqlite3.Error) as exc:
return SemanticWriteStatus(str(sqlite_path), True, False, len(records), f"{type(exc).__name__}: {exc}")
def write_canonical_migration_artifacts(
plan: CanonicalMigrationPlan,
project_root: Path,
*,
central_platform_folder: Path | None = None,
) -> tuple[GeneratedFile, SemanticWriteStatus, SemanticWriteStatus | None]:
"""Write project and optional central artifacts for the migration plan."""
project_root.mkdir(parents=True, exist_ok=True)
central_report_path = central_platform_folder / "reports" / "EXECUTADO__canonical-migration-plan.md" if central_platform_folder is not None else None
central_file_error = ""
central_write: SemanticWriteStatus | None = None
central_records: tuple[GeneratedFile, ...] = ()
if central_platform_folder is not None:
central_records = tuple(
record for record in migration_generated_files(project_root, central_platform_folder) if str(central_platform_folder) in record.path
)
try:
assert central_report_path is not None
central_report_path.parent.mkdir(parents=True, exist_ok=True)
central_report_path.write_text(migration_plan_markdown(plan, limit_cases=60), encoding="utf-8")
central_write = write_semantic_records(central_platform_folder / "controle-semantico.sqlite", central_records or migration_generated_files(project_root, central_platform_folder))
except OSError as exc:
central_file_error = f"{type(exc).__name__}: {exc}"
central_write = SemanticWriteStatus(
str(central_platform_folder / "controle-semantico.sqlite"),
True,
False,
len(central_records),
central_file_error,
)
targets = [
(project_root / "dados" / "canonical-migration-plan.json", json.dumps(migration_plan_payload(plan, limit_cases=400), ensure_ascii=False, indent=2, sort_keys=True)),
(
project_root / "dados" / "canonical-migration-central-write-status.json",
json.dumps(
{
"centralPlatformFolder": str(central_platform_folder) if central_platform_folder is not None else "",
"centralReportPath": str(central_report_path) if central_report_path is not None else "",
"centralReportOk": bool(central_platform_folder is not None and not central_file_error),
"centralReportError": central_file_error,
"centralSemanticWrite": central_write.to_dict() if central_write is not None else None,
},
ensure_ascii=False,
indent=2,
sort_keys=True,
),
),
(project_root / "matrizes" / "canonical-migration-acceptance-cases.csv", rows_to_csv(migration_case_rows(plan.acceptance_cases))),
(project_root / "matrizes" / "canonical-migration-controls.csv", rows_to_csv(migration_control_rows(plan.controls))),
(project_root / "ecossistema" / "CANONICAL-MIGRATION-PLAN.md", migration_plan_markdown(plan, limit_cases=120)),
]
for path, text in targets:
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(text, encoding="utf-8")
records = migration_generated_files(project_root, central_platform_folder)
project_write = write_semantic_records(project_root / "controle-semantico.sqlite", records)
return records, project_write, central_write
def run_canonical_migration_plan(
*,
project_root: Path,
central_platform_folder: Path | None = None,
use_generated: bool = True,
) -> CanonicalMigrationPlan:
"""Build, write, and return the canonical migration plan."""
plan = build_canonical_migration_plan(use_generated=use_generated)
records, project_write, central_write = write_canonical_migration_artifacts(
plan,
project_root,
central_platform_folder=central_platform_folder,
)
return CanonicalMigrationPlan(
plan_id=plan.plan_id,
generated_at=plan.generated_at,
canonical_project_id=plan.canonical_project_id,
current_project_id=plan.current_project_id,
legacy_alias=plan.legacy_alias,
central_folder=plan.central_folder,
decision_status=plan.decision_status,
decision_source=plan.decision_source,
compatibility_rule=plan.compatibility_rule,
mcp_control_plane_id=plan.mcp_control_plane_id,
mcp_execute_endpoint=plan.mcp_execute_endpoint,
controls=plan.controls,
acceptance_cases=plan.acceptance_cases,
generated_from=plan.generated_from,
semantic_write=project_write,
central_semantic_write=central_write,
)

View File

@@ -10,6 +10,7 @@ from .models import as_plain_data
from .central_consolidation import run_consolidated_report from .central_consolidation import run_consolidated_report
from .central_materialization import run_central_materialization from .central_materialization import run_central_materialization
from .canonical_identity import identity_graph_payload, run_canonical_identity_graph from .canonical_identity import identity_graph_payload, run_canonical_identity_graph
from .canonical_migration import migration_plan_payload, run_canonical_migration_plan
from .matrix import build_global_recommendations, build_matrix, build_platform_reports from .matrix import build_global_recommendations, build_matrix, build_platform_reports
from .mcp_contract import build_mcp_contract_report, build_mcp_execute_probe, mcp_provider_compact_json, mcp_provider_payload from .mcp_contract import build_mcp_contract_report, build_mcp_execute_probe, mcp_provider_compact_json, mcp_provider_payload
from .mcp_contract import ( from .mcp_contract import (
@@ -153,6 +154,14 @@ def build_parser() -> argparse.ArgumentParser:
default="G:/_codex-git/nucleo-gestao-operacional/central-de-ordem-de-servico/projects/15_repo_tudo-para-ia-mais-humana-platform", default="G:/_codex-git/nucleo-gestao-operacional/central-de-ordem-de-servico/projects/15_repo_tudo-para-ia-mais-humana-platform",
) )
canonical_identity.add_argument("--no-generated", action="store_true", help="Build graph from runtime targets instead of generated registry.") canonical_identity.add_argument("--no-generated", action="store_true", help="Build graph from runtime targets instead of generated registry.")
canonical_migration = sub.add_parser("canonical-migration-plan", help="Write canonical-name migration controls and MCP acceptance cases.")
canonical_migration.add_argument("--project-root", default="G:/_codex-git/tudo-para-ia-mais-humana")
canonical_migration.add_argument(
"--central-platform-folder",
default="G:/_codex-git/nucleo-gestao-operacional/central-de-ordem-de-servico/projects/15_repo_tudo-para-ia-mais-humana-platform",
)
canonical_migration.add_argument("--no-generated", action="store_true", help="Build acceptance cases from runtime repository targets.")
canonical_migration.add_argument("--limit", type=int, default=40)
return parser return parser
@@ -609,6 +618,17 @@ def command_canonical_identity(args: argparse.Namespace) -> int:
return 0 return 0
def command_canonical_migration_plan(args: argparse.Namespace) -> int:
central_platform_folder = Path(args.central_platform_folder) if args.central_platform_folder else None
plan = run_canonical_migration_plan(
project_root=Path(args.project_root),
central_platform_folder=central_platform_folder,
use_generated=not bool(args.no_generated),
)
print(json.dumps(migration_plan_payload(plan, limit_cases=int(args.limit)), ensure_ascii=False, indent=2))
return 0
def main(argv: list[str] | None = None) -> int: def main(argv: list[str] | None = None) -> int:
parser = build_parser() parser = build_parser()
args = parser.parse_args(argv) args = parser.parse_args(argv)
@@ -654,6 +674,8 @@ def main(argv: list[str] | None = None) -> int:
return command_central_materialization(args) return command_central_materialization(args)
if args.command == "canonical-identity": if args.command == "canonical-identity":
return command_canonical_identity(args) return command_canonical_identity(args)
if args.command == "canonical-migration-plan":
return command_canonical_migration_plan(args)
parser.error(f"unknown command: {args.command}") parser.error(f"unknown command: {args.command}")
return 2 return 2

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,87 @@
from __future__ import annotations
import json
import unittest
from mais_humana.canonical_migration import (
AcceptanceStatus,
CANONICAL_PROJECT_ID,
CURRENT_PROJECT_ID,
build_canonical_migration_plan,
build_migration_acceptance_cases,
migration_plan_markdown,
migration_plan_payload,
)
from mais_humana.cli import main
from mais_humana.storage import table_counts
from tests.helpers import make_tmp
class CanonicalMigrationTests(unittest.TestCase):
def test_runtime_plan_models_canonical_aliases_and_controls(self) -> None:
plan = build_canonical_migration_plan(use_generated=False)
self.assertEqual(plan.canonical_project_id, CANONICAL_PROJECT_ID)
self.assertEqual(plan.current_project_id, CURRENT_PROJECT_ID)
self.assertGreaterEqual(plan.controls_count, 8)
self.assertGreaterEqual(len(plan.acceptance_cases), 2000)
self.assertIn("SEC_E_NO_CREDENTIALS", plan.blockers)
self.assertIn("Plano de migracao canonica", migration_plan_markdown(plan, limit_cases=3))
def test_owner_platform_alias_requires_canonical_rewrite(self) -> None:
cases = build_migration_acceptance_cases()
matching = [
case
for case in cases
if case.target_name == CANONICAL_PROJECT_ID
and case.field_name == "ownerPlatformId"
and case.candidate_value == CURRENT_PROJECT_ID
]
self.assertTrue(matching)
self.assertTrue(all(case.accepted for case in matching))
self.assertTrue(any(case.status == AcceptanceStatus.CANONICAL_FIELD_REWRITE_REQUIRED for case in matching))
def test_payload_is_compact_but_preserves_totals(self) -> None:
plan = build_canonical_migration_plan(use_generated=False)
payload = migration_plan_payload(plan, limit_cases=5)
self.assertEqual(payload["canonical_project_id"], CANONICAL_PROJECT_ID)
self.assertEqual(len(payload["acceptance_cases"]), 5)
self.assertEqual(payload["acceptance_cases_total"], len(plan.acceptance_cases))
self.assertIn(CURRENT_PROJECT_ID, payload["accepted_project_ids"])
def test_cli_writes_project_central_and_sql_artifacts(self) -> None:
root = make_tmp()
project = root / "tudo-para-ia-mais-humana"
central = root / "central" / "15_repo_tudo-para-ia-mais-humana-platform"
code = main(
[
"canonical-migration-plan",
"--project-root",
str(project),
"--central-platform-folder",
str(central),
"--no-generated",
"--limit",
"3",
]
)
self.assertEqual(code, 0)
self.assertTrue((project / "dados" / "canonical-migration-plan.json").exists())
self.assertTrue((project / "matrizes" / "canonical-migration-acceptance-cases.csv").exists())
self.assertTrue((project / "matrizes" / "canonical-migration-controls.csv").exists())
self.assertTrue((project / "ecossistema" / "CANONICAL-MIGRATION-PLAN.md").exists())
self.assertTrue((central / "reports" / "EXECUTADO__canonical-migration-plan.md").exists())
payload = json.loads((project / "dados" / "canonical-migration-plan.json").read_text(encoding="utf-8"))
self.assertEqual(payload["canonical_project_id"], CANONICAL_PROJECT_ID)
self.assertGreaterEqual(payload["acceptance_cases_total"], 2000)
self.assertGreaterEqual(table_counts(project / "controle-semantico.sqlite").get("files", 0), 4)
self.assertGreaterEqual(table_counts(central / "controle-semantico.sqlite").get("files", 0), 1)
if __name__ == "__main__":
unittest.main()

View File

@@ -0,0 +1,117 @@
"""Generate importable canonical migration acceptance cases.
The generated module keeps the canonical-name migration matrix available to
tests and MCP payload generation without rescanning repository declarations on
each command. Regenerate after changing repository targets, identifier fields,
or the canonical naming policy.
"""
from __future__ import annotations
from pathlib import Path
from typing import Iterable
ROOT = Path(__file__).resolve().parents[1]
SRC = ROOT / "src"
OUTPUT = SRC / "mais_humana" / "generated_canonical_migration_plan.py"
def ensure_import_path() -> None:
import sys
src = str(SRC)
if src not in sys.path:
sys.path.insert(0, src)
def q(value: object) -> str:
return repr(str(value))
def bool_literal(value: bool) -> str:
return "True" if value else "False"
def tuple_literal(values: Iterable[object], *, indent: int = 8) -> str:
cleaned = [str(value) for value in values if str(value).strip()]
if not cleaned:
return "()"
if len(cleaned) <= 8:
return "(" + ", ".join(q(value) for value in cleaned) + ("," if len(cleaned) == 1 else "") + ")"
pad = " " * indent
lines = ["("]
for value in cleaned:
lines.append(f"{pad}{q(value)},")
lines.append(" " * (indent - 4) + ")")
return "\n".join(lines)
def case_block(case: object) -> str:
return "\n".join(
[
" CanonicalMigrationAcceptanceCase(",
f" case_id={q(getattr(case, 'case_id'))},",
f" target_name={q(getattr(case, 'target_name'))},",
f" field_name={q(getattr(case, 'field_name'))},",
f" candidate_value={q(getattr(case, 'candidate_value'))},",
f" canonical_value={q(getattr(case, 'canonical_value'))},",
f" operation={q(getattr(case, 'operation'))},",
f" permission_scope={q(getattr(case, 'permission_scope'))},",
f" accepted={bool_literal(getattr(case, 'accepted'))},",
f" status=AcceptanceStatus.{getattr(case, 'status').name},",
f" required_action={q(getattr(case, 'required_action'))},",
f" reason={q(getattr(case, 'reason'))},",
f" mcp_transit_required={bool_literal(getattr(case, 'mcp_transit_required'))},",
f" direct_repository_write_blocked={bool_literal(getattr(case, 'direct_repository_write_blocked'))},",
" ),",
]
)
def main() -> int:
ensure_import_path()
from mais_humana.canonical_migration import build_migration_acceptance_cases
cases = build_migration_acceptance_cases()
lines = [
'"""Generated canonical migration plan for Mais Humana.',
"",
"Do not edit this file by hand. Regenerate it with:",
"",
" python tools/generate_canonical_migration_plan.py",
"",
"The registry is source code so it can be imported, tested, packaged,",
"hashed, and exposed through MCP without rescanning repository targets.",
'"""',
"",
"from __future__ import annotations",
"",
"from .canonical_migration import (",
" AcceptanceStatus,",
" CanonicalMigrationAcceptanceCase,",
")",
"",
f"GENERATED_ACCEPTANCE_CASES_COUNT = {len(cases)}",
"",
"ACCEPTANCE_CASES = (",
]
lines.extend(case_block(case) for case in cases)
lines.extend(
[
")",
"",
"",
"def iter_acceptance_cases():",
" return ACCEPTANCE_CASES",
"",
]
)
OUTPUT.write_text("\n".join(lines), encoding="utf-8")
print(f"generated {OUTPUT} cases={len(cases)} lines={len(lines)}")
return 0
if __name__ == "__main__":
raise SystemExit(main())