[object Object]

← back to Wallco Ai

id-collision resolutions 1..14999 (134 rows): 106 Mac2 re-published (F,T verdict A), 27 skipped (F,F), 1 escalated (T,F verdict C)

c72fe453674a98183036156944dc4ed55c989815 · 2026-05-29 22:31:58 -0700 · Steve

Files touched

Diff

commit c72fe453674a98183036156944dc4ed55c989815
Author: Steve <steve@designerwallcoverings.com>
Date:   Fri May 29 22:31:58 2026 -0700

    id-collision resolutions 1..14999 (134 rows): 106 Mac2 re-published (F,T verdict A), 27 skipped (F,F), 1 escalated (T,F verdict C)
---
 data/id-collision-resolutions-2026-05-29.jsonl | 134 +++++++++++++++++++++++++
 scripts/resolve-id-collisions-20260529.py      | 117 +++++++++++++++++++++
 2 files changed, 251 insertions(+)

diff --git a/data/id-collision-resolutions-2026-05-29.jsonl b/data/id-collision-resolutions-2026-05-29.jsonl
new file mode 100644
index 0000000..765ddeb
--- /dev/null
+++ b/data/id-collision-resolutions-2026-05-29.jsonl
@@ -0,0 +1,134 @@
+{"id": 81, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 83, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 84, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 85, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 87, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 91, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 92, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 93, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 97, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 102, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 107, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 108, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 109, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 110, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 111, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 112, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 113, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 114, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 115, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 117, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 119, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 120, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 121, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 122, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 123, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 125, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 126, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 129, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 130, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 132, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 133, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 134, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 136, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10123, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10124, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10125, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10126, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10127, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10128, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10129, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10130, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10131, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10132, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10133, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10134, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10135, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10136, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10137, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10138, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10139, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10140, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10141, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10142, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10143, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10144, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10145, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10146, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10147, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10148, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10149, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10150, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10151, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10152, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10153, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10154, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10155, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10156, "bucket": "(F,F)", "dtd_verdict": "none", "action": "skip", "side": "none", "ok": true, "notes": "both_unpublished"}
+{"id": 10157, "bucket": "(F,F)", "dtd_verdict": "none", "action": "skip", "side": "none", "ok": true, "notes": "both_unpublished"}
+{"id": 10158, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10159, "bucket": "(F,F)", "dtd_verdict": "none", "action": "skip", "side": "none", "ok": true, "notes": "both_unpublished"}
+{"id": 10160, "bucket": "(F,F)", "dtd_verdict": "none", "action": "skip", "side": "none", "ok": true, "notes": "both_unpublished"}
+{"id": 10161, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10162, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10163, "bucket": "(F,F)", "dtd_verdict": "none", "action": "skip", "side": "none", "ok": true, "notes": "both_unpublished"}
+{"id": 10164, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10165, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10166, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10167, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10168, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10169, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10170, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10171, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10172, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10173, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10174, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10175, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10176, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10177, "bucket": "(T,F)", "dtd_verdict": "C", "action": "escalate", "side": "none", "ok": false, "notes": "both-published-different-art landmine if prod flipped; Mac2=damask(live in designs.json) vs prod=muybridge-plate; codex C (stronger arg) + qwen ERR -> escalate to Steve"}
+{"id": 10178, "bucket": "(F,F)", "dtd_verdict": "none", "action": "skip", "side": "none", "ok": true, "notes": "both_unpublished"}
+{"id": 10179, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10180, "bucket": "(F,F)", "dtd_verdict": "none", "action": "skip", "side": "none", "ok": true, "notes": "both_unpublished"}
+{"id": 10181, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10182, "bucket": "(F,F)", "dtd_verdict": "none", "action": "skip", "side": "none", "ok": true, "notes": "both_unpublished"}
+{"id": 10183, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10184, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10185, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10186, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10187, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10188, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10189, "bucket": "(F,F)", "dtd_verdict": "none", "action": "skip", "side": "none", "ok": true, "notes": "both_unpublished"}
+{"id": 10190, "bucket": "(F,F)", "dtd_verdict": "none", "action": "skip", "side": "none", "ok": true, "notes": "both_unpublished"}
+{"id": 10191, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10192, "bucket": "(F,F)", "dtd_verdict": "none", "action": "skip", "side": "none", "ok": true, "notes": "both_unpublished"}
+{"id": 10193, "bucket": "(F,F)", "dtd_verdict": "none", "action": "skip", "side": "none", "ok": true, "notes": "both_unpublished"}
+{"id": 10194, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10195, "bucket": "(F,F)", "dtd_verdict": "none", "action": "skip", "side": "none", "ok": true, "notes": "both_unpublished"}
+{"id": 10196, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10197, "bucket": "(F,F)", "dtd_verdict": "none", "action": "skip", "side": "none", "ok": true, "notes": "both_unpublished"}
+{"id": 10198, "bucket": "(F,F)", "dtd_verdict": "none", "action": "skip", "side": "none", "ok": true, "notes": "both_unpublished"}
+{"id": 10199, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10200, "bucket": "(F,F)", "dtd_verdict": "none", "action": "skip", "side": "none", "ok": true, "notes": "both_unpublished"}
+{"id": 10201, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10202, "bucket": "(F,F)", "dtd_verdict": "none", "action": "skip", "side": "none", "ok": true, "notes": "both_unpublished"}
+{"id": 10203, "bucket": "(F,F)", "dtd_verdict": "none", "action": "skip", "side": "none", "ok": true, "notes": "both_unpublished"}
+{"id": 10204, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10205, "bucket": "(F,F)", "dtd_verdict": "none", "action": "skip", "side": "none", "ok": true, "notes": "both_unpublished"}
+{"id": 10206, "bucket": "(F,F)", "dtd_verdict": "none", "action": "skip", "side": "none", "ok": true, "notes": "both_unpublished"}
+{"id": 10207, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10208, "bucket": "(F,F)", "dtd_verdict": "none", "action": "skip", "side": "none", "ok": true, "notes": "both_unpublished"}
+{"id": 10209, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10210, "bucket": "(F,F)", "dtd_verdict": "none", "action": "skip", "side": "none", "ok": true, "notes": "both_unpublished"}
+{"id": 10211, "bucket": "(F,F)", "dtd_verdict": "none", "action": "skip", "side": "none", "ok": true, "notes": "both_unpublished"}
+{"id": 10212, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10213, "bucket": "(F,F)", "dtd_verdict": "none", "action": "skip", "side": "none", "ok": true, "notes": "both_unpublished"}
+{"id": 10214, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10215, "bucket": "(F,F)", "dtd_verdict": "none", "action": "skip", "side": "none", "ok": true, "notes": "both_unpublished"}
+{"id": 10216, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10217, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10218, "bucket": "(F,F)", "dtd_verdict": "none", "action": "skip", "side": "none", "ok": true, "notes": "both_unpublished"}
+{"id": 10219, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10220, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10221, "bucket": "(F,F)", "dtd_verdict": "none", "action": "skip", "side": "none", "ok": true, "notes": "both_unpublished"}
+{"id": 10222, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
+{"id": 10223, "bucket": "(F,T)", "dtd_verdict": "A", "action": "mac2_published", "side": "mac2", "ok": true, "notes": "already_published_or_reread_true"}
diff --git a/scripts/resolve-id-collisions-20260529.py b/scripts/resolve-id-collisions-20260529.py
new file mode 100644
index 0000000..03ca43b
--- /dev/null
+++ b/scripts/resolve-id-collisions-20260529.py
@@ -0,0 +1,117 @@
+#!/usr/bin/env python3
+"""
+Resolve 134 id-collisions between Mac2 PG and prod PG in wallco-ai all_designs
+(id range 1..14999). Per-bucket policy decided via /dtd; applied PER-ROW so a
+settlement-gate no-op on one row never sinks the batch.
+
+DTD verdicts (2026-05-29):
+  (F,F) 27 rows  -> skip (both unpublished, no customer impact)         [no /dtd]
+  (F,T) 106 rows -> A: re-publish Mac2 row to match prod's live side    [Claude A, Codex A, Qwen ERR]
+  (T,F) 1 row    -> C: escalate (would manufacture both-pub diff-art)   [Claude A, Codex C, Qwen ERR -> C on stronger arg + safer option]
+
+HARD GUARDRAILS honored:
+  - NO destructive deletes. Only is_published flips.
+  - Per-row loop, not bulk.
+  - Mac2 settlement_publish_check() trigger SILENTLY no-ops a TRUE flip
+    (no error raised). So after each UPDATE we re-read is_published; a row
+    still FALSE => action=blocked_by_gate (NOT force-overridden — the task
+    wants gate-blocked rows logged, not bypassed).
+  - We touch ONLY all_designs (curator state). We do NOT touch spoon_all_designs
+    (the snapshot source) so designs.json / the live catalog is unaffected by
+    (F,T) option A.
+"""
+import json, subprocess, sys, os
+
+DATA = "/tmp/collisions-data.json"
+AUDIT = os.path.join(os.path.dirname(__file__), "..", "data",
+                     "id-collision-resolutions-2026-05-29.jsonl")
+AUDIT = os.path.abspath(AUDIT)
+
+def mac2_psql(sql):
+    """Run SQL on Mac2 dw_unified. Returns (ok, stdout, stderr)."""
+    p = subprocess.run(
+        ["psql", "-d", "dw_unified", "-v", "ON_ERROR_STOP=1", "-tA", "-c", sql],
+        capture_output=True, text=True, timeout=30)
+    return (p.returncode == 0, p.stdout.strip(), p.stderr.strip())
+
+def bucket_key(m, p):
+    return "(%s,%s)" % ('T' if m else 'F', 'T' if p else 'F')
+
+def main():
+    data = json.load(open(DATA))
+    rows = data['collisions']
+    out = []
+
+    for c in rows:
+        cid = c['id']
+        m_pub = c['mac2']['pub']; p_pub = c['prod']['pub']
+        b = bucket_key(m_pub, p_pub)
+
+        if b == "(F,F)":
+            out.append({"id": cid, "bucket": b, "dtd_verdict": "none",
+                        "action": "skip", "side": "none", "ok": True,
+                        "notes": "both_unpublished"})
+            continue
+
+        if b == "(T,F)":
+            # DTD verdict C — escalate, no SQL.
+            out.append({"id": cid, "bucket": b, "dtd_verdict": "C",
+                        "action": "escalate", "side": "none", "ok": False,
+                        "notes": "both-published-different-art landmine if prod flipped; "
+                                 "Mac2=damask(live in designs.json) vs prod=muybridge-plate; "
+                                 "codex C (stronger arg) + qwen ERR -> escalate to Steve"})
+            continue
+
+        if b == "(F,T)":
+            # DTD verdict A — re-publish Mac2 row to match prod's live side.
+            # Idempotent guard + post-update verify against the silent-no-op trigger.
+            sql = ("UPDATE all_designs SET is_published=TRUE "
+                   "WHERE id=%d AND is_published=FALSE "
+                   "RETURNING is_published;" % cid)
+            ok, sout, serr = mac2_psql(sql)
+            if not ok:
+                # Trigger RAISED (settlement violation) or other SQL error.
+                out.append({"id": cid, "bucket": b, "dtd_verdict": "A",
+                            "action": "blocked_by_gate", "side": "mac2",
+                            "ok": False, "notes": ("sql_error: " + serr)[:300]})
+                continue
+            # Verify true post-state (RETURNING reflects post-BEFORE-trigger value;
+            # empty => row was already TRUE or no row matched -> re-read to be sure).
+            vok, vout, verr = mac2_psql(
+                "SELECT is_published FROM all_designs WHERE id=%d;" % cid)
+            final_pub = (vout == 't')
+            if final_pub:
+                note = "" if sout == 't' else "already_published_or_reread_true"
+                out.append({"id": cid, "bucket": b, "dtd_verdict": "A",
+                            "action": "mac2_published", "side": "mac2",
+                            "ok": True, "notes": note})
+            else:
+                # UPDATE reported success but is_published still FALSE => silent gate no-op.
+                out.append({"id": cid, "bucket": b, "dtd_verdict": "A",
+                            "action": "blocked_by_gate", "side": "mac2",
+                            "ok": False, "notes": "settlement gate silently no-op'd publish flip"})
+            continue
+
+        if b == "(T,T)":
+            out.append({"id": cid, "bucket": b, "dtd_verdict": "escalate",
+                        "action": "escalate", "side": "none", "ok": False,
+                        "notes": "both published with different art -> never auto-pick"})
+            continue
+
+    with open(AUDIT, "w") as f:
+        for r in out:
+            f.write(json.dumps(r) + "\n")
+
+    # summary to stdout
+    from collections import Counter
+    bc = Counter((r['bucket'], r['action']) for r in out)
+    print("audit rows:", len(out), "->", AUDIT)
+    for (bk, act), n in sorted(bc.items()):
+        print("  %-7s %-18s %d" % (bk, act, n))
+    blocked = [r for r in out if r['action'] == 'blocked_by_gate']
+    esc = [r for r in out if r['action'] == 'escalate']
+    print("blocked_by_gate:", len(blocked))
+    print("escalated ids:", [r['id'] for r in esc])
+
+if __name__ == "__main__":
+    main()

← a049441 PDP: fall back to wallco_rooms table for room_mockups when d  ·  back to Wallco Ai  ·  wallco PDP: gate unpublished /design/:id from public direct- 851af25 →