M-12 names ten malicious cases, and lesson 4.4 shows where the service can catch them at four intervention points. A guardrail of the service looks for harm and attacks, though. That no offer is made for eight people (M-01), that no discount is higher than the one from the calculator and that no draft names the mandantId of another customer (M-07) are business limits of the group-travel team; no classifier knows them. The lesson asks: Where do such limits live, and how do you prove with every build that they hold?
Prior knowledge. Hard rules as pure functions before and after the model, the fake that falls for every attack, and the check of numbers without a source: "AI track, lesson T6.4". The quality gate in the build: "AI track, lesson T9.5". Intervention points, precedence rule and the separation of guardrail and authorization: lesson 4.4. Lesson 2.2 (no run below 10 people) and 2.6 (availability holds for 15 minutes) become limits with tests here.
New in this lesson. (1) Four business limits FG-1 to FG-4 (table below). (2) Each of the ten malicious cases from M-12 gets a field grenze: FG-1 to FG-4, or dienst if only the classifier of the service can catch it; dienst cases run in the cloud tests (4.3, 4.4), not in the build. (3) A rule-generated synthetic set with a fixed seed in every build, not the model-generated extension set from 3.2. (4) A violation ends the run at the trip planner with the name of the limit, without repetition (as in 4.4, M-02).
The requirement
All numbers are assumptions of the task.
| No. | Requirement | Type | Measure | Weight | Source |
|---|---|---|---|---|---|
| 4.5-01 | Every business limit stands as a pure function in the code, not only in the prompt or the guardrail. | R | 4 of 4 | Must | F-05 |
| 4.5-02 | Every limit has cases that violate it, and valid cases. | R | 200 each per build | Must | F-06 |
| 4.5-03 | A violation names exactly the violated limit; valid drafts are not blocked. | Q | 0 missed, 0 wrongly | Must | M-02 |
| 4.5-04 | The tests run without an account and without a model call on every pull request. | F | 0 calls | Must | F-06 |
| 4.5-05 | No test case contains real data or a real mandantId. |
R | 0 real data | Must | M-12, R-12 |