From 5bde7c2d7e099fd9c8b2615602ab1d096bd9b6be Mon Sep 17 00:00:00 2001 From: soryu Date: Tue, 28 Apr 2026 21:26:11 +0100 Subject: revert PRs #93-#98; enforce strict-linear-DAG + mandatory directive verify (#100) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * revert: roll back PRs #93-#98 to pre-Lexical baseline Reverts the entire chain of directive document UI work and the homepage redesign, restoring the working tree to the state at 3679ceb (before c8b169d / PR #93). PRs reverted: - #93 c8b169d feat: Document UI for directive orchestration with Lexical editor - #94 d6f01a6 fix: compilation error and warnings already merged via PR #93 - #95 5aa3faf fix: resolve compilation error and warnings in Rust backend - #97 d513f93 feat: document UI with contract blocks, expandable logs, and interaction controls - #96 6366941 feat: Redesign homepage with professional PC-98 styling - #98 d1fdfb1 feat: revert broken directive PRs, re-implement Lexical document orchestrator The directive Document UI experiments produced fragile output and merge artifacts; follow-up commits in this PR change orchestration to favor strictly linear DAGs and add goal/conflict verification so future runs do not require this kind of cleanup. Co-Authored-By: Claude Opus 4.7 (1M context) * feat(directive): strict-linear-DAG planning + mandatory `directive verify` Tightens directive orchestration so the final PR almost never needs a hand-merge: 1. Planning prompts now strongly bias toward strictly linear DAGs. Parallel steps are reserved for genuinely independent work (e.g. disjoint modules); the default for "in doubt" is sequential. Linear chains inherit each previous step's worktree, so the final merge is typically just a rebase against the base branch. 2. New CLI command `makima directive verify` does a local in-memory `git merge-tree` of HEAD against `/` and exits non-zero with a list of conflicting files if the PR would not merge cleanly. Pure-local — no API call, no working-tree mutation. 3. Completion / PR-creation prompts now mandate three pre-push checks: a. build (`cargo check` and/or `tsc --noEmit`), b. `makima directive verify --base ` must exit 0, and c. an explicit goal-alignment self-check against the diff. The orchestrator is told NOT to push, create the PR, or call `makima directive update` until all three pass. Skipping any of them is documented as a directive failure. The combination means that with a linear DAG the final PR-creation task should almost never see a real conflict — when it does, that is treated as a planning bug to escalate rather than something to paper over with `-X theirs`. Co-Authored-By: Claude Opus 4.7 (1M context) * fix(frontend): TS errors pre-existing on master - TaskSlideOutPanel: declare missing `selectedFileDiff` / `selectedFilePath` state hooks that were referenced everywhere but never created, and re-balance the JSX so the `<>...` fragment in the non-diff branch is closed (the previous indentation/braces would not parse). - api.ts: add a `getWorktreeDiff` thin wrapper around `getTaskDiff` so TaskDetail's per-file click handler type-checks (the per-file slice is a future improvement; today both return the full task diff). - WorktreeFilesPanel: remove unused `isClickable` local; the gating already reads `onFileClick` directly inline. Run after revert: `npx tsc --noEmit` exits 0. Co-Authored-By: Claude Opus 4.7 (1M context) --------- Co-authored-by: Claude Opus 4.7 (1M context) --- makima/src/db/models.rs | 32 ----------------- makima/src/db/repository.rs | 85 --------------------------------------------- 2 files changed, 117 deletions(-) (limited to 'makima/src/db') diff --git a/makima/src/db/models.rs b/makima/src/db/models.rs index c11150f..97657dc 100644 --- a/makima/src/db/models.rs +++ b/makima/src/db/models.rs @@ -3050,36 +3050,4 @@ pub struct DirectiveOrderGroupListResponse { pub total: i64, } -// ============================================================================= -// User Settings Types -// ============================================================================= - -/// A user setting (feature flag / preference) stored in the database. -#[derive(Debug, Clone, FromRow, Serialize, Deserialize, ToSchema)] -#[serde(rename_all = "camelCase")] -pub struct UserSetting { - pub id: Uuid, - pub owner_id: Uuid, - pub key: String, - #[sqlx(json)] - pub value: serde_json::Value, - pub created_at: DateTime, - pub updated_at: DateTime, -} - -/// Request to upsert (create or update) a user setting. -#[derive(Debug, Deserialize, ToSchema)] -#[serde(rename_all = "camelCase")] -pub struct UpsertUserSettingRequest { - pub key: String, - pub value: serde_json::Value, -} - -/// Response wrapping a list of user settings. -#[derive(Debug, Serialize, ToSchema)] -#[serde(rename_all = "camelCase")] -pub struct UserSettingsResponse { - pub settings: Vec, -} - diff --git a/makima/src/db/repository.rs b/makima/src/db/repository.rs index 5a912e4..57e8a78 100644 --- a/makima/src/db/repository.rs +++ b/makima/src/db/repository.rs @@ -6698,88 +6698,3 @@ pub async fn get_available_orders_for_dog_pickup( .await } -// ============================================================================= -// User Settings -// ============================================================================= - -/// Get all settings for a user. -pub async fn get_user_settings( - pool: &PgPool, - owner_id: Uuid, -) -> Result, sqlx::Error> { - sqlx::query_as::<_, UserSetting>( - r#" - SELECT id, owner_id, key, value, created_at, updated_at - FROM user_settings - WHERE owner_id = $1 - ORDER BY key ASC - "#, - ) - .bind(owner_id) - .fetch_all(pool) - .await -} - -/// Get a specific setting by key for a user. -pub async fn get_user_setting( - pool: &PgPool, - owner_id: Uuid, - key: &str, -) -> Result, sqlx::Error> { - sqlx::query_as::<_, UserSetting>( - r#" - SELECT id, owner_id, key, value, created_at, updated_at - FROM user_settings - WHERE owner_id = $1 AND key = $2 - "#, - ) - .bind(owner_id) - .bind(key) - .fetch_optional(pool) - .await -} - -/// Upsert (create or update) a user setting. -pub async fn upsert_user_setting( - pool: &PgPool, - owner_id: Uuid, - key: &str, - value: &serde_json::Value, -) -> Result { - sqlx::query_as::<_, UserSetting>( - r#" - INSERT INTO user_settings (owner_id, key, value) - VALUES ($1, $2, $3) - ON CONFLICT (owner_id, key) DO UPDATE SET - value = EXCLUDED.value, - updated_at = NOW() - RETURNING id, owner_id, key, value, created_at, updated_at - "#, - ) - .bind(owner_id) - .bind(key) - .bind(value) - .fetch_one(pool) - .await -} - -/// Delete a user setting by key. Returns true if a row was deleted. -pub async fn delete_user_setting( - pool: &PgPool, - owner_id: Uuid, - key: &str, -) -> Result { - let result = sqlx::query( - r#" - DELETE FROM user_settings - WHERE owner_id = $1 AND key = $2 - "#, - ) - .bind(owner_id) - .bind(key) - .execute(pool) - .await?; - - Ok(result.rows_affected() > 0) -} - -- cgit v1.2.3