feat: measurement workflow improvements and recipe update-in-place
- Auto-advance to next task after completing all subtask measurements - 1s pause between measurements to show pass/fail/warning result - Colored marker strip (green/red/amber) based on measurement status - Replace duplicate measurements instead of appending (fixes progress bar) - Add Task column and Date/Time column to measurement summary table - Enrich summary with task_info for each measurement - Update-in-place for recipe versions without measurements (no copy-on-write) - Dark theme improvements and navbar cleanup - Server config: ignore extra env vars Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -93,10 +93,19 @@ async def update_recipe(
|
||||
user: User = Depends(require_maker),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
"""Update a recipe - creates a new version via copy-on-write. Requires Maker role."""
|
||||
new_version = await recipe_service.create_new_version(db, recipe_id, data, user)
|
||||
"""Update a recipe. Creates a new version only if the current one has measurements.
|
||||
Otherwise updates in-place. Requires Maker role.
|
||||
"""
|
||||
current = await recipe_service.get_current_version(db, recipe_id)
|
||||
has_measurements = await recipe_service.version_has_measurements(db, current.id)
|
||||
|
||||
if has_measurements:
|
||||
# Copy-on-write: create new version to preserve measurement data
|
||||
await recipe_service.create_new_version(db, recipe_id, data, user)
|
||||
else:
|
||||
# No measurements yet: update in-place
|
||||
await recipe_service.update_current_version(db, recipe_id, data)
|
||||
|
||||
# Reload full recipe for consistent response
|
||||
recipe = await recipe_service.get_recipe_detail(db, recipe_id)
|
||||
return _recipe_to_response(recipe)
|
||||
|
||||
|
||||
+13
-5
@@ -153,11 +153,19 @@ async def create_task(
|
||||
detail="Cannot modify an inactive recipe",
|
||||
)
|
||||
|
||||
# Copy-on-write: create new version with existing tasks cloned
|
||||
from schemas.recipe import RecipeUpdate
|
||||
new_version = await recipe_service.create_new_version(
|
||||
db, recipe_id, RecipeUpdate(change_notes=f"Added task: {data.title}"), user
|
||||
)
|
||||
# Check if current version has measurements
|
||||
current = await recipe_service.get_current_version(db, recipe_id)
|
||||
has_measurements = await recipe_service.version_has_measurements(db, current.id)
|
||||
|
||||
if has_measurements:
|
||||
# Copy-on-write: create new version preserving measurement data
|
||||
from schemas.recipe import RecipeUpdate
|
||||
new_version = await recipe_service.create_new_version(
|
||||
db, recipe_id, RecipeUpdate(change_notes=f"Added task: {data.title}"), user
|
||||
)
|
||||
else:
|
||||
# No measurements: use current version directly
|
||||
new_version = current
|
||||
|
||||
# Determine order_index (append at end)
|
||||
max_order = max((t.order_index for t in new_version.tasks), default=-1)
|
||||
|
||||
Reference in New Issue
Block a user