Initial SQL-only 1C adapter baseline

This commit is contained in:
2026-07-22 03:03:47 +03:00
commit e2503b77e7
545 changed files with 184711 additions and 0 deletions
+288
View File
@@ -0,0 +1,288 @@
from __future__ import annotations
import argparse
import json
import subprocess
import sys
from pathlib import Path
from typing import Any
ROOT = Path(__file__).resolve().parents[1]
DEFAULT_PROBE = ROOT / "reports" / "1c-template-probes" / "upo_test_auto_20260627T142419Z_670780b4.json"
DEFAULT_BASELINE_DISCOVERY = ROOT / "reports" / "1c-template-baselines" / "Primer3_moxel_schema_discovery.json"
DEFAULT_HISTORY_MATRIX = ROOT / "reports" / "1c-template-baselines" / "Primer3_history_matrix.json"
DEFAULT_PROPERTY_CANDIDATES = ROOT / "reports" / "1c-template-baselines" / "Primer3_property_candidates.json"
DEFAULT_PROPERTY_MANIFEST = ROOT / "reports" / "1c-template-baselines" / "Primer3_moxel_property_experiments.manifest.json"
def rel(path: Path) -> str:
try:
return str(path.resolve().relative_to(ROOT))
except ValueError:
return str(path)
def run_step(name: str, command: list[str], *, dry_run: bool = False) -> dict[str, Any]:
if dry_run:
return {"name": name, "command": command, "status": "planned", "returncode": None, "stdout": "", "stderr": ""}
result = subprocess.run(command, cwd=ROOT, text=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=False)
return {
"name": name,
"command": command,
"status": "ok" if result.returncode == 0 else "failed",
"returncode": result.returncode,
"stdout": result.stdout.strip(),
"stderr": result.stderr.strip(),
}
def build_commands(args: argparse.Namespace) -> list[tuple[str, list[str]]]:
py = sys.executable
probe_path = Path(args.probe).resolve()
live_discovery_json = ROOT / "reports" / "1c-template-probes" / "upo_test_auto_moxel_schema_discovery.json"
live_discovery_md = ROOT / "reports" / "1c-template-probes" / "upo_test_auto_moxel_schema_discovery.md"
property_json = ROOT / "reports" / "1c-template-baselines" / "Primer3_moxel_property_experiments.json"
property_md = ROOT / "reports" / "1c-template-baselines" / "Primer3_moxel_property_experiments.md"
named_range_json = ROOT / "reports" / "1c-template-baselines" / "moxel-named-range-rules.json"
named_range_md = ROOT / "reports" / "1c-template-baselines" / "moxel-named-range-rules.md"
registry_json = ROOT / "plugins" / "1c" / "metadata" / "moxel-schema-registry.json"
registry_md = ROOT / "reports" / "1c-template-baselines" / "moxel-schema-registry.md"
registry_check = ROOT / "reports" / "1c-template-baselines" / "moxel-schema-registry-check.json"
registry_verification = ROOT / "reports" / "1c-template-baselines" / "moxel-schema-registry-verification.json"
next_experiments_json = ROOT / "reports" / "1c-template-baselines" / "moxel-next-experiments.json"
next_experiments_md = ROOT / "reports" / "1c-template-baselines" / "moxel-next-experiments.md"
next_action_json = ROOT / "reports" / "1c-template-baselines" / "moxel-next-action.json"
next_action_md = ROOT / "reports" / "1c-template-baselines" / "moxel-next-action.md"
next_action_check = ROOT / "reports" / "1c-template-baselines" / "moxel-next-action-check.json"
commands: list[tuple[str, list[str]]] = []
if args.capture_live:
probe_path = ROOT / "reports" / "1c-template-probes" / "latest-live-probe.json"
probe_markdown = ROOT / "reports" / "1c-template-probes" / "latest-live-probe.md"
capture_command = [
py,
"scripts/capture_1c_template_probe.py",
"--base-id",
args.base_id,
"--label",
args.label,
"--output-dir",
"reports/1c-template-probes",
"--output-json",
rel(probe_path),
"--output-markdown",
rel(probe_markdown),
"--scan-limit",
str(args.scan_limit),
"--max-cells",
str(args.max_cells),
]
if args.file_name:
capture_command.extend(["--file-name", args.file_name])
commands.append(
(
"capture_live_probe",
capture_command,
)
)
commands.extend(
[
(
"discover_schema",
[
py,
"scripts/discover_1c_moxel_schema.py",
"--probe-snapshot",
rel(probe_path),
"--history-matrix",
rel(Path(args.history_matrix)),
"--property-candidates",
rel(Path(args.property_candidates)),
"--output-json",
rel(live_discovery_json),
"--output-markdown",
rel(live_discovery_md),
],
),
(
"analyze_named_range_rules",
[
py,
"scripts/analyze_1c_moxel_named_range_rules.py",
"--probe",
rel(probe_path),
"--target-name",
"R7C2_TEST",
"--output-json",
rel(named_range_json),
"--output-markdown",
rel(named_range_md),
],
),
(
"analyze_property_experiments",
[
py,
"scripts/analyze_1c_moxel_property_experiments.py",
"--manifest",
rel(Path(args.property_manifest)),
"--emit-default-plan",
"--output-json",
rel(property_json),
"--output-markdown",
rel(property_md),
],
),
(
"build_registry",
[
py,
"scripts/build_1c_moxel_schema_registry.py",
"--discovery",
rel(live_discovery_json),
"--discovery",
rel(Path(args.baseline_discovery)),
"--named-range-analysis",
rel(named_range_json),
"--output-json",
rel(registry_json),
"--output-markdown",
rel(registry_md),
],
),
(
"check_registry",
[
py,
"scripts/check_1c_moxel_schema_registry.py",
"--registry",
rel(registry_json),
"--output",
rel(registry_check),
],
),
(
"verify_registry",
[
py,
"scripts/verify_1c_moxel_schema_registry.py",
"--registry",
rel(registry_json),
"--probe",
rel(probe_path),
"--output",
rel(registry_verification),
],
),
(
"plan_next_experiments",
[
py,
"scripts/plan_1c_moxel_next_experiments.py",
"--registry",
rel(registry_json),
"--verification",
rel(registry_verification),
"--output-json",
rel(next_experiments_json),
"--output-markdown",
rel(next_experiments_md),
],
),
(
"get_next_action",
[
py,
"scripts/get_1c_moxel_next_action.py",
"--plan",
rel(next_experiments_json),
"--output-json",
rel(next_action_json),
"--output-markdown",
rel(next_action_md),
],
),
(
"check_next_action",
[
py,
"scripts/check_1c_moxel_next_action.py",
"--plan",
rel(next_experiments_json),
"--action",
rel(next_action_json),
"--output",
rel(next_action_check),
],
),
(
"status",
[
py,
"scripts/status_1c_moxel.py",
],
),
]
)
return commands
def render_markdown(report: dict[str, Any]) -> str:
lines = ["# 1C MOXCEL Discovery Pipeline", ""]
lines.append(f"- Status: `{report.get('status')}`")
lines.append(f"- Steps: `{len(report.get('steps') or [])}`")
lines.append("")
lines.append("| Step | Status |")
lines.append("| --- | --- |")
for step in report.get("steps") or []:
lines.append(f"| `{step.get('name')}` | `{step.get('status')}` |")
lines.append("")
return "\n".join(lines)
def main() -> int:
parser = argparse.ArgumentParser(description="Run the complete 1C MOXCEL discovery and registry pipeline.")
parser.add_argument("--probe", default=str(DEFAULT_PROBE), help="Existing probe snapshot JSON.")
parser.add_argument("--baseline-discovery", default=str(DEFAULT_BASELINE_DISCOVERY))
parser.add_argument("--history-matrix", default=str(DEFAULT_HISTORY_MATRIX))
parser.add_argument("--property-candidates", default=str(DEFAULT_PROPERTY_CANDIDATES))
parser.add_argument("--property-manifest", default=str(DEFAULT_PROPERTY_MANIFEST))
parser.add_argument("--capture-live", action="store_true", help="Capture a live probe before running the pipeline.")
parser.add_argument("--base-id", default="upo_test")
parser.add_argument("--label", default="pipeline")
parser.add_argument("--file-name", help="Explicit ConfigCAS file name for live capture.")
parser.add_argument("--scan-limit", type=int, default=30)
parser.add_argument("--max-cells", type=int, default=800)
parser.add_argument("--dry-run", action="store_true")
parser.add_argument("--report-json", default="reports/1c-template-baselines/moxel-discovery-pipeline.json")
parser.add_argument("--report-markdown", default="reports/1c-template-baselines/moxel-discovery-pipeline.md")
args = parser.parse_args()
steps = []
failures = []
for name, command in build_commands(args):
step = run_step(name, command, dry_run=args.dry_run)
steps.append(step)
if step["status"] == "failed":
failures.append(name)
break
report = {
"schema": "codex_1c_moxel_discovery_pipeline.v1",
"status": "failed" if failures else "planned" if args.dry_run else "ok",
"failed_steps": failures,
"steps": steps,
}
json_path = ROOT / args.report_json
md_path = ROOT / args.report_markdown
json_path.parent.mkdir(parents=True, exist_ok=True)
md_path.parent.mkdir(parents=True, exist_ok=True)
json_path.write_text(json.dumps(report, ensure_ascii=False, indent=2), encoding="utf-8")
md_path.write_text(render_markdown(report), encoding="utf-8")
print(json.dumps({"status": report["status"], "json": rel(json_path), "markdown": rel(md_path), "failed_steps": failures}, ensure_ascii=False, indent=2))
return 1 if failures else 0
if __name__ == "__main__":
raise SystemExit(main())