Propose, Promote & Cross-DB Import
DB structure used to be purely top-down: an Owner or Admin created every table and column, and services inherited whatever already existed. That's safe, but it's also a bottleneck — a service owner who needs one new column has to go find an admin and wait. Proposals flip that.
Propose, don't wait
Any workspace member can propose a new table or column directly from their own service, gated by plain membership rather than Owner/Admin — proposing is meant to be low-friction. It's created immediately, with an immediate direct inheritance row so the proposer can use it right away, but marked private to that service and invisible to everyone else until the branch staging it is reviewed and merged.
Merging the branch does two things at once: it clears the column's private flag, and it fires the exact same "column added" notification to every other service that already inherits that table — the proposer doesn't get notified about their own proposal, everyone else does. From that point on it's indistinguishable from a column added directly at the master level. Rejecting the branch is non-destructive: the column stays exactly as it was, private and usable by the proposing service, reworkable as a new branch — nothing is deleted. A column's validation assignment works the same way, whether proposed by a service or set directly by an Owner/Admin — it rides the same Branch as everything else, it's just already a visible row, so only the rule itself waits for merge, not the column's visibility.
Cross-DB structure import
The companion feature: a one-time snapshot copy of one database's table/column structure into another — keep a mirror database in sync with the one it copies, in one action. It's explicitly a snapshot, not an ongoing link, so the two can diverge again immediately afterward. Every column the diff creates or removes still goes through the normal governed add/remove flow, so a bulk structural sync is indistinguishable from a manual change from a notification standpoint — nothing bypasses the checklist just because it happened in bulk.
