Implemented the first version of review output resolve actions. Included a ReviewOutputResolveActionMapper, commands to seed browser fixtures, updated CustomerReviewWorkspace, EnvironmentReviewResource, UI enforcement, and related views. Also added extensive unit, feature, and browser tests, and updated the design coverage matrix. Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #422
20 KiB
20 KiB
Spec 351 Browser Flow Audit — Review Output Resolve Actions
Executive Summary
- Overall readiness: not ready
- Main flow result:
Create next reviewis browser-verifiziert and scope-safe onenvironment_id=38, but the operator loop does not close cleanly because the workspace loses the released-review entry once a draft exists. - Top issues:
- P1: Workspace does not surface
Open draft reviewor any successor action once a draft exists; bothenvironment_id=39and the post-create state forenvironment_id=38fall back to an empty released-review state. - P1:
Publish reviewis visible on draft review14while the same page still saysPublication blocked/Output not customer-readyand points toRefresh reviewas the next step. - P2:
Refresh reviewconfirms cleanly but gives no browser-verifizierte success toast or obvious state delta, so the operator cannot tell whether anything changed.
- P1: Workspace does not surface
- Recommendation: fix before close
Repo State
- Branch:
351-review-output-resolve-actions-v1 - Dirty tracked files: 26
- Untracked files: 7
- Spec 351 active/uncommitted: yes
- App code already changed: yes
- Browser flow ran against the current uncommitted working tree: yes
- Relevant Spec 351 files in the dirty tree:
apps/platform/app/Support/ResolutionGuidance/ResolutionAction.phpapps/platform/app/Support/ResolutionGuidance/ResolutionCase.phpapps/platform/app/Support/ResolutionGuidance/Adapters/ReviewPackOutputResolutionAdapter.phpapps/platform/app/Support/ResolutionGuidance/ReviewOutputResolveActionMapper.phpapps/platform/app/Filament/Pages/Reviews/CustomerReviewWorkspace.phpapps/platform/app/Filament/Resources/EnvironmentReviewResource.phpapps/platform/app/Filament/Resources/EnvironmentReviewResource/Pages/ViewEnvironmentReview.phpapps/platform/resources/views/filament/pages/reviews/customer-review-workspace.blade.phpapps/platform/resources/views/components/resolution-guidance-card.blade.phpapps/platform/tests/Unit/ResolutionGuidance/Spec351ReviewOutputResolveActionMapperTest.phpapps/platform/tests/Feature/Filament/Spec351CustomerReviewWorkspaceResolveActionTest.phpapps/platform/tests/Feature/EnvironmentReview/Spec351EnvironmentReviewResolveActionTest.phpapps/platform/tests/Browser/Spec351ReviewOutputResolveActionsSmokeTest.php
- Tests executed during this audit: no
Repo-Verified Action Inventory
Repo-backed resolve actions
create_next_review- type: mutating / operation-backed
- browser surface: Customer Review Workspace and Environment Review detail
- confirmation: yes
- capability:
Capabilities::ENVIRONMENT_REVIEW_MANAGE - audit / operation backing:
AuditActionId::EnvironmentReviewSuccessorCreated,OperationRunType::EnvironmentReviewCompose
refresh_review- type: mutating / operation-backed
- browser surface: Environment Review detail only
- confirmation: yes
- capability:
Capabilities::ENVIRONMENT_REVIEW_MANAGE - audit / operation backing:
AuditActionId::EnvironmentReviewRefreshed,OperationRunType::EnvironmentReviewCompose
publish_review- type: mutating / domain action
- browser surface: Environment Review detail only
- confirmation: yes
- capability:
Capabilities::ENVIRONMENT_REVIEW_MANAGE - audit backing:
AuditActionId::EnvironmentReviewPublished
open_successor_review- type: navigation
- browser surface: detail action when
superseded_by_review_idresolves to a same-scope review - confirmation: no
Fallback / navigation actions
resolve_review_blockersopen_evidence_basisopen_operation_proofopen_review- download actions such as
download_review_pack_with_limitations
Actions intentionally not offered as executable in workspace
refresh_reviewpublish_review- generic “fix automatically”
- generic “make customer-ready”
Browser Environment
- Base URL:
http://localhost - User: authenticated workspace manager; resulting compose operations were initiated by
Ahmed Darrazi(repo-verifiziert after mutation) - Workspace:
wp/ workspace3 - Environments used:
38—Spec342 Demo Evidence Incomplete39—Spec342 Demo Ready
- Reviews used:
3— published review for environment38, later superseded by1414— draft created during this audit for environment384— superseded released review for environment3913— existing draft for environment39
- Review / pack state:
- environment
38pre-action: published blocked output, review pack4, operation24 - environment
38post-create: draft14, operation47, previous review3nowsuperseded_by_review_id=14 - environment
39: released review4already superseded by draft13
- environment
Flow Walkthrough
Step 0 — Existing-draft workspace state (environment_id=39)
- Step: reload current
Customer Review Workspace - URL:
http://localhost/admin/reviews/workspace?environment_id=39 - Visible title:
Customer Review Workspace - TenantPilot - Primary guidance state: not present
- Primary action: not present
- Secondary actions: not present
- Clicked action: none
- Expected result: if an existing draft is the next repo-backed step, the workspace should guide to it
- Actual result:
- browser-verifiziert: workspace shows
No released customer reviews match the active environment filter. - repo-verifiziert: environment
39has superseded review4plus draft13 - nicht vorhanden:
Open draft review
- browser-verifiziert: workspace shows
- Scope preserved? yes
- Console errors? no
- Network/server errors? no visible server error page
- Toast/notification: none
- State changed? no
- Operator clarity: low; the workspace gives no next step for an environment that already has a draft successor
- Issue: successor/draft flow is unreachable from the workspace once the released review is superseded
- Severity: P1
- Screenshot:
00-workspace-env39-no-released-review.png
Step 1 — Published blocked workspace (environment_id=38)
- Step: open blocked released-review workspace state
- URL:
http://localhost/admin/reviews/workspace?environment_id=38 - Visible title:
Customer Review Workspace - TenantPilot - Primary guidance state:
Output not customer-ready/Requires review - Primary action:
Create next review - Secondary actions:
Inspect review blockersDownload review pack with limitationsOpen evidence basisOpen operation proof
- Clicked action: none
- Expected result: one dominant real next step with secondary supporting actions
- Actual result:
- browser-verifiziert: one dominant
Create next reviewCTA - browser-verifiziert: supporting actions are visually subordinate
- browser-verifiziert: acknowledgement copy distinguishes consumption from customer-ready status
- browser-verifiziert: one dominant
- Scope preserved? yes
- Console errors? no
- Network/server errors? no visible server error page
- Toast/notification: none
- State changed? no
- Operator clarity: high on first screen
- Issue: none at this step
- Severity: none
- Screenshot:
01-customer-review-workspace-output-not-ready.png
Step 2 — Create next review confirmation
- Step: click
Create next review - URL:
http://localhost/admin/reviews/workspace?environment_id=38 - Visible title:
Customer Review Workspace - TenantPilot - Primary guidance state: unchanged beneath modal
- Primary action:
Create next review - Secondary actions: unchanged beneath modal
- Clicked action:
Create next review - Expected result: confirmation before mutation
- Actual result:
- browser-verifiziert: confirmation modal appears with
Create next review?
- browser-verifiziert: confirmation modal appears with
- Scope preserved? yes
- Console errors? no
- Network/server errors? no visible server error page
- Toast/notification: modal only
- State changed? not yet
- Operator clarity: high
- Issue: none
- Severity: none
- Screenshot:
02-create-next-review-primary-action.png
Step 3 — Result after create-next-review confirmation
- Step: confirm
Create next review - URL:
http://localhost/admin/workspaces/3/environments/spec342-demo-evidence-incomplete/environment-reviews/14?source_surface=customer_review_workspace&tenant_filter_id=38 - Visible title:
View Review - TenantPilot - Primary guidance state: draft review detail, initially
Internal only, thenPublication blocked/Output not customer-readyafter refresh interactions - Primary action:
Refresh review - Secondary actions:
Inspect review blockersOpen evidence basisOpen operation proof
- Clicked action: confirmed
Create next review - Expected result: new draft is created and opened in the correct environment scope
- Actual result:
- browser-verifiziert: detail page for review
14opens - repo-verifiziert: review
14exists as draft and review3is now superseded by14 - browser-verifiziert:
tenant_filter_id=38and environment scope are preserved in the URL
- browser-verifiziert: detail page for review
- Scope preserved? yes
- Console errors? no
- Network/server errors? no visible server error page
- Toast/notification: none clearly visible at landing time
- State changed? yes
- Operator clarity: medium; the draft opens correctly, but the route is a normal detail route rather than a suppressed customer-workspace detail route
- Issue: no direct break, but the operator has already left the calm workspace surface
- Severity: P2
- Screenshot:
03-after-create-next-review-draft.png
Step 4 — Draft review guidance
- Step: inspect the newly opened draft detail
- URL:
http://localhost/admin/workspaces/3/environments/spec342-demo-evidence-incomplete/environment-reviews/14?source_surface=customer_review_workspace&tenant_filter_id=38 - Visible title:
View Review - TenantPilot - Primary guidance state:
Output not customer-ready/Publication blocked - Primary action:
Refresh review - Secondary actions:
Inspect review blockersOpen evidence basisOpen operation proof
- Clicked action: none
- Expected result: next action should align with missing inputs / stale evidence
- Actual result:
- browser-verifiziert: detail guidance points to
Refresh review - browser-verifiziert: boundary copy remains non-customer-safe
- browser-verifiziert + repo-verifiziert:
Publish reviewis still visible in the header on this not-ready draft
- browser-verifiziert: detail guidance points to
- Scope preserved? yes
- Console errors? no
- Network/server errors? no visible server error page
- Toast/notification: none
- State changed? no
- Operator clarity: medium; the guidance is clear, but the visible
Publish reviewheader CTA competes with it - Issue: readiness and publish availability are contradictory on the same screen
- Severity: P1
- Screenshot:
04-draft-review-guidance.png
Step 5 — Refresh review inputs
- Step: open and confirm
Refresh review - URL:
http://localhost/admin/workspaces/3/environments/spec342-demo-evidence-incomplete/environment-reviews/14?source_surface=customer_review_workspace&tenant_filter_id=38 - Visible title:
View Review - TenantPilot - Primary guidance state: remains blocked / refresh-oriented
- Primary action:
Refresh review - Secondary actions: unchanged
- Clicked action:
Refresh review - Expected result: obvious success feedback or visible state transition
- Actual result:
- browser-verifiziert: confirmation opens
- browser-verifiziert: confirm completes without console errors
- browser-verifiziert: no obvious success toast, no clear state delta, no new operator-facing completion cue
- plausibel: refresh may have run, but the UI does not make that outcome legible
- Scope preserved? yes
- Console errors? no
- Network/server errors? no visible server error page
- Toast/notification: none browser-verifiziert
- State changed? not obvious
- Operator clarity: low after confirmation
- Issue: refresh feedback is too weak for an action that is supposed to move the draft forward
- Severity: P2
- Screenshot:
05-refresh-review-inputs-if-available.png,06-after-refresh-result.png
Step 6 — Evidence basis target
- Step: click
View evidence snapshot - URL:
http://localhost/admin/workspaces/3/environments/spec342-demo-evidence-incomplete/evidence/5 - Visible title:
View Evidence Snapshot - TenantPilot - Primary guidance state: evidence page
- Primary action: none in scope for this audit
- Secondary actions: page-local
- Clicked action:
View evidence snapshot - Expected result: correct environment-scoped evidence detail
- Actual result:
- browser-verifiziert: correct evidence detail opens
- browser-verifiziert: environment scope remains
Spec342 Demo Evidence Incomplete
- Scope preserved? yes
- Console errors? no
- Network/server errors? no visible server error page
- Toast/notification: none
- State changed? navigated
- Operator clarity: good
- Issue: none
- Severity: none
- Screenshot:
08-evidence-basis-target.png
Step 7 — Operation proof target
- Step: click visible
Open operationfor the current draft - URL:
http://localhost/admin/workspaces/3/operations/47 - Visible title:
Operation #47 - TenantPilot - Primary guidance state: operation detail
- Primary action: none in scope for this audit
- Secondary actions: page-local
- Clicked action:
Open operation - Expected result: operation proof opens for the current review/compose context
- Actual result:
- browser-verifiziert: operation page opens
- browser-verifiziert: operation shows compose context and succeeded outcome
- Scope preserved? yes
- Console errors? no
- Network/server errors? no visible server error page
- Toast/notification: none
- State changed? navigated
- Operator clarity: good
- Issue: none
- Severity: none
- Screenshot:
09-operation-proof-target.png
Step 8 — Customer-workspace detail context
- Step: open released review
3directly in customer-workspace detail mode - URL:
http://localhost/admin/workspaces/3/environments/spec342-demo-evidence-incomplete/environment-reviews/3?customer_workspace=1&source_surface=customer_review_workspace&tenant_filter_id=38 - Visible title:
View Review - TenantPilot - Primary guidance state: released review detail with customer-workspace context note
- Primary action: suppressed
- Secondary actions: suppressed in the guidance card
- Clicked action: direct route open
- Expected result: no duplicate CTA rail and clear context note
- Actual result:
- browser-verifiziert: context note
You are already on the review detail for this output. - browser-verifiziert: no visible
Create next review,Publish review, orRefresh reviewbuttons in the guidance surface - browser-verifiziert: review status, output readiness, publication/sharing state, and limitations remain visible
- browser-verifiziert: context note
- Scope preserved? yes
- Console errors? no
- Network/server errors? no visible server error page
- Toast/notification: none
- State changed? navigated
- Operator clarity: good
- Issue: none
- Severity: none
- Screenshot:
10-review-detail-customer-workspace-context.png
Step 9 — Final workspace state after create-next-review
- Step: return to
Customer Review Workspacefiltered to environment38 - URL:
http://localhost/admin/reviews/workspace?environment_id=38 - Visible title:
Customer Review Workspace - TenantPilot - Primary guidance state: not present
- Primary action: not present
- Secondary actions: not present
- Clicked action: direct workspace return
- Expected result: show current draft / successor review as the next repo-backed step
- Actual result:
- browser-verifiziert: workspace now shows
No released customer reviews match the active environment filter. - repo-verifiziert: environment
38has draft14and released review3is superseded by it - nicht vorhanden:
Open draft review
- browser-verifiziert: workspace now shows
- Scope preserved? yes
- Console errors? no
- Network/server errors? no visible server error page
- Toast/notification: none
- State changed? yes, but the state is not actionable from the workspace
- Operator clarity: low
- Issue: the main operator loop breaks after the successful creation of a next review
- Severity: P1
- Screenshot:
11-final-customer-review-workspace-state.png
Screenshot Index
| Step | Screenshot | Notes |
|---|---|---|
| Extra | 00-workspace-env39-no-released-review.png |
Existing-draft environment filtered to an empty released-review state |
| 1 | 01-customer-review-workspace-output-not-ready.png |
Good first-screen blocked-output hierarchy |
| 2 | 02-create-next-review-primary-action.png |
Confirmation modal present |
| 3 | 03-after-create-next-review-draft.png |
Draft detail opened after mutation |
| 4 | 04-draft-review-guidance.png |
Draft detail shows refresh-first guidance |
| 5 | 05-refresh-review-inputs-if-available.png |
Refresh confirmation |
| 5 result | 06-after-refresh-result.png |
No clear operator-facing success cue |
| 4 / 6 | 07-publish-review-if-available.png |
Publish review visible on not-ready draft |
| 6 | 08-evidence-basis-target.png |
Evidence target correct |
| 7 | 09-operation-proof-target.png |
Operation target correct |
| 8 | 10-review-detail-customer-workspace-context.png |
CTA suppression works in explicit customer-workspace mode |
| 9 | 11-final-customer-review-workspace-state.png |
Final workspace loses actionable successor/draft state |
Findings
P0 Blockers
- none confirmed
P1 High
- Workspace successor flow is broken once a draft exists.
- browser-verifiziert:
environment_id=39and post-createenvironment_id=38both end inNo released customer reviews match the active environment filter. - repo-verifiziert: both environments have a draft successor (
13for env39,14for env38). - impact: the operator cannot return to the workspace and continue with
Open draft reviewor equivalent successor guidance.
- browser-verifiziert:
Publish reviewis visible on non-ready draft review14.- browser-verifiziert: draft detail shows
Publication blocked/Output not customer-readyand still surfaces a visiblePublish reviewheader CTA. - repo-verifiziert:
publish_reviewis only hidden when the review is not mutable; it is not readiness-gated in the page action. - impact: the UI offers a competing high-impact mutation while the guidance says the draft is not yet publishable.
- browser-verifiziert: draft detail shows
P2 Medium
- Refresh confirmation lacks clear operator feedback.
- browser-verifiziert: confirming
Refresh reviewproduced no visible success toast or obvious page-state transition. - impact: the operator cannot tell whether the action succeeded, retried, or no-op’d.
- browser-verifiziert: confirming
- Create-next-review leaves the calm workspace surface immediately and opens a normal detail surface.
- browser-verifiziert: redirect URL is a normal review detail route with
source_surfaceandtenant_filter_id, notcustomer_workspace=1. - impact: the flow is technically correct, but it weakens the “resolve from workspace” productization story and makes the return path more dependent on detail behavior.
- browser-verifiziert: redirect URL is a normal review detail route with
P3 Polish
- None worth separating from the medium issues in this slice.
Productization Assessment
- Guidance quality: good on the first blocked workspace surface; mixed once the flow moves into mutable review detail.
- Next-action clarity: good before mutation, weak after mutation because successor/draft state disappears from the workspace and
Publish reviewcompetes withRefresh review. - Scope correctness: good; workspace
3, environment scope,tenant_filter_id=38, evidence target, and operation target all stayed in the right tenant/environment. - Customer-safe boundary: good on the workspace and customer-workspace detail surfaces; no false customer-ready claim was shown while blocked.
- UI density: improved on the workspace; draft detail is denser and mixes blocked guidance with broad lifecycle controls.
- Resolve vs Diagnose: partially successful; the flow resolves into a real draft, but the loop back to the workspace does not remain actionable.
Recommended Fix Scope
Must be fixed before closing Spec 351
- Restore a workspace-visible successor/draft action once a released review is superseded.
- Align
Publish reviewvisibility with actual readiness, or clearly demote/gate it when the draft is blocked.
Can be deferred
- Stronger success feedback for
Refresh reviewif the refresh semantics are otherwise correct.
Should not be changed
- Keep the single dominant primary CTA and subordinate supporting actions on the blocked workspace surface.
- Keep the customer-workspace detail CTA suppression behavior.
- Keep the evidence-basis and operation-proof targets as repo-backed supporting actions.
Final Recommendation
- Close Spec 351? no
- Continue polish? no, fix the P1 workflow issues first
- Next suggested spec? none until the Spec 351 operator loop is closed end-to-end