779ba6db59
Brings the §1 bot wrapper, the §4 cache (webhook + reconciler), the §5 schema (six numbered migrations), Gitea OAuth + §6 user provisioning, the §7 catalog left pane, and the propose-to-merge vertical: propose modal opens an idea PR against the meta repo, an owner merges from the pending-idea view, the cache picks it up via webhook or reconciler sweep, and the catalog renders the new super-draft. Per §1 the bot is the only Git writer; every commit, branch creation, and PR merge carries the §6.5 On-behalf-of: trailer and an `actions` audit row. Per §4 the cache is never written from a user action — it's webhook+reconciler only. Covered by `backend/tests/test_propose_vertical.py` against an in-process Gitea simulator. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
39 lines
1.6 KiB
SQL
39 lines
1.6 KiB
SQL
-- §5 / §6.4 / §11.1: per-branch visibility and contribute settings.
|
|
-- These rows are app data, not cache. They describe what the app permits
|
|
-- for a given branch; the bot enforces them before acting. Absence of a
|
|
-- row means defaults: read_public=1, contribute_mode='just-me'.
|
|
|
|
CREATE TABLE branch_visibility (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
rfc_slug TEXT NOT NULL,
|
|
branch_name TEXT NOT NULL,
|
|
read_public INTEGER NOT NULL DEFAULT 1,
|
|
contribute_mode TEXT NOT NULL DEFAULT 'just-me' CHECK (contribute_mode IN ('just-me', 'specific', 'any-contributor')),
|
|
UNIQUE (rfc_slug, branch_name)
|
|
);
|
|
|
|
CREATE TABLE branch_contribute_grants (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
rfc_slug TEXT NOT NULL,
|
|
branch_name TEXT NOT NULL,
|
|
grantee_user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
granted_by INTEGER NOT NULL REFERENCES users(id) ON DELETE SET NULL,
|
|
granted_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
UNIQUE (rfc_slug, branch_name, grantee_user_id)
|
|
);
|
|
|
|
CREATE INDEX idx_grants_lookup ON branch_contribute_grants (rfc_slug, branch_name);
|
|
CREATE INDEX idx_grants_grantee ON branch_contribute_grants (grantee_user_id);
|
|
|
|
-- §5 / §7.2: starred RFCs pin to the top of the current sort order.
|
|
CREATE TABLE stars (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
rfc_slug TEXT NOT NULL,
|
|
starred_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
UNIQUE (user_id, rfc_slug)
|
|
);
|
|
|
|
CREATE INDEX idx_stars_user ON stars (user_id);
|
|
CREATE INDEX idx_stars_rfc ON stars (rfc_slug);
|