<a id="ch-11"></a>

## Chapter 11 — Five hundred and forty days is not a version

<!-- open-cyber-academy:lesson-figures:start ch-11 -->
### Lesson map

Lesson 11. Map, example, EX057.

```mermaid
flowchart TD
  A["firmware_age_days = 540"] --> B{"540 <= 180?"}
  B -->|No| F["FIX  firmware updated within 180 days"]
  F --> V["No version string is stored"]
```

The script compares two integers. It does not name a release.

### Logical drawing

```text
age in the dictionary   540
threshold in the check  180
comparison              540 <= 180 is false
chapter 4 gloss         about eighteen months
version string          absent
```
<!-- open-cyber-academy:lesson-figures:end ch-11 -->

### Learning outcomes

After this chapter, you should be able to:

1. Evaluate the firmware predicate from the two integers.
2. Keep chapter 4's "about eighteen months" as a gloss of 540 days.
3. Refuse a version, a date, or a vulnerability identifier.

### 11.1 Age is a number in a dictionary. A release name would be a different fact.

The firmware check is the comparison `firmware_age_days <= 180`. The dictionary sets the age to 540. Five hundred and forty is greater than one hundred and eighty, so the predicate is false and the line prints `FIX`. That is the whole computation. It does not identify the product, the release, or a particular weakness. Chapter 4 glosses the same integer as "about eighteen months." The gloss is a reading of 540 days, not a calendar date and not a second measurement. A note may say 540 days, or it may repeat chapter 4's gloss. It may not replace 540 with a version string that was never stored.

The narrative says Leo used the router's built-in update after closing, then checked that the tills, the card reader, and the office computer still connected and that a test payment worked. Those are change-control facts. They do not write a new integer into this script, and they do not name the release that arrived. The three-month habit is a future check for updates. A habit on a pinned list is not evidence that a later age was measured. The saved after-checklist is said to carry a date. The date is not printed. Supplying one would falsify the record by filling a blank.

This limit is also why the course does not list vulnerabilities. A known weakness in old firmware is the reason the checklist cares about age. Naming an identifier, a version, or an exploit would invent an incident and would leave the defensive boundary. The decision Ellen can defend from this file is narrower: the before age fails a 180-day rule, the update is described and not re-measured here, and the next check is a habit.

### 11.2 Worked example

| Added text | Status | Decision |
|---|---|---|
| "The dictionary age is 540, and 540 is not within 180." | The comparison | May stay |
| "Chapter 4 calls that about eighteen months." | The gloss | May stay |
| "The release is named in the script." | No such field | Refuse |
| "The update story replaced 540." | The script is unchanged | Refuse |

> **Synthetic case.** No vulnerability identifier is attached to the bakery router.

### Errors and limits

An update story can be operationally real and still leave the embedded age at 540.

### Apply

- **EX057 — What integer do you quote?** The firmware line fails. Chapter 4 says the age is about eighteen months and that an update was run later. Which integer is in the dictionary, and what version do you print? *Rubric:* 3 = 540 stays; the threshold stays 180; the eighteen-month phrase stays a gloss; no version, date, or vulnerability identifier is added; the update stays prose;; 2 = 540 stays and no version is invented;; 1 = the story only;; 0 = none.

<!-- open-cyber-academy:chapter-navigation:start ch-11 -->
### Continue studying — lesson 11 (chapter 11 of 20)

[← Chapter 10](#ch-10) · [Course chapter index](../SUBJECTS.md) · [Chapter 12 →](#ch-12)

Continue to the next authored lesson.
<!-- open-cyber-academy:chapter-navigation:end -->

## Worked answers

<a id="answer-ex057"></a>
**EX057.** The age stays 540 and the threshold stays 180. About eighteen months is the existing gloss. No version, date, or vulnerability identifier is added, and the update stays prose.
