# Acceptance Criteria (Spec Kit Baseline)

> For the complete documentation index, see [llms.txt](https://deploy-preview-472--lucky-concha-f3599f.netlify.app/llms.txt).

*   [`AC-001`](https://deploy-preview-472--lucky-concha-f3599f.netlify.app/specs/baseline-uncontainerized-parity/system/acceptance-criteria.md) Given baseline startup scripts are run, when dependencies are available, then all baseline services reach ready state on expected ports.
*   [`AC-002`](https://deploy-preview-472--lucky-concha-f3599f.netlify.app/specs/baseline-uncontainerized-parity/system/acceptance-criteria.md) Given the UI loads, when account list is requested, then account-service returns account data and UI renders options.
*   [`AC-003`](https://deploy-preview-472--lucky-concha-f3599f.netlify.app/specs/baseline-uncontainerized-parity/system/acceptance-criteria.md) Given an account is selected, when blotter bootstrap executes, then position-service returns trades/positions and UI subscribes to account topics.
*   [`AC-004`](https://deploy-preview-472--lucky-concha-f3599f.netlify.app/specs/baseline-uncontainerized-parity/system/acceptance-criteria.md) Given a valid trade ticket, when submitted to trade-service, then ticker/account validation succeeds and a new trade event is published.
*   [`AC-005`](https://deploy-preview-472--lucky-concha-f3599f.netlify.app/specs/baseline-uncontainerized-parity/system/acceptance-criteria.md) Given a new trade event on trade-feed, when trade-processor handles it, then trade state and positions are persisted and account updates are published.
*   [`AC-006`](https://deploy-preview-472--lucky-concha-f3599f.netlify.app/specs/baseline-uncontainerized-parity/system/acceptance-criteria.md) Given account create/update input, when submitted to account-service, then account data is persisted and retrieval reflects the change.
*   [`AC-007`](https://deploy-preview-472--lucky-concha-f3599f.netlify.app/specs/baseline-uncontainerized-parity/system/acceptance-criteria.md) Given account-user mapping input, when username is validated by people-service, then mapping persists; unknown usernames are rejected.
*   [`AC-008`](https://deploy-preview-472--lucky-concha-f3599f.netlify.app/specs/baseline-uncontainerized-parity/system/acceptance-criteria.md) Given browser-origin requests in pre-ingress mode, when UI calls service APIs, then CORS headers allow required requests.
*   [`AC-009`](https://deploy-preview-472--lucky-concha-f3599f.netlify.app/specs/baseline-uncontainerized-parity/system/acceptance-criteria.md) Given generated components are rebuilt from Spec Kit inputs, when smoke tests run, then they pass without hydrating deleted legacy component trees.
*   [`AC-010`](https://deploy-preview-472--lucky-concha-f3599f.netlify.app/specs/baseline-uncontainerized-parity/system/acceptance-criteria.md) Given a websocket client subscribed to account trade and position topics, when a valid trade is submitted via trade-service, then both incremental updates are received without page refresh.
*   [`AC-011`](https://deploy-preview-472--lucky-concha-f3599f.netlify.app/specs/baseline-uncontainerized-parity/system/acceptance-criteria.md) Given an existing position row for a security is already rendered, when a realtime websocket update arrives for that same security, then the existing row is updated in place and no duplicate row is added.
*   [`AC-012`](https://deploy-preview-472--lucky-concha-f3599f.netlify.app/specs/baseline-uncontainerized-parity/system/acceptance-criteria.md) Given `All Accounts` is selected, when blotters load and updates stream, then trades are shown cross-account with account display and positions are merged by security.
*   [`AC-013`](https://deploy-preview-472--lucky-concha-f3599f.netlify.app/specs/baseline-uncontainerized-parity/system/acceptance-criteria.md) Given `All Accounts` mode is active, when user attempts to create a trade ticket, then creation is disabled and guidance is shown.
*   [`AC-014`](https://deploy-preview-472--lucky-concha-f3599f.netlify.app/specs/baseline-uncontainerized-parity/system/acceptance-criteria.md) Given user enters security text in trade ticket, when typeahead suggestions appear, then combined ticker/company labels are used and browser autocomplete is suppressed.
*   [`AC-015`](https://deploy-preview-472--lucky-concha-f3599f.netlify.app/specs/baseline-uncontainerized-parity/system/acceptance-criteria.md) Given account-user mappings are displayed, when people-service lookup succeeds, then full names are shown; on lookup failure, username fallback is shown.
*   [`AC-016`](https://deploy-preview-472--lucky-concha-f3599f.netlify.app/specs/baseline-uncontainerized-parity/system/acceptance-criteria.md) Given viewport constraints vary, when trade and position blotters render, then layout wraps while preserving minimum pane width for readability.
*   [`AC-017`](https://deploy-preview-472--lucky-concha-f3599f.netlify.app/specs/baseline-uncontainerized-parity/system/acceptance-criteria.md) Given canonical dependency targets are updated, when template smoke checks, generated-output checks, and generated-state branch checks run, then all targeted versions match across releases or the validation gates fail before merge/publish.
*   [`AC-018`](https://deploy-preview-472--lucky-concha-f3599f.netlify.app/specs/baseline-uncontainerized-parity/system/acceptance-criteria.md) Given a generated state runtime harness, when lifecycle scripts are validated, then start/stop/readiness scripts exist and build/start separation is explicitly supported (`--build-only` or `--skip-build`).
