Skip to content

Commit ad6fe25

Browse files
committed
figure: update
1 parent 02d685d commit ad6fe25

54 files changed

Lines changed: 134 additions & 580 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
144 KB
Loading

evidence/v0.3.2/EVIDENCE_INDEX.md

Lines changed: 40 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,59 @@
11
# Evidence Index — v0.3.2
22

3-
This index maps each formal manual test case (TR-01…RA-04) to curated evidence triplets (**state JSON + trace TXT + preview PNG**) captured from the freeze baseline **`v0.3.2`**.
3+
This file maps the formal test cases executed for the freeze baseline `v0.3.2` to their evidence folders.
4+
Each evidence folder contains one or more raw evidence triplets:
5+
6+
- `*_state.json`
7+
- `*_trace.txt`
8+
- `*_preview.png`
9+
10+
These artefacts support the report claims made in Chapters 5 and 6.
411

512
---
613

7-
## Conventions
14+
## Evidence layout
815

9-
- Evidence root: `evidence/v0.3.2/`
10-
- Each test case has a folder with a `raw/` subfolder containing exported triplets.
11-
- Paths in the table are **relative to** `evidence/v0.3.2/`.
12-
- Each snapshot is a triplet sharing the same base name:
13-
- `_state.json`, `_trace.txt`, `_preview.png`
16+
- `evidence/v0.3.2/TR-01_tokenring_mutex/raw/`
17+
- `evidence/v0.3.2/TR-02_token_loss_regen/raw/`
18+
- `evidence/v0.3.2/TR-03_crash_recover/raw/`
19+
- `evidence/v0.3.2/RA-01_basic/raw/`
20+
- `evidence/v0.3.2/RA-02_tiebreak_p2_p10/raw/`
21+
- `evidence/v0.3.2/RA-03_drop_inflight_stall/raw/`
22+
- `evidence/v0.3.2/RA-04_drop_next_send_stall/raw/`
1423

1524
---
1625

17-
## Index table
26+
## Manual evidence cases
1827

