mirror of
https://github.com/PerpetualSoftware/pad.git
synced 2026-10-26 22:37:03 +00:00
9d2572eb7b
* feat: adopt pre-origin conventions and playbooks as built-ins, once, by exact title (TASK-3462 U4) Items made before built-in origins were recorded get the origin their exact title names (several entries sharing a title: the one whose body matches; no title match: a playbook's invocation_slug), with no seed version, so they read current or unknown_origin and get the 2-way preview (Dave's ruling: no historical hashes). It runs once per instance at server start, recorded in platform_settings, and only for items created before the origin migration was applied: a later item with no origin deliberately has none (a copy, an older import). Live items in convention/playbook collections only. Non-fatal on failure. Tests on both backends: exact title adopts, and an unedited copy then reads current; an edited one reads unknown_origin; a renamed playbook adopts by slug; soft-deleted and post-cutoff items are not adopted; a second run does nothing. Each of the four mutants (cutoff, once, deleted, slug) is killed. The matcher has unit tests, including ambiguous titles. * fix: legacy built-in adoption counts the migration's own second, refuses a title/slug conflict, and reads only convention/playbook items (TASK-3462 U4, codex r1) - The cutoff is at or before the migration's second (timestamps are second-precision), parsed rather than compared as text, since imported items keep their own format. - A playbook whose title names one built-in and whose invocation_slug names another is ambiguous and is not adopted. - The pass lists the convention and playbook collections first and reads only their items, instead of every originless item on the instance. Both new tests failed on the previous code. * fix: legacy built-in adoption requires the workspace to predate the cutoff too (TASK-3462 U4, codex r2) Import keeps each item's created_at from the bundle, so an old bundle imported after the origin migration but before the pass first ran read as legacy. Every import door mints a new workspace and none writes into an existing one, so the workspace's created_at bounds arrival. Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com>