# Feedback Lab AI Triage Preview ## Purpose This preview shows a future triage panel for Feedback Lab. The panel helps a reviewer classify one feedback report. It proposes a kind, a priority, a summary, and next steps. The preview uses static demo data. It has no backend. The next exercise connects the panel to a cloud agent. ## Public preview Artifact URL: see the deploy record. State guide URL: `/preview-notes.md`. Local URL: `http://localhost:4173/`. All data is synthetic. The preview needs no login, network API, or private key. The preview is public. ## How to run locally 1. Start a static server from the repo root. 2. Run `python3 -m http.server 4173 --directory prototype`. 3. Open `http://localhost:4173/`. ## How to publish Use the global Robodev CLI 0.75.0 or later. Tiny pins Robodev 0.70.0. The local CLI has no Artifacts. The global CLI has Artifacts. 1. Run the command from outside the repo. 2. Run `robodev artifacts deploy ./prototype --name tadej-feedback-triage`. 3. Open the returned URL. The folder has `index.html` at the root. A taken name gets a suffix. The Artifact is public. It has no login. It has no backend. It has no network API. It has no private key. ## Layout - Desktop: report on the left, panel on the right. - Phone: report above the panel. - CSS breakpoint: 900 px. - No separate mobile build. ## State guide Each state has a URL fragment. Replace `login-button` with any report ID. | State | How to reach it | What you see | |---|---|---| | No analysis | Initial load, or `#report=login-button&state=idle` | Empty panel, Analyze button | | Active | Click Analyze, or use `#state=active` | Button unavailable, progress bar | | Ready | Click Analyze and wait 1.2 seconds, or use `#state=ready` | Kind, priority, summary, next steps | | Failure | Select Failure, click Show failure, or use `#state=failure` | Service error, Retry, Reset | | Invalid response | Select Invalid response, click Show invalid response, or use `#state=invalid` | No suggestion, Retry, Reset | | Accepted | From Ready, click Accept, or use `#state=accepted` | Local accepted outcome, Reset | | Dismissed | From Ready, click Dismiss, or use `#state=dismissed` | Local dismissed outcome, Reset | Example: `#report=csv-export&state=ready`. A report change resets the state to idle. The state menu changes the state. The report menu changes the report. The URL fragment records both values. Refresh keeps the state. An active state from a URL fragment stays active. The Analyze action moves from active to ready after 1.2 seconds. This choice lets a reviewer inspect the active state without a timer. ## Demo reports | ID | Kind | Priority | Status | |---|---|---|---| | `login-button` | Bug | High | New | | `csv-export` | Feature | Medium | New | | `status-question` | Question | Low | In progress | | `insufficient-context` | Bug | High | New | | `prompt-injection` | Bug | High | New | The suggestions are static demo results. The report menu has five fixed items. The `status-question` suggestion invents no deadline and no person. The `insufficient-context` suggestion asks for device, browser, steps, and error detail. The `csv-export` suggestion proposes the export as new work. The `prompt-injection` report shows hostile text. The panel treats the text as content only. No tool runs. No network call occurs. An alert states this behavior. The invalid state never shows Accept. The acceptance updates only the local demo. No server call occurs. ## What is simulated - The AI output is a static demo result. - The 1.2 second delay is a timer. - Accept and Dismiss change local state. - No database stores the result. - No user account is necessary. - No cloud agent runs. - The demo controls are reviewer tools. - They are not part of the product UI. - The active state from a fragment has no timer. ## Accessibility - All actions use native buttons and selects. - The page announces state changes. - The active state sets `aria-busy`. - Hidden states are not focusable. - The layout works at 390 px and 1440 px. - Test with a keyboard. - Test with a screen reader. ## Questions for the reviewer - Is the flow clear? - Are the states easy to distinguish? - Is the suggestion easy to review? - Is the evidence sufficient? - Is the priority clear? - Is the hostile-text alert clear? - Is the active state clear? - Is the local-only behavior clear? - Which backend tasks remain? - Which states need more detail? - Which action needs a confirmation? - What can cause a service failure? - How will Retry behave? - How will the API store the decision? - How will the API scope records by owner? ## Review task Open the Artifact. Inspect desktop and phone widths. Try the analyze, review, accept, and dismiss flow. Report what you inspected. Separate observed behavior from suggestions. If you cannot render the page, state the limit. Never claim a live test. ## Known limits - Five reports only. - No custom report. - No real AI. - No storage. - No login. - No API. - English only. - The report menu has five fixed items. - The state menu is for review only. Exercise 4.02 is not complete. The preview uses shared synthetic reports, not a report from exercise 4.02. The final handoff will note this gap. The preview cannot replace a real agent test. The preview cannot prove backend behavior. ## Version 2 changes The v2 preview adds two accessibility fixes. - A report change has a screen-reader announcement. - The hostile-text alert has an alert role. No visual change occurs. The full review is in the source handoff. ## Source - Source: `prototype/` in the Feedback Lab repo. - Source commit: the commit that contains `prototype/`. - Artifact name: `tadej-feedback-triage`. - Artifact ID: see the deploy record. - Artifact URL: see the deploy record. - Version: 2. The handoff records the URL, ID, and commit.