chore(meta): decompose T-974 into D-239 tile-derivation implementation tickets
Breaks the Atlas-to-tile derivation epic (T-974) into 9 implementation tasks from the D-239 contract, as a walking skeleton: - T-1023 RegionProfile carrier + derived gating + BodyWorldState cache - T-1024 district climate primitives (temperature + moisture) - T-1025 climate-derived fields (precip / GlaciationGrade / vegetation) - T-1026 anti-squaring domain warp (f64-to-voxel) - T-1027 morphology classifier (17-zone vocab + 8-family selector + seam matrix) - T-1028 VoxelColumn pipeline (skeleton) + AlluvialPlain fallback - T-1029 specialized morphology generators (7 families) - T-1030 scattered transient freeze/snow model - T-1031 believability + determinism + <5ms budget harness DAG wired; first wave unblocked = T-1023, T-1024, T-1026. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -484,3 +484,11 @@ INSERT INTO ticket_deps (blocker_id, blocked_id, created_at, updated_at, deleted
|
||||
INSERT INTO ticket_deps (blocker_id, blocked_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-1005', 'T-1017', '2026-06-06 00:00:00', '2026-06-07 08:40:15', '2026-06-07 08:40:15', 'f78a109d670758531481573ad46c25da', 1) ON CONFLICT(blocker_id, blocked_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash);
|
||||
INSERT INTO ticket_deps (blocker_id, blocked_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-1010', 'T-1017', '2026-06-06 00:00:00', '2026-06-07 08:40:15', '2026-06-07 08:40:15', '966893fc9b75268b6e482512dcf7f5fa', 1) ON CONFLICT(blocker_id, blocked_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash);
|
||||
INSERT INTO ticket_deps (blocker_id, blocked_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-1016', 'T-1017', '2026-06-06 00:00:00', '2026-06-07 08:40:15', '2026-06-07 08:40:15', 'bc6e69d4f58ad47ad3fed4a5031c17e3', 1) ON CONFLICT(blocker_id, blocked_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash);
|
||||
INSERT INTO ticket_deps (blocker_id, blocked_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-1024', 'T-1025', '2026-06-07 10:34:18', '2026-06-07 10:34:18', NULL, 'f23a578142d8fbdcf88160b281daa744', 1) ON CONFLICT(blocker_id, blocked_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash);
|
||||
INSERT INTO ticket_deps (blocker_id, blocked_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-1023', 'T-1027', '2026-06-07 10:34:18', '2026-06-07 10:34:18', NULL, '7a5e481ab4aa3bb2822b81646f2360a2', 1) ON CONFLICT(blocker_id, blocked_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash);
|
||||
INSERT INTO ticket_deps (blocker_id, blocked_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-1025', 'T-1027', '2026-06-07 10:34:18', '2026-06-07 10:34:18', NULL, '714fa4a73934b4dd6103d4fb92472bc4', 1) ON CONFLICT(blocker_id, blocked_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash);
|
||||
INSERT INTO ticket_deps (blocker_id, blocked_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-1026', 'T-1028', '2026-06-07 10:34:18', '2026-06-07 10:34:18', NULL, '64908ec4396c7089fa340cfcfb693f18', 1) ON CONFLICT(blocker_id, blocked_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash);
|
||||
INSERT INTO ticket_deps (blocker_id, blocked_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-1027', 'T-1028', '2026-06-07 10:34:18', '2026-06-07 10:34:18', NULL, 'a973d73f1a8e7a03699db038eb1d1e0b', 1) ON CONFLICT(blocker_id, blocked_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash);
|
||||
INSERT INTO ticket_deps (blocker_id, blocked_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-1028', 'T-1029', '2026-06-07 10:34:18', '2026-06-07 10:34:18', NULL, '846b9769bc3f915a5b78d26f8043e56f', 1) ON CONFLICT(blocker_id, blocked_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash);
|
||||
INSERT INTO ticket_deps (blocker_id, blocked_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-1025', 'T-1030', '2026-06-07 10:34:18', '2026-06-07 10:34:18', NULL, '2b004621493b0df5775816debfe01d4e', 1) ON CONFLICT(blocker_id, blocked_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash);
|
||||
INSERT INTO ticket_deps (blocker_id, blocked_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-1029', 'T-1031', '2026-06-07 10:34:18', '2026-06-07 10:34:18', NULL, '65f71e85655dd9eb24de7741e9a9df44', 1) ON CONFLICT(blocker_id, blocked_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash);
|
||||
|
||||
@@ -232,3 +232,12 @@ Refinement (2026-05-23, /whats-next):
|
||||
Design (D-226, Araminta, 2026-05-24) — human-visual layer of the inspection harness. Extend OVERLAY_DEFS / AtlasOverlayBar with a generation overlay group (second row) + a left-side legend panel; do NOT build a separate viewer. Encoding: relief base; rivers as blue polylines (mouths = double-circle markers, confluences where in-degree >= 3); basin fills very translucent + thin boundary polylines; attractors as markers where SHAPE encodes the 7 AttractorTypes (circle/half-circle/diamond/down-tri/up-tri/hollow-circle/square) and COLOR encodes sub-biome (shape carries identity in headless/monochrome; color is additive); size scales with strength, skip strength < 0.15. Stable button ids gen_l0_heightmap / gen_l1_rivers / gen_l1_basins / gen_l1_attractors; start pending/locked, unlock+activate via notify_gen_layer_ready(id) as data arrives (grows as layers land, D-166). Consumes the live proxy (#969); the agent channel (#971) drives this same UI.
|
||||
|
||||
Remaining to close (Si sweep 2026-06-07): add the gen_l0_heightmap overlay to OVERLAY_DEFS + render path in atlas_viewer.gd / atlas_marker_overlay.gd — required by the D-226/T-960 acceptance criteria but currently absent. Layer-1 overlays (rivers/basins/attractors) + proxy wire + pending indicator are already implemented; this Layer-0 overlay is the sole remaining piece.', 'in_progress', 'high', NULL, 'client', 'D-191', '2026-05-22 17:42:34', '2026-06-07 08:40:15', NULL, 'c92d9a6e152f0c535a8c2001c0ed4a5f', 1) ON CONFLICT(id) DO UPDATE SET type=excluded.type, parent_id=excluded.parent_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
|
||||
INSERT INTO tickets (id, type, parent_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-1023', 'task', 'T-974', 'RegionProfile carrier (~1km) + derived gating params + BodyWorldState cache', 'First stage of the D-239 three-carrier chain. Define the RegionProfile struct (morphology_zone, tectonic_class, glaciation_grade, slope/lithology/elevation summaries, and a derived per-body-class RIVER_THRESHOLD via (hydrosphere,tectonic_activity,precipitation_class)->threshold, NOT the global 200). Pure region-derivation fn(seed,atlas,body-params,pos). Cache in BodyWorldState (D-203, ~6k regions/body) populated in the D-206 background pass so the Atlas reads zone labels without triggering voxel derivation. No authoring at this layer — all gating params derived from body params. D-239 sections 1,10.', 'backlog', 'high', NULL, 'server', 'D-239', '2026-06-07 10:33:47', '2026-06-07 10:33:47', NULL, '3e6698977daa1b1358e1c74edd9e721c', 1) ON CONFLICT(id) DO UPDATE SET type=excluded.type, parent_id=excluded.parent_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
|
||||
INSERT INTO tickets (id, type, parent_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-1024', 'task', 'T-974', 'District climate primitives — temperature + moisture (2x2km)', 'D-239 section 2. Scalar district temperature in degrees C, NULLABLE (no atmosphere -> null -> climate branch absent; airless surface ice is geology per D-227). Derived from sun (luminosity+insolation), planet (latitude+elevation lapse+orbital/axial phase=season term, day-phase=diurnal term), atmosphere (greenhouse->base, heat-retention->diurnal-swing amplitude; thick air=small swing). Separate moisture primitive from hydrosphere. Formalises D-210''s temperature proxy. Tiles inherit district values.', 'backlog', 'high', NULL, 'server', 'D-239', '2026-06-07 10:33:47', '2026-06-07 10:33:47', NULL, 'a8bea15fc3d097cf3353ed5cc39c9a03', 1) ON CONFLICT(id) DO UPDATE SET type=excluded.type, parent_id=excluded.parent_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
|
||||
INSERT INTO tickets (id, type, parent_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-1025', 'task', 'T-974', 'Climate-derived fields — precipitation, GlaciationGrade, vegetation/treeline', 'D-239 section 2. Everything climatic derives from temperature(+moisture): precipitation_class = f(temp,moisture); GlaciationGrade from long-term/seasonal-minimum temperature (consumed by morphology gating); vegetation/treeline = temperature bands x elevation (Forest->Scrub->Barren no-skip, riparian 1-3 tile band). All derived, none authored. Blocked by the temperature/moisture primitives.', 'backlog', 'high', NULL, 'server', 'D-239', '2026-06-07 10:33:47', '2026-06-07 10:33:47', NULL, 'b77263811bc8eed58e256e87ab3a5d61', 1) ON CONFLICT(id) DO UPDATE SET type=excluded.type, parent_id=excluded.parent_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
|
||||
INSERT INTO tickets (id, type, parent_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-1026', 'task', 'T-974', 'Anti-squaring domain warp — stateless f64-to-voxel', 'D-239 section 4. Stateless hash-based pure fn(seed,body_id,pos) — no lookup table / thread-local cache (order-independent across threads/platforms). Keep f64 sub-metre precision to the final voxel coordinate, then truncate (a cast, NOT a comparison) to the integer voxel address -> IEEE-754-deterministic across targets. +/-8m range makes FMA-contraction ULP variance harmless (no platform guards). Cross-target determinism test. Position math only — D-010 integer discipline preserved on all material/morphology decisions.', 'backlog', 'high', NULL, 'server', 'D-239', '2026-06-07 10:33:47', '2026-06-07 10:33:47', NULL, 'e2c06bdc86ee5715a4746a2313d3a142', 1) ON CONFLICT(id) DO UPDATE SET type=excluded.type, parent_id=excluded.parent_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
|
||||
INSERT INTO tickets (id, type, parent_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-1027', 'task', 'T-974', 'Morphology classifier — 17-zone frozen vocab + 8-family gated selector + seam matrix', 'D-239 sections 5,6,7. Frozen 17-zone MorphologyZone Rust enum (the canonical freeze point; add/rename/remove needs a D-record amendment; classifier tuning stays free). 8-family gated decision tree over integer RegionProfile inputs: LavaField,FjordWall,CliffCoast,BraidedDelta,DuneStrand,IncisedGorge,MeanderReach,AlluvialPlain(fallback). Hard gates pre-selection in tree order: fjord>=GlaciationGrade2, LavaField=tectonic_class Volcanic, lithology bounds slope/form. Build-time compatibility-matrix invariant test blocking incompatible adjacencies (e.g. Meander<->Volcanic) — never a runtime override. Four zones (tidal flat, estuarine, alpine, wetland) are derived sub-classifications, not families. Blocked by RegionProfile + climate-derived GlaciationGrade.', 'backlog', 'high', NULL, 'server', 'D-239', '2026-06-07 10:33:47', '2026-06-07 10:33:47', NULL, 'e72ee28875072bf3af3c213ac6cfe836', 1) ON CONFLICT(id) DO UPDATE SET type=excluded.type, parent_id=excluded.parent_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
|
||||
INSERT INTO tickets (id, type, parent_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-1028', 'task', 'T-974', 'VoxelColumn pipeline (walking skeleton) — ChunkContext + voxel derive/cache + AlluvialPlain', 'D-239 sections 1,7,10. Walking skeleton of the lower chain. ChunkContext (64m) carrier: one basin-direction + global meander-curve params (NO per-tile flow_direction[64x64] — D8 ~152m/cell is coarser than a chunk; features with wavelength >64m seed from Region-or-higher). VoxelColumn (1m) on-demand derive + cache, never persisted (D-227); compose into the D-228 tile axes (TerrainMaterial/FloorMaterial/Vegetation/Water/elevation). Wire the domain warp through chunk/voxel. End-to-end with ONLY the AlluvialPlain fallback generator to prove region->chunk->voxel->tile before specialized families. Blocked by warp + morphology classifier.', 'backlog', 'high', NULL, 'server', 'D-239', '2026-06-07 10:34:11', '2026-06-07 10:34:11', NULL, '53f6b0e031179322afc4a77a40ad997e', 1) ON CONFLICT(id) DO UPDATE SET type=excluded.type, parent_id=excluded.parent_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
|
||||
INSERT INTO tickets (id, type, parent_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-1029', 'task', 'T-974', 'Specialized morphology geometry generators (7 families)', 'D-239 sections 5,8. Implement LavaField, FjordWall, CliffCoast, BraidedDelta, DuneStrand, IncisedGorge, MeanderReach geometry on the F1 VoxelColumn pipeline. Each honours the binding believability laws (drainage monotonicity / D8 thalweg; lithology->landform; glaciation->form U-valleys/moraines/cirques) and game-feel chokepoint widths (river crossings 3-15m, gorge floors 2-8m). Validate per-family <5ms/chunk (FjordWall/IncisedGorge are far costlier than the AlluvialPlain fallback). May split per-family during refinement. Blocked by the F1 pipeline.', 'backlog', 'high', NULL, 'server', 'D-239', '2026-06-07 10:34:11', '2026-06-07 10:34:11', NULL, 'e3525f555af182a432047c3672537d14', 1) ON CONFLICT(id) DO UPDATE SET type=excluded.type, parent_id=excluded.parent_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
|
||||
INSERT INTO tickets (id, type, parent_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-1030', 'task', 'T-974', 'Scattered transient freeze/snow model', 'D-239 section 3. Phase transition as a band with deterministic spatially-coherent scatter (clustered patches, never per-tile dice): freshwater (lakes/rivers) +5 to -10 C district mean (the +5 is night-frost reaching the coldest tiles); sea ice own lower/wider band (~-2 onset, pack-ice sheets+leads pattern); snow (land) moisture-gated. TRANSIENT in the marginal band — forms in the cold phase, melts in the warm phase (day/night, season) -> time-of-day passability shifts. The transient/clock-bound portion is a forward contract to Q-105 (region seasonal/clock state); the static scattered model is buildable now. Blocked by climate-derived fields.', 'backlog', 'medium', NULL, 'server', 'D-239', '2026-06-07 10:34:11', '2026-06-07 10:34:11', NULL, 'cbde57e8b0c344ac6503725a091cccd9', 1) ON CONFLICT(id) DO UPDATE SET type=excluded.type, parent_id=excluded.parent_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
|
||||
INSERT INTO tickets (id, type, parent_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-1031', 'task', 'T-974', 'Believability + determinism + <5ms budget verification harness', 'D-239 sections 1,8,9. Golden-seed regression for the binding laws (drainage monotonicity, lithology->landform, glaciation->form with no glacial-U on GlaciationGrade 0, climate->vegetation no-skip + riparian band), per-family <5ms/chunk budget assertion, and the validation-case bodies: Kallast=alluvial plain/Soil, Velen=tidal-flat/dune coast (VERIFY it has a moon param for the tidal term first), Cygni B=volcanic immature drainage, Ross 128=ocean island terrain, Gruenfeld=marginal Gravel/Scrub. If a body reads wrong, fix its params — never patch the derivation (D-239 section 1). Blocked by the family generators.', 'backlog', 'high', NULL, 'server', 'D-239', '2026-06-07 10:34:11', '2026-06-07 10:34:11', NULL, '0cbe7fe1f7c2bfcdf36a62f709fa68b7', 1) ON CONFLICT(id) DO UPDATE SET type=excluded.type, parent_id=excluded.parent_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
|
||||
|
||||
Reference in New Issue
Block a user