auto-sync: tudo-para-ia-mais-humana 2026-05-02 07:24:14
This commit is contained in:
117
tools/generate_canonical_migration_plan.py
Normal file
117
tools/generate_canonical_migration_plan.py
Normal 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())
|
||||
|
||||
Reference in New Issue
Block a user