19-
| Case ID | Algorithm | Mode | Setup / Scenario | Fault injected | Expected (pass) | Observed (key trace lines) | Evidence paths (state / trace / png) | Notes |
20-
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
21-
| RA-01 | RA | interactive | 4 processes; basic REQUEST/REPLY; enter + release | none | REQUEST broadcast; enter CS only after N−1 REPLY received; Safety OK. | **A** `P1 enters the critical section (all REPLY received).`<br>**B** `P1 enters the critical section (all REPLY received).`; `P1 releases the critical section.` | **A** state: `RA-01_basic/raw/mutex_2026-02-01T22-13-19-037Z_RA_interactive_01_state.json`<br>trace: `RA-01_basic/raw/mutex_2026-02-01T22-13-19-037Z_RA_interactive_01_trace.txt`<br>png: `RA-01_basic/raw/mutex_2026-02-01T22-13-19-037Z_RA_interactive_01_preview.png`<br><br>**B** state: `RA-01_basic/raw/mutex_2026-02-01T22-13-19-037Z_RA_interactive_02_state.json`<br>trace: `RA-01_basic/raw/mutex_2026-02-01T22-13-19-037Z_RA_interactive_02_trace.txt`<br>png: `RA-01_basic/raw/mutex_2026-02-01T22-13-19-037Z_RA_interactive_02_preview.png` | RA baseline correctness. |
22-
| RA-02 | RA | script | Tie-break scenario: P2 vs P10 at same timestamp | none | With equal timestamps, numeric PID tie-break; P2 enters before P10; Safety OK. | **A** `P2 enters the critical section (all REPLY received).`; `P2 releases the critical section.`; `P10 enters the critical section (all REPLY received).` | **A** state: `RA-02_tiebreak_p2_p10/raw/mutex_2026-02-01T22-16-22-140Z_RA_script_01_state.json`<br>trace: `RA-02_tiebreak_p2_p10/raw/mutex_2026-02-01T22-16-22-140Z_RA_script_01_trace.txt`<br>png: `RA-02_tiebreak_p2_p10/raw/mutex_2026-02-01T22-16-22-140Z_RA_script_01_preview.png` | Key teaching point: deterministic tie-break. |
23-
| RA-03 | RA | interactive | Drop next in-flight message (drop queue head) to induce stall | drop next in-flight msg | After drop: may stall (liveness violated); queue can become empty; trace explains missing REPLY; Safety OK. | **A** `! Fault injected: dropped REQUEST #3 P1 -> P4.`; `! Stalled: P1 is waiting for REPLY from P4.` | **A** state: `RA-03_drop_inflight_stall/raw/mutex_2026-02-01T22-18-02-161Z_RA_interactive_01_state.json`<br>trace: `RA-03_drop_inflight_stall/raw/mutex_2026-02-01T22-18-02-161Z_RA_interactive_01_trace.txt`<br>png: `RA-03_drop_inflight_stall/raw/mutex_2026-02-01T22-18-02-161Z_RA_interactive_01_preview.png` | Core teaching evidence: fault → missing reply → stall (safety vs liveness). |
24-
| RA-04 | RA | interactive | Arm drop-next-send (send-side fault) to induce stall | drop-next-send | Next outgoing message is dropped; system may stall; trace explains missing REPLY; Safety OK. | **A** `! Fault armed: next outgoing message will be dropped.`; `! Fault injected: dropped outgoing REQUEST #1 P1 -> P2.`; `! Stalled: P1 is waiting for REPLY from P2.` | **A** state: `RA-04_drop_next_send_stall/raw/mutex_2026-02-01T22-19-23-377Z_RA_interactive_01_state.json`<br>trace: `RA-04_drop_next_send_stall/raw/mutex_2026-02-01T22-19-23-377Z_RA_interactive_01_trace.txt`<br>png: `RA-04_drop_next_send_stall/raw/mutex_2026-02-01T22-19-23-377Z_RA_interactive_01_preview.png` | Send-side fault injection complements RA-03. |
25-
| TR-01 | TokenRing | interactive | 4 processes; mutual exclusion (P1 in CS while P2 requests) | none | At most one process in CS at any time; Safety OK. | **C** `P1 releases the critical section.`; `P2 enters the critical section (holds token).` | **A** state: `TR-01_tokenring_mutex/raw/mutex_2026-02-01T21-59-14-962Z_TokenRing_interactive_01_state.json`<br>trace: `TR-01_tokenring_mutex/raw/mutex_2026-02-01T21-59-14-962Z_TokenRing_interactive_01_trace.txt`<br>png: `TR-01_tokenring_mutex/raw/mutex_2026-02-01T21-59-14-962Z_TokenRing_interactive_01_preview.png`<br><br>**B** state: `TR-01_tokenring_mutex/raw/mutex_2026-02-01T21-59-14-962Z_TokenRing_interactive_02_state.json`<br>trace: `TR-01_tokenring_mutex/raw/mutex_2026-02-01T21-59-14-962Z_TokenRing_interactive_02_trace.txt`<br>png: `TR-01_tokenring_mutex/raw/mutex_2026-02-01T21-59-14-962Z_TokenRing_interactive_02_preview.png`<br><br>**C** state: `TR-01_tokenring_mutex/raw/mutex_2026-02-01T21-59-14-962Z_TokenRing_interactive_03_state.json`<br>trace: `TR-01_tokenring_mutex/raw/mutex_2026-02-01T21-59-14-962Z_TokenRing_interactive_03_trace.txt`<br>png: `TR-01_tokenring_mutex/raw/mutex_2026-02-01T21-59-14-962Z_TokenRing_interactive_03_preview.png` | Baseline mutual exclusion (safety). |
26-
| TR-02 | TokenRing | interactive | 4 processes; token loss then regeneration | token loss + regenerate | After token loss, Step makes no progress; after regeneration, progress resumes and CS entry is possible; Safety OK. | **A** `! Fault injected: token lost.`; `! Recovery: token regenerated at P1.`; `P1 enters the critical section (holds token).` | **A** state: `TR-02_token_loss_regen/raw/mutex_2026-02-01T22-04-06-966Z_TokenRing_interactive_01_state.json`<br>trace: `TR-02_token_loss_regen/raw/mutex_2026-02-01T22-04-06-966Z_TokenRing_interactive_01_trace.txt`<br>png: `TR-02_token_loss_regen/raw/mutex_2026-02-01T22-04-06-966Z_TokenRing_interactive_01_preview.png` | Fault + recovery are captured in one trace. |
27-
| TR-03 | TokenRing | script + interactive | Crash/Recover demonstration (scripted scenario + interactive snapshots) | crash + recover | Crash is reflected; recover restores participation; normal progress resumes; Safety OK. | **B** `! Fault injected: P2 crashed.`; `P3 enters the critical section (holds token).`<br>**C** `! Fault injected: P2 crashed.`; `! Recovery: P2 recovered.`; `P4 enters the critical section (holds token).` | **A** state: `TR-03_crash_recover/raw/mutex_2026-02-01T22-08-53-680Z_TokenRing_script_01_state.json`<br>trace: `TR-03_crash_recover/raw/mutex_2026-02-01T22-08-53-680Z_TokenRing_script_01_trace.txt`<br>png: `TR-03_crash_recover/raw/mutex_2026-02-01T22-08-53-680Z_TokenRing_script_01_preview.png`<br><br>**B** state: `TR-03_crash_recover/raw/mutex_2026-02-01T22-11-32-069Z_TokenRing_interactive_01_state.json`<br>trace: `TR-03_crash_recover/raw/mutex_2026-02-01T22-11-32-069Z_TokenRing_interactive_01_trace.txt`<br>png: `TR-03_crash_recover/raw/mutex_2026-02-01T22-11-32-069Z_TokenRing_interactive_01_preview.png`<br><br>**C** state: `TR-03_crash_recover/raw/mutex_2026-02-01T22-12-23-126Z_TokenRing_interactive_01_state.json`<br>trace: `TR-03_crash_recover/raw/mutex_2026-02-01T22-12-23-126Z_TokenRing_interactive_01_trace.txt`<br>png: `TR-03_crash_recover/raw/mutex_2026-02-01T22-12-23-126Z_TokenRing_interactive_01_preview.png` | Includes scripted scenario load plus interactive crash/recover snapshots. |
28+
| Case ID | Algorithm | Mode | Scenario | Fault injected | Expected result | Evidence folder | Report use |
29+
|---|---|---|---|---|---|---|---|
30+
| TR-01 | Token Ring | interactive | Basic mutual exclusion | none | At most one process in the critical section at a time; Safety remains OK | `TR-01_tokenring_mutex/raw/` | Supports Testing summary |
31+
| TR-02 | Token Ring | interactive | Token loss and regeneration | token loss + regenerate | Progress halts until the token is regenerated; Safety remains OK | `TR-02_token_loss_regen/raw/` | Figure 6.1 |
32+
| TR-03 | Token Ring | scripted / interactive | Crash and recover | crash + recover | Crash and recovery are visible in state and trace; progress can resume | `TR-03_crash_recover/raw/` | Figure 6.2 |
33+
| RA-01 | RA | interactive | Basic request / entry / release | none | Entry occurs only after all required REPLY messages are received; Safety remains OK | `RA-01_basic/raw/` | Supports Testing summary |
34+
| RA-02 | RA | scripted | Tie-break under equal timestamps | none | Deterministic winner under equal timestamps (numeric PID tie-break) | `RA-02_tiebreak_p2_p10/raw/` | Figure 6.3 |
35+
| RA-03 | RA | interactive | Drop next in-flight message | drop next in-flight msg | Queue may empty while progress stalls; trace explains missing REPLY; Safety remains OK | `RA-03_drop_inflight_stall/raw/` | Figure 6.4 + trace excerpt |
36+
| RA-04 | RA | interactive | Drop-next-send | drop-next-send | Next outgoing message is dropped; trace explains missing REPLY; Safety remains OK | `RA-04_drop_next_send_stall/raw/` | Figure 6.5 + trace excerpt |
2837

