要件トレーサビリティ
| 要件 | 受入条件 | Given / When / Then | 実在テストID | 検査 |
|---|---|---|---|---|
| COM-01 | COM-01-AC | Given 一般利用者が390pxと1280pxの画面でログインしている When 資源選択・予約作成・詳細・取消・ログアウトをキーボード操作可能な部品で行う Then 各操作が完了し、ページ全体の横スクロール幅が表示幅以下で、localStorageにtokenを残さない | vitest::Cognitoのログアウト先 [COM-01-AC] playwright::ログインから予約・履歴・取消・ログアウトまで [COM-01-AC] [SLOT-AC01] [SLOT-02-AC] [SLOT-07-AC] [SLOT-AC04] playwright::一般利用者に資源管理を表示しない [COM-01-AC] [COM-04-AC] |
— |
| COM-02 | COM-02-AC | Given 確定済み予約と途中で失敗する作成要求がある When migration・seedの再実行と履歴保存中の障害を起こす Then 確定データは保持され、失敗した要求は予約・履歴・要求キーを残さない | tests/app/apis/reservations/create_reservation/test_router.py::test_rollback_at_event tests/test_db_session.py::test_repeatable_read tests/tools/test_project_migrate.py::test_migrate_and_seed_repeat |
— |
| COM-02 | SLOT-AC16 | Given 確定データと開発用seedがある When 起動・seed・アプリ再起動を繰り返す Then 確定データを保持し、seedの無条件重複や開発データ消去を起こさない | tests/tools/test_project_migrate.py::test_migrate_and_seed_repeat | — |
| COM-03 | COM-03-AC | Given 不正入力・未認証・権限不足・存在しない対象・業務競合の要求がある When 各APIを呼び出す Then それぞれ422・401・403・404・409を返し、入力値を応答へ反射しない | tests/app/apis/reservations/cancel_reservation/test_router.py::test_missing_reservation_returns_404 tests/app/apis/reservations/create_reservation/test_functions.py::test_request_rejects_unknown_fields tests/app/apis/reservations/create_reservation/test_functions.py::test_router_error_response_maps_exceptions tests/app/apis/reservations/create_reservation/test_router.py::test_create_status_codes tests/app/apis/reservations/get_reservation/test_router.py::test_missing_reservation_returns_404 tests/app/apis/reservations/list_reservations/test_functions.py::test_router_error_response tests/app/apis/resources/create_resource/test_functions.py::test_resource_input tests/app/apis/resources/get_resource_schedule/test_functions.py::test_router_error_response tests/app/apis/resources/get_resource_schedule/test_router.py::test_missing_resource_returns_404 tests/app/apis/resources/list_resources/test_functions.py::test_router_error_response tests/app/apis/resources/update_resource/test_router.py::test_missing_resource_returns_404 tests/app/apis/test_deps.py::test_anonymous_and_health tests/test_api_error_responses.py::test_api_error_responses_are_selected_per_operation |
— |
| COM-04 | COM-04-AC | Given 一般利用者のtokenと任意の権限ヘッダーがある When 管理API・他人の予約の詳細と取消を呼び出す Then サーバー側で403とし、UI表示に依存せず拒否する | tests/app/apis/reservations/cancel_reservation/test_router.py::test_privacy_and_cancel tests/app/apis/reservations/cancel_reservation/test_router.py::test_tc001_cancel_reservation_router_matches_unit_test_gen tests/app/apis/reservations/get_reservation/test_functions.py::test_rejection_and_router_error_builders tests/app/apis/reservations/get_reservation/test_router.py::test_owner_and_admin_view_history tests/app/apis/reservations/get_reservation/test_router.py::test_tc001_get_reservation_router_matches_unit_test_gen tests/app/apis/resources/create_resource/test_functions.py::test_only_admin_manages_resources tests/app/apis/resources/create_resource/test_router.py::test_user_cannot_create_resource tests/app/apis/resources/create_resource/test_router.py::test_tc001_create_resource_router_matches_unit_test_gen tests/app/apis/resources/update_resource/test_router.py::test_tc001_update_resource_router_matches_unit_test_gen tests/app/apis/test_deps.py::test_anonymous_and_health playwright::一般利用者に資源管理を表示しない [COM-01-AC] [COM-04-AC] |
— |
| COM-05 | COM-05-AC | Given Git checkoutとDocker Composeだけがある When 起動・seed・全検証のCompose commandを繰り返す Then 依存の準備から検証まで完了し、seedは固定IDで重複しない | tests/tools/test_project_migrate.py::test_migrate_and_seed_repeat | — |
| COM-06 | SLOT-AC11 | Given 資源または予約が他の操作で先に更新されている When 古い版で資源編集・予約取消を送る Then 409を返し、先に確定した値と履歴を失わない | tests/app/apis/reservations/cancel_reservation/test_functions.py::test_get_reservation_and_predicates tests/app/apis/reservations/cancel_reservation/test_functions.py::test_rejection_builders tests/app/apis/reservations/cancel_reservation/test_router.py::test_cancel_boundaries tests/app/apis/reservations/cancel_reservation/test_router.py::test_tc002_cancel_reservation_router_matches_unit_test_gen tests/app/apis/resources/update_resource/test_functions.py::test_permission_lock_version_and_future tests/app/apis/resources/update_resource/test_functions.py::test_update_resource_and_builders tests/app/apis/resources/update_resource/test_router.py::test_versions_and_inactive tests/app/apis/resources/update_resource/test_router.py::test_update_resource_router_returns_sample_shaped_response_with_db tests/app/apis/resources/update_resource/test_router.py::test_tc002_update_resource_router_matches_unit_test_gen |
— |
| COM-07 | COM-07-AC | Given 予約目的とBearer tokenを含む要求がある When APIを呼び出す Then 要求ID・operation・status・所要時間を構造化ログに残し、目的とtokenを記録しない | tests/app/apis/reservations/cancel_reservation/test_router.py::test_cancel_reservation_sample_request_emits_router_error_log_to_stdio tests/app/apis/reservations/create_reservation/test_router.py::test_create_reservation_sample_request_emits_router_error_log_to_stdio tests/app/apis/reservations/get_reservation/test_router.py::test_get_reservation_sample_request_emits_router_error_log_to_stdio tests/app/apis/reservations/list_reservations/test_router.py::test_list_reservations_sample_request_emits_router_error_log_to_stdio tests/app/apis/resources/create_resource/test_router.py::test_create_resource_sample_request_emits_router_error_log_to_stdio tests/app/apis/resources/get_resource_schedule/test_router.py::test_get_resource_schedule_sample_request_emits_router_error_log_to_stdio tests/app/apis/resources/list_resources/test_router.py::test_list_resources_sample_request_emits_router_error_log_to_stdio tests/app/apis/resources/update_resource/test_router.py::test_update_resource_sample_request_emits_router_error_log_to_stdio tests/test_operational_logging.py::test_request_log_redacts |
— |
| COM-08 | COM-08-AC | Given 通信失敗・401・403・404・409・422・503と業務コードがある When 画面の案内文を求める Then 状態ごとに異なり次の操作を判断できる日本語の案内を返す | vitest::日本時間の入力と次の操作案内 [COM-08-AC] [RULE-04-AC] | — |
| SLOT-01 | SLOT-01-AC | Given 管理者と一般利用者がいる When 資源の登録・編集・無効化と一覧取得を行う Then 管理者だけが変更でき、一覧は名前とIDの固定順でページングされる | tests/app/apis/resources/create_resource/test_functions.py::test_only_admin_manages_resources tests/app/apis/resources/create_resource/test_functions.py::test_save_resource_and_builders tests/app/apis/resources/create_resource/test_router.py::test_user_cannot_create_resource tests/app/apis/resources/create_resource/test_router.py::test_admin_creates_active_resource tests/app/apis/resources/create_resource/test_router.py::test_create_resource_router_returns_sample_shaped_response_with_db tests/app/apis/resources/create_resource/test_router.py::test_tc001_create_resource_router_matches_unit_test_gen tests/app/apis/resources/create_resource/test_router.py::test_tc002_create_resource_router_matches_unit_test_gen tests/app/apis/resources/list_resources/test_functions.py::test_resources_are_paged_by_name_and_id tests/app/apis/resources/list_resources/test_router.py::test_resource_paging_order tests/app/apis/resources/list_resources/test_router.py::test_list_resources_router_returns_sample_shaped_response_with_db tests/app/apis/resources/list_resources/test_router.py::test_tc001_list_resources_router_matches_unit_test_gen tests/app/apis/resources/update_resource/test_functions.py::test_update_resource_and_builders tests/app/apis/resources/update_resource/test_router.py::test_update_resource_router_returns_sample_shaped_response_with_db tests/app/apis/resources/update_resource/test_router.py::test_tc001_update_resource_router_matches_unit_test_gen tests/app/apis/resources/update_resource/test_router.py::test_tc004_update_resource_router_matches_unit_test_gen |
— |
| SLOT-01 | SLOT-AC05 | Given 無効資源と将来予約のある有効資源がある When 無効資源への予約と、将来予約のある資源の無効化を行う Then 両方409で拒否し、データは変化しない | tests/app/apis/reservations/create_reservation/test_functions.py::test_rejection_builders_return_conflicts tests/app/apis/reservations/create_reservation/test_router.py::test_tc003_create_reservation_router_matches_unit_test_gen tests/app/apis/resources/update_resource/test_functions.py::test_permission_lock_version_and_future tests/app/apis/resources/update_resource/test_router.py::test_versions_and_inactive tests/app/apis/resources/update_resource/test_router.py::test_future_prevents_disable tests/app/apis/resources/update_resource/test_router.py::test_tc003_update_resource_router_matches_unit_test_gen |
— |
| SLOT-02 | SLOT-02-AC | Given 資源に確定予約と取消済み予約がある When 一般利用者が資源と日付で予約表を取得する Then 確定済みの時間帯と「予約済み」だけを返し、他人の目的と識別情報を返さない | tests/app/apis/reservations/cancel_reservation/test_router.py::test_privacy_and_cancel tests/app/apis/resources/get_resource_schedule/test_functions.py::test_schedule_hides_other_details tests/app/apis/resources/get_resource_schedule/test_router.py::test_schedule_hides_other_details tests/app/apis/resources/get_resource_schedule/test_router.py::test_get_resource_schedule_router_returns_sample_shaped_response_with_db tests/app/apis/resources/get_resource_schedule/test_router.py::test_tc001_get_resource_schedule_router_matches_unit_test_gen playwright::ログインから予約・履歴・取消・ログアウトまで [COM-01-AC] [SLOT-AC01] [SLOT-02-AC] [SLOT-07-AC] [SLOT-AC04] |
— |
| SLOT-03 | SLOT-AC01 | Given 空き資源がある When 翌日10:00〜11:00を予約する Then 1件確定し、予約表と自分の一覧へ反映する | tests/app/apis/reservations/create_reservation/test_router.py::test_create_adjacent_overlap tests/app/apis/reservations/create_reservation/test_router.py::test_create_reservation_router_returns_sample_shaped_response_with_db tests/app/apis/reservations/create_reservation/test_router.py::test_tc005_create_reservation_router_matches_unit_test_gen playwright::ログインから予約・履歴・取消・ログアウトまで [COM-01-AC] [SLOT-AC01] [SLOT-02-AC] [SLOT-07-AC] [SLOT-AC04] |
— |
| SLOT-03 | SLOT-AC06 | Given 過去・現在と同時刻・0分・4時間超・30日超・15分未満の刻み・日跨ぎの入力がある When 予約時刻を検証する Then 入力エラーとし、15分・4時間・30日以内の境界は受け付ける | tests/app/apis/reservations/create_reservation/test_functions.py::test_reject_invalid_time tests/app/apis/reservations/create_reservation/test_functions.py::test_boundaries tests/app/apis/reservations/create_reservation/test_router.py::test_rule_violation_is_422 |
— |
| SLOT-04 | SLOT-AC02 | Given 既存の10:00〜11:00予約がある When 10:30〜11:30と11:00〜12:00を予約する Then 前者409、後者成功 | tests/app/apis/reservations/create_reservation/test_functions.py::test_rejection_builders_return_conflicts tests/app/apis/reservations/create_reservation/test_router.py::test_create_adjacent_overlap tests/app/apis/reservations/create_reservation/test_router.py::test_tc004_create_reservation_router_matches_unit_test_gen tests/test_db_session.py::test_business_errors_are_not_retried |
— |
| SLOT-04 | SLOT-AC03 | Given 空き枠に20人がいる When 直列化せず同時に予約する Then 1件成功・19件409で重複0件 | tests/app/apis/reservations/create_reservation/test_router.py::test_twenty_concurrent tests/test_db_session.py::test_transaction_retries_conflicts |
— |
| SLOT-04 | SLOT-AC10 | Given 有効資源がある When 予約作成と資源無効化を同時実行する Then 無効化と将来予約が両方確定する結果は0件 | tests/app/apis/reservations/create_reservation/test_functions.py::test_update_resource_control_version_locks_or_404 tests/app/apis/resources/update_resource/test_router.py::test_create_vs_disable |
— |
| SLOT-05 | SLOT-AC04 | Given 利用者Aの開始前予約がある When B・A・管理者が取消を試みる Then Bは403、本人と管理者は取消でき、取消履歴が追加される | tests/app/apis/reservations/cancel_reservation/test_functions.py::test_get_reservation_and_predicates tests/app/apis/reservations/cancel_reservation/test_functions.py::test_rejection_builders tests/app/apis/reservations/cancel_reservation/test_router.py::test_privacy_and_cancel tests/app/apis/reservations/cancel_reservation/test_router.py::test_admin_cancels_other_before_start tests/app/apis/reservations/cancel_reservation/test_router.py::test_cancel_reservation_router_returns_sample_shaped_response_with_db tests/app/apis/reservations/cancel_reservation/test_router.py::test_tc001_cancel_reservation_router_matches_unit_test_gen tests/app/apis/reservations/cancel_reservation/test_router.py::test_tc005_cancel_reservation_router_matches_unit_test_gen playwright::ログインから予約・履歴・取消・ログアウトまで [COM-01-AC] [SLOT-AC01] [SLOT-02-AC] [SLOT-07-AC] [SLOT-AC04] |
— |
| SLOT-05 | SLOT-AC13 | Given 開始時刻ちょうどの予約と取消済み予約がある When 取消する Then 409で拒否し、履歴を増やさない | tests/app/apis/reservations/cancel_reservation/test_functions.py::test_get_reservation_and_predicates tests/app/apis/reservations/cancel_reservation/test_functions.py::test_rejection_builders tests/app/apis/reservations/cancel_reservation/test_router.py::test_cancel_boundaries tests/app/apis/reservations/cancel_reservation/test_router.py::test_tc003_cancel_reservation_router_matches_unit_test_gen tests/app/apis/reservations/cancel_reservation/test_router.py::test_tc004_cancel_reservation_router_matches_unit_test_gen |
— |
| SLOT-06 | SLOT-AC08 | Given 自分と他人の予約が複数日・複数状態にある When 日付・状態で絞込み、他人の詳細を取得する Then 自分の対象だけを返し、他人の目的・履歴は403で漏れない | tests/app/apis/reservations/cancel_reservation/test_router.py::test_privacy_and_cancel tests/app/apis/reservations/list_reservations/test_functions.py::test_own_reservations_are_filtered_and_paged tests/app/apis/reservations/list_reservations/test_router.py::test_list_filters_only_own tests/app/apis/reservations/list_reservations/test_router.py::test_list_reservations_router_returns_sample_shaped_response_with_db tests/app/apis/reservations/list_reservations/test_router.py::test_tc001_list_reservations_router_matches_unit_test_gen |
— |
| SLOT-07 | SLOT-07-AC | Given 作成後に取消した予約がある When 本人・管理者・他人が詳細画面で履歴を取得する Then 本人と管理者は作成・取消の順の履歴を閲覧でき、他人は403 | tests/app/apis/reservations/cancel_reservation/test_router.py::test_admin_cancels_other_before_start tests/app/apis/reservations/get_reservation/test_functions.py::test_get_reservation_with_events tests/app/apis/reservations/get_reservation/test_router.py::test_owner_and_admin_view_history tests/app/apis/reservations/get_reservation/test_router.py::test_get_reservation_router_returns_sample_shaped_response_with_db tests/app/apis/reservations/get_reservation/test_router.py::test_tc001_get_reservation_router_matches_unit_test_gen tests/app/apis/reservations/get_reservation/test_router.py::test_tc002_get_reservation_router_matches_unit_test_gen playwright::ログインから予約・履歴・取消・ログアウトまで [COM-01-AC] [SLOT-AC01] [SLOT-02-AC] [SLOT-07-AC] [SLOT-AC04] |
— |
| SLOT-08 | SLOT-AC07 | Given 成功応答を失った作成要求がある When 同じキーで再送(同時再送を含む)する Then 元の予約IDと応答を返し、予約・作成履歴は各1件 | tests/app/apis/reservations/create_reservation/test_router.py::test_replay_before_validation tests/app/apis/reservations/create_reservation/test_router.py::test_same_key_concurrent tests/app/apis/reservations/create_reservation/test_router.py::test_tc002_create_reservation_router_matches_unit_test_gen tests/test_db_session.py::test_transaction_retries_conflicts |
— |
| SLOT-08 | SLOT-AC09 | Given 同じ要求キーの成功記録がある When 異なる入力を送る Then 409で元の予約を変更しない | tests/app/apis/reservations/create_reservation/test_functions.py::test_normalized_input tests/app/apis/reservations/create_reservation/test_functions.py::test_rejection_builders_return_conflicts tests/app/apis/reservations/create_reservation/test_router.py::test_replay_before_validation tests/app/apis/reservations/create_reservation/test_router.py::test_tc001_create_reservation_router_matches_unit_test_gen |
— |
| SLOT-08 | SLOT-AC12 | Given 予約保存後の履歴保存で障害が起きる When 作成し、その後同じキーで再送する Then 部分保存を残さず、再送で1件だけ作成する | tests/app/apis/reservations/create_reservation/test_router.py::test_rollback_at_event tests/test_db_session.py::test_transaction_limits |
— |
| SLOT-08 | SLOT-AC15 | Given 作成済みキーの経過が24時間前後で、予約は取消・開始済みである When 同じキーで再送する Then 有効期間内は元の作成結果、期限後は新規要求の規則に従う | tests/app/apis/reservations/create_reservation/test_functions.py::test_expired_record_is_not_replayed tests/app/apis/reservations/create_reservation/test_functions.py::test_get_idempotency_record_marks_expiry tests/app/apis/reservations/create_reservation/test_router.py::test_replay_before_validation tests/app/apis/reservations/create_reservation/test_router.py::test_replay_after_start |
— |
| TECH-STACK | TECH-STACK-AC | Given Astro画面・FastAPI・PostgreSQLを起動している When 静的buildとOpenAPI型生成を検査する Then 静的成果物がbuildでき、フロント型がOpenAPIとdriftしない | — | astro, frontend-build, openapi-types |
| TECH-DB | TECH-DB-AC | Given ローカルPostgreSQLの検証DBがある When 接続の分離レベルと共通SQLの型を検査する Then Repeatable Readで接続し、SQL正本の束縛引数と結果型が一致する | tests/test_db_session.py::test_dsql_connection_uses_official_connector tests/test_db_session.py::test_repeatable_read |
— |
| TECH-AUTH | SLOT-AC14 | Given 不正署名・期限切れ・異なるissuer/client・role改ざん・ID tokenがある When 業務APIを呼び出す Then 401/403で拒否し、DBは変化しない | tests/app/apis/reservations/create_reservation/test_router.py::test_invalid_token_leaves_database tests/app/apis/test_deps.py::test_bad_claims tests/app/apis/test_deps.py::test_bad_signature tests/integrations/test_identity_provider.py::test_cognito_access_and_id tests/integrations/test_identity_provider.py::test_jwks_client_is_bounded tests/integrations/test_identity_provider.py::test_fake_verifier_rejects_unknown_token |
— |
| TECH-LAMBDA | TECH-LAMBDA-AC | Given Compose内でLinux向けに作った配布ZIPがある When 隔離pathからimportし、API Gatewayイベントを変換する Then handlerを読み込み、healthは200・未認証の業務APIは401 | tests/test_lambda_handler.py::test_gateway_event tests/test_lambda_handler.py::test_distribution_zip |
— |
| TECH-INFRA | TECH-INFRA-AC | Given AWS認証情報のない環境で環境contextを指定する When CDKをsynthしassertionとcdk-nagで検査する Then 非公開S3+OAC、JWT保護route、限定IAM、ログ保持、削除保護、環境別のCORSとcallbackを満たし、常設サーバーを持たない | tests/infra/test_stack.py::test_serverless_and_authorization tests/infra/test_stack.py::test_routes_are_protected tests/infra/test_stack.py::test_origin_consistency tests/infra/test_stack.py::test_least_privilege_and_private_bucket tests/infra/test_stack.py::test_environment_settings tests/infra/test_stack.py::test_unknown_environment_rejected |
— |
| TECH-COMPOSE | TECH-COMPOSE-AC | Given ホストにGitとDocker Composeだけがある When verifyを1コマンドで実行する Then 依存serviceの準備から結果収集とポータル生成まで行い、失敗時は非0で終了する | — | package, backend, e2e, portal-build |
| TECH-DESIGN | TECH-DESIGN-AC | Given 実装source・SQL・CDKがある When 設計を2回クリーン生成し、既存生成物と比較する Then byte一致し、欠落・変更・余剰・未対応構文・要件traceの欠落を非0で報告する | tests/tools/test_project_design.py::test_data_capability_is_deterministic tests/tools/test_project_design.py::test_drift_reports_manual_edit_and_stale_file tests/tools/test_project_design.py::test_write_owned_root_replaces_only_owned_contents tests/tools/test_project_design.py::test_repeat_sections_reads_profile_grammar tests/tools/test_project_design.py::test_repeat_sections_rejects_unsupported_structure tests/tools/test_project_design.py::test_added_route_without_contract_is_rejected tests/tools/test_project_design.py::test_crud_rows_split_read_and_write_evidence tests/tools/test_project_design.py::test_crud_model_matches_common_projection tests/tools/test_project_design.py::test_sql_target_change_changes_crud_projection tests/tools/test_project_design.py::test_database_model_marks_logical_references tests/tools/test_project_design.py::test_frontend_without_menu_is_unsupported tests/tools/test_project_design.py::test_trace_rejects_missing_and_unknown_tests tests/tools/test_project_design.py::test_verify_checks_cover_requirement_evidence tests/tools/test_project_evidence.py::test_design_search_covers_lazunex_documents |
— |
| TECH-DESIGN | TECH-CRUD-AC | Given APIのOpenAPI summaryと保存先アクセスの実装がある When CRUD図を生成する Then 既存正本から取得したAPI和名を行、保存先を列、CRUD文字列をセルとするマトリクスを決定的に生成し、アクセスなしは空欄にする | tests/tools/test_project_design.py::test_crud_diagram_uses_openapi_summaries_and_storage_columns tests/tools/test_project_design.py::test_crud_diagram_tracks_summary_changes tests/tools/test_project_design.py::test_crud_diagram_rejects_missing_summary tests/tools/test_project_design.py::test_crud_diagram_orders_axes_and_cells_and_preserves_no_access tests/tools/test_project_design.py::test_crud_capability_is_deterministic tests/tools/test_project_design.py::test_crud_contract_rejects_rendering_drift tests/tools/test_project_design.py::test_crud_contract_rejects_stale_summary_and_invalid_model |
— |
| TECH-PORTAL | TECH-PORTAL-AC | Given 同一revision・runの検査結果と生成設計がある When ポータルをbuildしブラウザで検証する Then 階層・検索・図の拡大・DB探索・深いリンク・390px表示が動作する | playwright::CRUD図でAPI和名と保存先のマトリクスを読む [TECH-PORTAL-AC] playwright::階層検索から設計図とDB探索へ移動する [TECH-PORTAL-AC] |
— |
| TECH-PERF | TECH-PERF-AC | Given 資源100・利用者200・予約10万件のデータがある When 20並列で参照80%・作成取消20%の負荷を測定する Then API別のp50/p95/p99・throughput・エラー率・整合性違反を同一runの証跡に残す | — | performance |
| TECH-QUALITY | TECH-QUALITY-AC | Given 失敗・skip・未実行・flakyを含む結果がある When 結果を共通形式へ変換する Then 非成功状態を成功へ変えず、collector外の結果と別runの混入を拒否する | tests/tools/test_project_evidence.py::test_result_identity_and_unexecuted tests/tools/test_project_evidence.py::test_nonpassing_states_preserved tests/tools/test_project_evidence.py::test_result_outside_collector_is_rejected tests/tools/test_project_evidence.py::test_foreign_run_rejected tests/tools/test_project_evidence.py::test_backend_coverage_below_goal_fails |
— |
| TECH-PRIVACY | TECH-PRIVACY-AC | Given 公開サイトにallowlist外のfileやsymlinkがある When 公開集合を検査する Then 公開を拒否し、生ログ・token・DB dumpを含めない | tests/tools/test_project_evidence.py::test_publication_allowlist tests/tools/test_project_evidence.py::test_symlink_not_published tests/tools/test_project_evidence.py::test_allowed_site_records_provenance |
— |
| RULE-01 | RULE-01-AC | Given 10:00〜11:00の予約がある When 11:00〜12:00を予約する Then 半開区間として重複せず成功する | tests/app/apis/reservations/create_reservation/test_functions.py::test_has_overlapping_reservation_uses_half_open_interval tests/app/apis/reservations/create_reservation/test_router.py::test_create_adjacent_overlap |
— |
| RULE-02 | RULE-02-AC | Given 15分刻みでない、15分未満、4時間超の入力がある When 時刻を検証する Then 422とし、15分と4時間ちょうどは受け付ける | tests/app/apis/reservations/create_reservation/test_functions.py::test_reject_invalid_time tests/app/apis/reservations/create_reservation/test_functions.py::test_boundaries tests/app/apis/reservations/create_reservation/test_router.py::test_rule_violation_is_422 |
— |
| RULE-03 | RULE-03-AC | Given 過去・30日超・日本時間の日跨ぎの入力がある When 時刻を検証する Then 422とし、翌日00:00終了も拒否する | tests/app/apis/reservations/create_reservation/test_functions.py::test_reject_invalid_time tests/app/apis/reservations/create_reservation/test_functions.py::test_boundaries |
— |
| RULE-04 | RULE-04-AC | Given 公開APIとClock依存がある When OpenAPIと日本時間の変換を検査する Then 現在時刻を上書きする入力はなく、日本時間の日付境界で変換する | tests/app/apis/reservations/create_reservation/test_functions.py::test_request_rejects_unknown_fields tests/test_api_error_responses.py::test_public_contract_has_no_clock_or_direct_edit vitest::日本時間の入力と次の操作案内 [COM-08-AC] [RULE-04-AC] |
— |
| RULE-05 | RULE-05-AC | Given 確定予約がある When 公開APIを検査して取消する Then 予約日時の直接編集APIはなく、状態はconfirmedからcancelledへだけ遷移する | tests/test_api_error_responses.py::test_public_contract_has_no_clock_or_direct_edit | — |
| RULE-06 | RULE-06-AC | Given 確定予約がある When 取消と同じ枠の再予約を行う Then 取消済みは重複判定から除かれ、確定予約は最大1件 | tests/app/apis/reservations/cancel_reservation/test_functions.py::test_cancel_updates_and_appends_event tests/app/apis/reservations/cancel_reservation/test_router.py::test_privacy_and_cancel tests/app/apis/reservations/cancel_reservation/test_router.py::test_cancel_and_rebook_concurrent |
— |
| RULE-07 | RULE-07-AC | Given 開始済みの予約がある資源 When 資源を無効化し将来予約を一覧する Then 無効化でき既存記録を保持し、将来予約はconfirmedかつ開始前だけ | tests/app/apis/reservations/list_reservations/test_router.py::test_list_filters_only_own tests/app/apis/resources/update_resource/test_router.py::test_disable_after_start_keeps_record |
— |
| RULE-08 | RULE-08-AC | Given 将来予約がある資源、または予約作成と無効化の同時実行 When 無効化する Then 無効資源に将来予約を残さない | tests/app/apis/resources/update_resource/test_functions.py::test_permission_lock_version_and_future tests/app/apis/resources/update_resource/test_router.py::test_future_prevents_disable tests/app/apis/resources/update_resource/test_router.py::test_create_vs_disable tests/app/apis/resources/update_resource/test_router.py::test_tc003_update_resource_router_matches_unit_test_gen |
— |
| RULE-09 | RULE-09-AC | Given 他人の予約がある When 一般利用者が予約表と詳細を取得し、管理者が詳細を取得する Then 一般利用者へ目的・識別情報・履歴を返さず、管理者は閲覧できる | tests/app/apis/reservations/cancel_reservation/test_router.py::test_privacy_and_cancel tests/app/apis/reservations/cancel_reservation/test_router.py::test_admin_cancels_other_before_start tests/app/apis/reservations/get_reservation/test_functions.py::test_get_reservation_with_events tests/app/apis/reservations/get_reservation/test_router.py::test_owner_and_admin_view_history tests/app/apis/reservations/get_reservation/test_router.py::test_tc002_get_reservation_router_matches_unit_test_gen tests/app/apis/resources/get_resource_schedule/test_functions.py::test_schedule_hides_other_details tests/app/apis/resources/get_resource_schedule/test_router.py::test_schedule_hides_other_details tests/app/apis/resources/get_resource_schedule/test_router.py::test_get_resource_schedule_router_returns_sample_shaped_response_with_db |
— |
| RULE-10 | RULE-10-AC | Given 同じ利用者の要求キーがある When 同じ入力・異なる入力・24時間後に再送する Then 元の成功応答・409・新規要求として扱う | tests/app/apis/reservations/create_reservation/test_functions.py::test_expired_record_is_not_replayed tests/app/apis/reservations/create_reservation/test_router.py::test_replay_before_validation tests/app/apis/reservations/create_reservation/test_router.py::test_tc001_create_reservation_router_matches_unit_test_gen tests/app/apis/reservations/create_reservation/test_router.py::test_tc002_create_reservation_router_matches_unit_test_gen |
— |
| RULE-11 | RULE-11-AC | Given 作成済み予約が取消または開始済みである When 24時間以内に同じキーで再送する Then 時刻検証より先に照合し元の作成結果を返す | tests/app/apis/reservations/create_reservation/test_router.py::test_replay_after_start | — |
| RULE-12 | RULE-12-AC | Given 作成または取消の途中で障害が起きる When 操作を確定する Then 予約・履歴・要求キーを同一transactionで確定またはrollbackする | tests/app/apis/reservations/cancel_reservation/test_functions.py::test_cancel_updates_and_appends_event tests/app/apis/reservations/cancel_reservation/test_router.py::test_cancel_reservation_router_returns_sample_shaped_response_with_db tests/app/apis/reservations/create_reservation/test_functions.py::test_save_reservation_owner_event_and_record tests/app/apis/reservations/create_reservation/test_router.py::test_rollback_at_event tests/app/apis/reservations/create_reservation/test_router.py::test_create_reservation_router_returns_sample_shaped_response_with_db |
— |
| RULE-13 | RULE-13-AC | Given 取消済み予約がある When 取消する Then 409で履歴を追加しない | tests/app/apis/reservations/cancel_reservation/test_router.py::test_privacy_and_cancel tests/app/apis/reservations/cancel_reservation/test_router.py::test_cancel_boundaries tests/app/apis/reservations/cancel_reservation/test_router.py::test_tc003_cancel_reservation_router_matches_unit_test_gen |
— |
| RULE-14 | RULE-14-AC | Given 境界長の名前・説明・目的と複数ページの一覧がある When 入力と一覧を検査する Then 長さ制約を守り、固定順とID順でページングする | tests/app/apis/reservations/list_reservations/test_functions.py::test_own_reservations_are_filtered_and_paged tests/app/apis/reservations/list_reservations/test_router.py::test_reservation_paging_order tests/app/apis/resources/create_resource/test_functions.py::test_resource_input tests/app/apis/resources/create_resource/test_functions.py::test_description_limit tests/app/apis/resources/create_resource/test_router.py::test_admin_creates_active_resource tests/app/apis/resources/list_resources/test_functions.py::test_resources_are_paged_by_name_and_id tests/app/apis/resources/list_resources/test_router.py::test_resource_paging_order |
— |