Auto-label / priority-gate (pull_request) Skipped
CI Pipeline / best-practices (push) Successful in 27s
Auto-label / auto-label (pull_request) Successful in 7s
CI Pipeline / documentation (push) Successful in 9s
CI Pipeline / canary (push) Successful in 54s
CI Pipeline / lint (push) Successful in 1m9s
CI Pipeline / type-check (push) Failing after 38s
CI Pipeline / gitea-offline (push) Successful in 28s
CI Pipeline / best-practices (pull_request) Successful in 17s
CI Pipeline / documentation (pull_request) Successful in 12s
CI Pipeline / canary (pull_request) Successful in 47s
CI Pipeline / gitea-offline (pull_request) Successful in 33s
CI Pipeline / type-check (pull_request) Failing after 55s
deploy / deploy (push) Skipped
Spec gate (headless) / spec-gate (pull_request) Successful in 23s
CI Pipeline / unit-tests (push) Failing after 3m40s
CI Pipeline / required-checks (push) Failing after 9s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Successful in 19s
CI Pipeline / lint (pull_request) Successful in 1m4s
CI Pipeline / unit-tests (pull_request) Failing after 3m38s
CI Pipeline / required-checks (pull_request) Failing after 8s
CI Pipeline / CI Pipeline / notify-event-bridge (pull_request) Successful in 13s
- ci_event_wait: OPERATION_SPECS (op-specific completion authority: branch_ci/pull_request_checks -> own runs; master_ci/deploy/release -> deploy qualification); SINGLE LOGICAL AWAIT (all nonterminal conditions re-arm internally; model sees only terminal verdicts or real deadline) - await-operation tool: op_type parameter - runtime wait guard + cwd guard RETIRED (canonical hook = documented no-op; prevention lives in tests, not interception) - wr_root_resolver.py: ONE wait/resume root authority; split-brain fails loudly; start_wr_daemon.py resolves root once; governed reconciliation - construction_activation._auto_structural_awareness: PROJECT_BUILD bootstrap auto-registers Registry + spine manages edge (no manual bookkeeping); fixed latent dispatch_from_decision mode-object bug - research_memory_port.py: future-facing Memory port inside existing INWARD (provider contract, zero-result fast path, teachable-moment candidate seam; APPLICABILITY governs transfer) - v1_parity_manifest.py: 56 rows, 0 blocking mandatory-V1 items - G1-G12 gate evidence in store/scaffold/t21.5_gates.json
48 lines
1.4 KiB
Python
48 lines
1.4 KiB
Python
#!/usr/bin/env python3
|
|
"""wr_root_reconcile.py — T21.5 §7: governed split-brain reconciliation.
|
|
|
|
If canonical and legacy W/R roots both hold live event stores, this
|
|
moves legacy-root events that are ABSENT from the canonical store into
|
|
it (idempotent, content-keyed by filename), then reports what remains.
|
|
Never deletes; the legacy store stays as a moved-marker record.
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
import shutil
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
_SCRIPT_DIR = Path(__file__).resolve().parent
|
|
sys.path.insert(0, str(_SCRIPT_DIR))
|
|
import wr_root_resolver as resolver # noqa: E402
|
|
|
|
|
|
def main() -> int:
|
|
canonical = resolver.CANONICAL_WR_ROOT
|
|
legacy = resolver.LEGACY_WR_ROOT
|
|
(canonical / "events").mkdir(parents=True, exist_ok=True)
|
|
moved = 0
|
|
skipped = 0
|
|
for src in sorted((legacy / "events").glob("*.json")):
|
|
dst = canonical / "events" / src.name
|
|
if dst.exists():
|
|
skipped += 1
|
|
continue
|
|
shutil.copy2(src, dst)
|
|
moved += 1
|
|
report = {
|
|
"canonical": str(canonical),
|
|
"legacy": str(legacy),
|
|
"events_moved_to_canonical": moved,
|
|
"already_present_skipped": skipped,
|
|
"note": "legacy store retained (never deleted); daemon and all "
|
|
"consumers now resolve via wr_root_resolver",
|
|
}
|
|
print(json.dumps(report, indent=2))
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|