diff --git a/.pql/changelog/ticket_history/2026-07.sql b/.pql/changelog/ticket_history/2026-07.sql index 2dea3742f..b09d88eec 100644 --- a/.pql/changelog/ticket_history/2026-07.sql +++ b/.pql/changelog/ticket_history/2026-07.sql @@ -1510,3 +1510,5 @@ INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, chang INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FPXB28V72K8ZPE5WSNJS1SP8', 'status', 'backlog', 'in_progress', NULL, '2026-07-17 07:34:22', '2026-07-17 07:34:22.191', '2026-07-17 07:34:22.191', NULL, 'f2c4221be9f8284f42cf30df6e2923a8', 2) ON CONFLICT(hash) DO NOTHING; INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FPXATGN8QJAJVR0WCRHJS2TG', 'status', 'in_progress', 'review', NULL, '2026-07-17 08:44:33', '2026-07-17 08:44:33.133', '2026-07-17 08:44:33.133', NULL, 'acdc54129303a07fbfa6b17ae466dcca', 2) ON CONFLICT(hash) DO NOTHING; INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FPXB28V72K8ZPE5WSNJS1SP8', 'status', 'in_progress', 'review', NULL, '2026-07-17 08:44:33', '2026-07-17 08:44:33.136', '2026-07-17 08:44:33.136', NULL, '1f0a7c19bc19621fba62d8990c338482', 2) ON CONFLICT(hash) DO NOTHING; +INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FPXATGN8QJAJVR0WCRHJS2TG', 'status', 'review', 'done', NULL, '2026-07-17 08:57:02', '2026-07-17 08:57:02.425', '2026-07-17 08:57:02.425', NULL, '83126a9bdaada931c2ac8ef0ab43a2e4', 2) ON CONFLICT(hash) DO NOTHING; +INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FPXB28V72K8ZPE5WSNJS1SP8', 'status', 'review', 'done', NULL, '2026-07-17 08:57:02', '2026-07-17 08:57:02.427', '2026-07-17 08:57:02.427', NULL, 'f0716dd68297e94be7a286dcc0a47d2b', 2) ON CONFLICT(hash) DO NOTHING; diff --git a/.pql/changelog/tickets/2026-07.sql b/.pql/changelog/tickets/2026-07.sql index 830399c09..dbedb7631 100644 --- a/.pql/changelog/tickets/2026-07.sql +++ b/.pql/changelog/tickets/2026-07.sql @@ -2163,3 +2163,7 @@ INSERT INTO tickets (record_id, type, parent_record_id, title, description, stat INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FPXB28V72K8ZPE5WSNJS1SP8', 'task', '06FPX7FKG0Y6SYWEDPG4PJQHQ8', 'Data browser UI — implant/browser app, six index+detail screens', 'D-254 SS4 + Jeroen''s IA ruling (2026-07-17): a SEPARATE implant app (implant/browser), sibling to the Atlas — the six registry entities do not share the Atlas''s geographic drill-down. ONE ticket for all six per Jeroen (single review sees the whole surface). Scope: new client/ui/implant/apps/browser/ app.tres + app.gd + index/detail screen pairs for star systems, bodies, stations, corporations, commodities, trait templates — composed ENTIRELY from D-169 implant components (ImplantPanel/ImplantHeader/ImplantDataRow/ImplantTextBlock; no new UI primitives); wired to the six BrowseRequest endpoints; reachable from the standalone shell (and by design also from the in-game implant later — it is a normal implant app). Blocked by the browse-proxy ticket (data source) and the standalone-shell ticket (launch surface). Note (D-254 SS3 addition, 2026-07-17): the implant/browser app manifest carries available_in_companion = true (the default). Because the companion shell is a generic implant host, this app appears in the standalone Atlas automatically the moment it registers — no companion-side wiring.', 'review', 'high', NULL, 'client', NULL, '2026-07-17 06:03:32.441', '2026-07-17 08:44:33.135', NULL, 'e6f25d5beb2dcb3a68eba510cf0e3c22', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_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 (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FPXATGN8QJAJVR0WCRHJS2TG', 'task', '06FPX7FKG0Y6SYWEDPG4PJQHQ8', 'Browse data proxy — six v1 entity read endpoints over the wire', 'D-254 SS4. BrowseRequest/Response per-entity-kind types (star systems, bodies, stations, corporations, commodities, trait templates) in server/src/atlas/, sibling to atlas_data_proxy.rs; rusqlite reads against systems.db via the CityContextReader::open() pattern (five-ish new read functions on a proven pattern); wired into the same inbound demux the reader connection uses. Wire-only by D-254 ruling (extends the T-949 precedent: the client never reads game data files directly; no SQLite GDExtension). Excluded from v1: cascade-derived atlas geometry tables (partially populated mid-Phase-4) and event-log tables (wrong UI shape) — exclusion list recorded in D-254. Blocked by the reader-connection ticket (needs the connection class to gate against).', 'done', 'high', NULL, 'server', NULL, '2026-07-17 06:02:28.906', '2026-07-17 08:57:02.424', NULL, '1e55e54b81178fc09329b0f255e9b978', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_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 (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FPXB28V72K8ZPE5WSNJS1SP8', 'task', '06FPX7FKG0Y6SYWEDPG4PJQHQ8', 'Data browser UI — implant/browser app, six index+detail screens', 'D-254 SS4 + Jeroen''s IA ruling (2026-07-17): a SEPARATE implant app (implant/browser), sibling to the Atlas — the six registry entities do not share the Atlas''s geographic drill-down. ONE ticket for all six per Jeroen (single review sees the whole surface). Scope: new client/ui/implant/apps/browser/ app.tres + app.gd + index/detail screen pairs for star systems, bodies, stations, corporations, commodities, trait templates — composed ENTIRELY from D-169 implant components (ImplantPanel/ImplantHeader/ImplantDataRow/ImplantTextBlock; no new UI primitives); wired to the six BrowseRequest endpoints; reachable from the standalone shell (and by design also from the in-game implant later — it is a normal implant app). Blocked by the browse-proxy ticket (data source) and the standalone-shell ticket (launch surface). + +Note (D-254 SS3 addition, 2026-07-17): the implant/browser app manifest carries available_in_companion = true (the default). Because the companion shell is a generic implant host, this app appears in the standalone Atlas automatically the moment it registers — no companion-side wiring.', 'done', 'high', NULL, 'client', NULL, '2026-07-17 06:03:32.441', '2026-07-17 08:57:02.427', NULL, 'fd972bbfcc3dca5fb2bfa18e529b875c', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_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);