2938
---
3039

31-
## Standard report sentence (recommended)
40+
## Interpretation notes
41+
42+
### Safety
43+
All evidence cases are expected to preserve the safety invariant:
44+
- at most one process in the critical section at any time.
3245

33-
For RA-03 and RA-04, explicitly state:
46+
### Liveness
47+
RA-03 and RA-04 are intentionally designed to demonstrate **liveness failure** under message loss.
48+
These cases should therefore be interpreted as:
3449

35-
> These cases intentionally demonstrate that under unreliable networks (message loss), Ricart–Agrawala may lose **liveness** (progress), while still preserving **safety** (mutual exclusion). The tool’s trace explains the stall by indicating which REPLY is missing.
50+
- **Safety preserved**
51+
- **Progress intentionally stalled**
52+
- **Educationally valuable because the trace makes the reason explicit**
3653

3754
---
3855

39-
## Completeness checklist
56+
## Report cross-reference
4057

41-
- [x] Each case has at least one evidence triplet (state/trace/png).
42-
- [x] RA-03 and RA-04 include an explicit stall explanation in trace (“Stalled: … waiting for REPLY …”).
43-
- [ ] (Optional) Re-capture evidence on `git checkout v0.3.2` to ensure the runtime baseline is exactly the tag during capture.
58+
For the curated report figures, see:
59+
- `report/figures/FIGURE_INDEX.md`
Binary file not shown.

evidence/v0.3.2/RA-01_basic/raw/mutex_2026-02-01T22-13-19-037Z_RA_interactive_01_state.json

Lines changed: 0 additions & 68 deletions
This file was deleted.

evidence/v0.3.2/RA-01_basic/raw/mutex_2026-02-01T22-13-19-037Z_RA_interactive_01_trace.txt

Lines changed: 0 additions & 13 deletions
This file was deleted.
Binary file not shown.

evidence/v0.3.2/RA-01_basic/raw/mutex_2026-02-01T22-13-19-037Z_RA_interactive_02_state.json

Lines changed: 0 additions & 68 deletions
This file was deleted.

evidence/v0.3.2/RA-01_basic/raw/mutex_2026-02-01T22-13-19-037Z_RA_interactive_02_trace.txt

Lines changed: 0 additions & 15 deletions
This file was deleted.
-16.2 KB
Binary file not shown.

evidence/v0.3.2/RA-02_tiebreak_p2_p10/raw/mutex_2026-02-01T22-16-22-140Z_RA_script_01_state.json renamed to evidence/v0.3.2/RA-02_tiebreak_p2_p10/raw/fig_ra_tiebreak_source.json

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,25 @@
66
{
77
"id": "P2",
88
"requesting": false,
9-
"inCS": false,
9+
"inCS": true,
1010
"crashed": false,
11-
"clock": 5,
12-
"reqTs": null,
11+
"clock": 4,
12+
"reqTs": 1,
1313
"awaiting": [],
14-
"deferred": []
14+
"deferred": [
15+
"P10"
16+
]
1517
},
1618
{
1719
"id": "P10",
18-
"requesting": false,
20+
"requesting": true,
1921
"inCS": false,
2022
"crashed": false,
21-
"clock": 6,
22-
"reqTs": null,
23-
"awaiting": [],
23+
"clock": 3,
24+
"reqTs": 1,
25+
"awaiting": [
26+
"P2"
27+
],
2428
"deferred": []
2529
}
2630
],
@@ -29,17 +33,17 @@
2933
"P10"
3034
],
3135
"network": {
32-
"nextMsgId": 5,
36+
"nextMsgId": 4,
3337
"dropNextSend": false,
3438
"queue": []
3539
},
3640
"derived": {
37-
"inCS": null,
41+
"inCS": "P2",
3842
"metrics": {
39-
"csEntries": 2,
40-
"csReleases": 2,
41-
"messagesSent": 4,
42-
"messagesDelivered": 4,
43+
"csEntries": 1,
44+
"csReleases": 0,
45+
"messagesSent": 3,
46+
"messagesDelivered": 3,
4347
"messagesDropped": 0
4448
}
4549
}

0 commit comments

Comments
 (0)