packet-tracer-skill 0.2.3 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/CHANGELOG.md +491 -73
  2. package/README.md +575 -442
  3. package/SKILL.md +513 -262
  4. package/bin/packet-tracer-skill.js +29 -2
  5. package/docs/github-launch-ops-0.2.3.md +37 -0
  6. package/docs/github-metadata.md +6 -4
  7. package/docs/hero-demo-plan.md +1 -1
  8. package/docs/home-iot-donor-proof.md +4 -4
  9. package/docs/l2-security-qos-proof.md +1 -1
  10. package/docs/packet-tracer-feature-gap-atlas.md +4 -4
  11. package/docs/post-launch-follow-up.md +9 -5
  12. package/docs/proof-readiness-dashboard.md +69 -0
  13. package/docs/publish-preview-roadmap.md +6 -5
  14. package/docs/release-checklist.md +17 -8
  15. package/docs/release-notes-0.2.4.md +20 -0
  16. package/docs/runtime-truth.md +33 -8
  17. package/docs/security-edge-deepening-proof.md +1 -1
  18. package/examples/README.md +98 -69
  19. package/examples/complex_campus_master_edit_v4.inventory.json +12 -2
  20. package/examples/gallery.md +94 -6
  21. package/examples/home_iot_cli_edit_v1.inventory.json +11 -2
  22. package/examples/index.json +932 -4
  23. package/examples/local-sample-evidence.json +24 -0
  24. package/examples/proof-cards.json +117 -0
  25. package/examples/service_heavy_cli_edit_v1.inventory.json +11 -2
  26. package/package.json +61 -53
  27. package/pytest.ini +9 -0
  28. package/references/packettracer-sample-catalog.json +45287 -4525
  29. package/references/packettracer-sample-catalog.md +599 -259
  30. package/references/proof-readiness-candidates.json +352 -0
  31. package/scripts/build_examples_index.py +228 -35
  32. package/scripts/build_sample_catalog.py +62 -40
  33. package/scripts/corpus_runner.py +430 -0
  34. package/scripts/coverage_matrix.py +1842 -1812
  35. package/scripts/donor_cache.py +354 -0
  36. package/scripts/donor_diagnostics.py +3 -1
  37. package/scripts/generate_pkt.py +12738 -4228
  38. package/scripts/intent_parser.py +2269 -1657
  39. package/scripts/lab_coherence.py +455 -0
  40. package/scripts/local_donors.py +340 -0
  41. package/scripts/packet_tracer_env.py +846 -391
  42. package/scripts/pkt_annotate.py +218 -0
  43. package/scripts/pkt_codec.py +420 -181
  44. package/scripts/pkt_editor.py +2487 -1703
  45. package/scripts/pkt_transformer.py +1170 -727
  46. package/scripts/pkt_verify.py +461 -0
  47. package/scripts/runtime_doctor.py +80 -29
  48. package/scripts/sample_catalog.py +1425 -1250
  49. package/scripts/twofish_diagnostics.py +48 -31
  50. package/scripts/usage_ledger.py +218 -0
  51. package/scripts/vendor/README.md +44 -37
  52. package/scripts/vendor/twofish_pure.py +321 -0
  53. package/scripts/workspace_repair.py +548 -508
  54. package/templates/pt900/donors/README.md +15 -0
package/README.md CHANGED
@@ -4,67 +4,107 @@
4
4
  [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
5
5
  [![Packet Tracer 9.0](https://img.shields.io/badge/Packet%20Tracer-9.0.0.0810-blue.svg)](https://github.com/20hajiyev/packet-tracer-skill)
6
6
 
7
- Cisco Packet Tracer 9.x `.pkt` generator and editor for skill-based coding hosts.
8
-
9
- This repository is built for one job: take a natural-language network request, build an explicit scenario-aware plan, adapt a compatible donor lab, and produce a Packet Tracer 9.x workflow that stays open-first and compatibility-first.
10
-
11
- It is intended for networking labs where correctness matters more than producing a pretty but unverifiable diagram. The skill can plan, inspect, edit, compare, and explain Packet Tracer scenarios, but it deliberately separates "recognized by the parser", "visible in inventory", "edit-proven", "donor-backed ready", and "generate-ready" support.
12
-
13
- `0.2.3` capability release is focused on:
7
+ Cisco Packet Tracer 9.x `.pkt` generator and editor for skill-based coding hosts.
8
+
9
+ This repository is built for one job: take a natural-language network request, build an explicit scenario-aware plan, adapt a compatible donor lab, and produce a Packet Tracer 9.x workflow that stays open-first and compatibility-first.
10
+
11
+ It is intended for networking labs where correctness matters more than producing a pretty but unverifiable diagram. The skill can plan, inspect, edit, compare, and explain Packet Tracer scenarios, but it deliberately separates "recognized by the parser", "visible in inventory", "edit-proven", "donor-backed ready", and "generate-ready" support.
12
+
13
+ ## What `0.3.1` does
14
+
15
+ In this release a prompt produces a lab Packet Tracer opens.
16
+
17
+ ```bash
18
+ npx packet-tracer-skill --doctor # is this machine ready?
19
+ python scripts/generate_pkt.py --prompt "1 router 1 switch 4 komputer, DHCP ile avtomatik IP payla" --output lab.pkt
20
+ ```
21
+
22
+ The connectivity numbers below come from running `ping` on the devices, not from
23
+ inspecting the file.
24
+
25
+ | measurement | result |
26
+ | --- | --- |
27
+ | corpus scenarios generated | 32 of 33 (the 33rd asks for no devices and is refused) |
28
+ | of those, opened by Packet Tracer | 31 of 32 |
29
+ | tests | 833 passed, 1 skipped |
30
+ | generated DHCP lab | four PCs took leases from the router pool and pinged their gateway and each other 4/4 |
31
+ | generated leased line | traffic crossed `Serial0/1/1 <-> Serial0/1/0` 4/4 |
32
+ | generated home-router lab | both hosts pinged the gateway and each other 4/4, cabled and over Wi-Fi, open and WPA2 |
33
+
34
+ Three defects had made every generated WAN lab unopenable, each hiding the next.
35
+ A donor the selector had *rejected* still rewrote the request, so a planned
36
+ serial link became copper before any other donor could serve it. Interface names
37
+ were invented from an assumed switch model instead of read from the device. And
38
+ serial cables carried no clocking end. Two of the three stayed invisible until
39
+ the open check itself was fixed, since it had been returning false verdicts often
40
+ enough to send investigations after defects that were not there.
41
+
42
+ Two different numbers in this README both describe generation. The one above is
43
+ donor-prune generation: a real lab is pruned and rewired to match the request.
44
+ The atlas `generate_ready` count further down is a stricter per-feature
45
+ acceptance gate, still `0` by design.
46
+
47
+ **One thing to know when you check a Wi-Fi lab.** Read a wireless client once,
48
+ straight after the file opens, and it will look broken: port `up` and `linked`,
49
+ `ip 0.0.0.0`, the radio at its un-negotiated rate. That is a first reading and
50
+ means nothing -- the client has not finished taking its lease. Read it again and
51
+ it holds its address and pings. A lab Packet Tracer saved itself, seconds after
52
+ it pinged 4/4, reads the same way on reopen, which is how we know the reading
53
+ rather than the lab is at fault.
54
+
55
+ The previous line, the `0.2.3` capability release, was focused on:
14
56
 
15
57
  - donor-backed and scenario-aware public messaging
16
58
  - conservative Windows-first runtime truth
17
59
  - known working scenario set examples with acceptance-backed artifacts
18
- - expanded edit-proven capability proof across voice, automation, L2 security, WAN/security, BGP/L2 resiliency, IPv4 routing/NAT, IOS management, and local sample audit workflows
19
-
20
- `0.2.3` freezes the voice/collaboration and automation/controller proof work, explicit L2 dot1x/QoS and router-based CBAC/ZFW proof, local-sample-driven BGP/L2 resiliency, IPv4 routing/NAT/IOS-management proof waves, and the first broader donor-backed edit readiness expansion. It remains conservative: `generate_ready=0` is intentional until a future single-donor acceptance-backed pilot is proven.
21
-
22
- ## What It Does
23
-
24
- `packet-tracer-skill` turns network-lab requests into explicit Packet Tracer workflows. The core loop is:
25
-
26
- 1. parse the prompt into a scenario family and requested capabilities
27
- 2. compare those capabilities against the current support matrix
28
- 3. look for a compatible donor lab when strict `.pkt` work is required
29
- 4. refuse unsafe or unsupported changes instead of guessing
30
- 5. return a decision payload that explains what passed, what failed, and what would make it pass
31
-
32
- The current public surface is strongest for these tasks:
33
-
34
- - scenario-aware planning for campus, service-heavy, Home IoT, WAN/security edge, IPv6/routing, IPv4 routing/management, L2 security/monitoring, L2 resiliency/BGP, and advanced wireless prompts
35
- - explicit `.pkt` edits for proven command shapes such as VLAN, DHCP, ACL, server services, IPv6/routing subsets, IPv4 routing/NAT/IOS-management subsets, L2 security/monitoring subsets, BGP/STP/EtherChannel/VTP/DTP IOS text edits, Home IoT constrained edits, and narrow advanced wireless edits
36
- - capability parity reports that explain whether a prompt is inventory-known, edit-supported, donor-limited, acceptance-gated, or unsupported
37
- - runtime diagnostics for Packet Tracer installation, donor path, Twofish bridge resolution, and blocked versus ready operations
38
- - public proof artifacts through examples, inventory manifests, acceptance excerpts, and donor proof docs
39
-
40
- ## What It Does Not Claim
41
-
42
- The project is intentionally conservative. It does not claim universal Packet Tracer automation.
43
-
44
- - It does not claim every Packet Tracer feature is generate-ready.
45
- - It does not synthesize arbitrary `.pkt` internals when donor or acceptance evidence is weak.
46
- - It does not treat a successful skill install as proof that real `.pkt` decode/edit/generate is ready.
47
- - It does not commit raw `.pkt` donor labs or local bridge binaries into the public package.
48
- - It does not claim repo-local self-contained runtime readiness when validation depends on an external bridge override.
49
-
50
- The feature atlas exists so unsupported and under-modelled Packet Tracer areas are visible instead of hidden. The intended path is: map the feature, prove inventory visibility, prove edit roundtrip, add donor-backed readiness, and only then consider generate readiness.
51
-
52
- ## Why It Is Different
53
-
54
- `packet-tracer-skill` is not a generic topology sketcher. It is a donor-backed Packet Tracer workflow with strict refusal behavior:
60
+ - expanded edit-proven capability proof across voice, automation, L2 security, WAN/security, BGP/L2 resiliency, IPv4 routing/NAT, IOS management, and local sample audit workflows
61
+
62
+ ## What It Does
63
+
64
+ `packet-tracer-skill` turns network-lab requests into explicit Packet Tracer workflows. The core loop is:
65
+
66
+ 1. parse the prompt into a scenario family and requested capabilities
67
+ 2. compare those capabilities against the current support matrix
68
+ 3. look for a compatible donor lab when strict `.pkt` work is required
69
+ 4. refuse unsafe or unsupported changes instead of guessing
70
+ 5. return a decision payload that explains what passed, what failed, and what would make it pass
71
+
72
+ The current public surface is strongest for these tasks:
73
+
74
+ - scenario-aware planning for campus, service-heavy, Home IoT, WAN/security edge, IPv6/routing, IPv4 routing/management, L2 security/monitoring, L2 resiliency/BGP, and advanced wireless prompts
75
+ - explicit `.pkt` edits for proven command shapes such as VLAN, DHCP, ACL, server services, IPv6/routing subsets, IPv4 routing/NAT/IOS-management subsets, L2 security/monitoring subsets, BGP/STP/EtherChannel/VTP/DTP IOS text edits, Home IoT constrained edits, and narrow advanced wireless edits
76
+ - capability parity reports that explain whether a prompt is inventory-known, edit-supported, donor-limited, acceptance-gated, or unsupported
77
+ - runtime diagnostics for Packet Tracer installation, donor path, Twofish bridge resolution, and blocked versus ready operations
78
+ - public proof artifacts through examples, inventory manifests, acceptance excerpts, and donor proof docs
79
+
80
+ ## What It Does Not Claim
81
+
82
+ The project is intentionally conservative. It does not claim universal Packet Tracer automation.
83
+
84
+ - It does not claim every Packet Tracer feature is generate-ready.
85
+ - It does not synthesize arbitrary `.pkt` internals when donor or acceptance evidence is weak.
86
+ - It does not treat a successful skill install as proof that real `.pkt` decode/edit/generate is ready.
87
+ - It does not commit raw `.pkt` donor labs or local bridge binaries into the public package.
88
+ - It does not claim repo-local self-contained runtime readiness when validation depends on an external bridge override.
89
+
90
+ The feature atlas exists so unsupported and under-modelled Packet Tracer areas are visible instead of hidden. The intended path is: map the feature, prove inventory visibility, prove edit roundtrip, add donor-backed readiness, and only then consider generate readiness.
91
+
92
+ ## Why It Is Different
93
+
94
+ `packet-tracer-skill` is not a generic topology sketcher. It is a donor-backed Packet Tracer workflow with strict refusal behavior:
55
95
 
56
96
  - generation stays `single-donor apply`
57
97
  - unsupported and acceptance-gated mutations do not fall back to guessed output
58
- - `--explain-plan`, `--compare-scenarios`, `--parity-report`, and `--doctor` are first-class product surfaces
59
- - curated donor evidence, fixture corpus checks, and runtime doctor output are part of the contract
60
-
61
- In practice, that means the tool is trying to solve a narrower but more defensible problem than a prompt-to-diagram generator. It is designed to answer three questions in order:
62
-
63
- 1. what the prompt is actually asking for
64
- 2. whether the requested capability set is really supported for this scenario family
65
- 3. whether a compatible donor and runtime path exist to carry the request safely
66
-
67
- If the answer to any of those is weak, the tool is expected to stop and explain why. That refusal behavior is part of the intended product quality, not a temporary limitation.
98
+ - `--explain-plan`, `--compare-scenarios`, `--parity-report`, and `--doctor` are first-class product surfaces
99
+ - curated donor evidence, fixture corpus checks, and runtime doctor output are part of the contract
100
+
101
+ In practice, that means the tool is trying to solve a narrower but more defensible problem than a prompt-to-diagram generator. It is designed to answer three questions in order:
102
+
103
+ 1. what the prompt is actually asking for
104
+ 2. whether the requested capability set is really supported for this scenario family
105
+ 3. whether a compatible donor and runtime path exist to carry the request safely
106
+
107
+ If the answer to any of those is weak, the tool is expected to stop and explain why. That refusal behavior is part of the intended product quality, not a temporary limitation.
68
108
 
69
109
  Current product strengths:
70
110
 
@@ -74,16 +114,16 @@ Current product strengths:
74
114
  - runtime doctor contract with bridge resolution
75
115
  - known working examples with screenshots and acceptance excerpts
76
116
 
77
- ## Runtime Reality
78
-
79
- Use the same repository, then install it into the skill path your host expects.
80
-
81
- There are two separate installation stories:
82
-
83
- - installing the skill package into Codex, Cursor, Claude, Gemini, Kiro, AdaL, OpenCode, or a custom skill directory
84
- - making the local machine capable of opening, decoding, editing, and regenerating real Packet Tracer `.pkt` files
85
-
86
- The first story is handled by the npm installer. The second story depends on Packet Tracer 9.0, a compatible donor lab, and a local Twofish bridge. This is why the README keeps repeating the runtime distinction: a host can install the skill successfully while strict `.pkt` operations are still blocked.
117
+ ## Runtime Reality
118
+
119
+ Use the same repository, then install it into the skill path your host expects.
120
+
121
+ There are two separate installation stories:
122
+
123
+ - installing the skill package into Codex, Cursor, Claude, Gemini, Kiro, AdaL, OpenCode, or a custom skill directory
124
+ - making the local machine capable of opening, decoding, editing, and regenerating real Packet Tracer `.pkt` files
125
+
126
+ The first story is handled by the npm installer. The second story depends on Packet Tracer 9.0, a compatible donor lab, and a local Twofish bridge. This is why the README keeps repeating the runtime distinction: a host can install the skill successfully while strict `.pkt` operations are still blocked.
87
127
 
88
128
  | Tool | Install | First Use |
89
129
  | --- | --- | --- |
@@ -97,14 +137,14 @@ The first story is handled by the npm installer. The second story depends on Pac
97
137
  | OpenCode | `npx packet-tracer-skill --path .agents/skills` | `opencode run @pkt build a Packet Tracer lab with VLAN and DHCP` |
98
138
  | Custom path | `npx packet-tracer-skill --path ./my-skills` | depends on the host |
99
139
 
100
- The installer can be used on multiple hosts, but real `.pkt` runtime remains Windows-first and doctor-governed.
101
-
102
- That distinction matters because this project has two different surfaces:
103
-
104
- - installer or skill-copy success
105
- - actual Packet Tracer decode/edit/generate readiness
106
-
107
- The first one is relatively portable. The second one is not. README, npm text, release notes, and doctor output all need to preserve that difference or they become misleading.
140
+ The installer can be used on multiple hosts, but real `.pkt` runtime remains Windows-first and doctor-governed.
141
+
142
+ That distinction matters because this project has two different surfaces:
143
+
144
+ - installer or skill-copy success
145
+ - actual Packet Tracer decode/edit/generate readiness
146
+
147
+ The first one is relatively portable. The second one is not. README, npm text, release notes, and doctor output all need to preserve that difference or they become misleading.
108
148
 
109
149
  | Platform | Installer / skill copy | Real `.pkt` runtime |
110
150
  | --- | --- | --- |
@@ -112,15 +152,15 @@ The first one is relatively portable. The second one is not. README, npm text, r
112
152
  | macOS | Partially supported | Runtime contract defined, not acceptance-verified |
113
153
  | Linux | Partially supported | Runtime contract defined, not acceptance-verified |
114
154
 
115
- Important runtime rule:
155
+ Important runtime rule:
116
156
 
117
- - installer success is not the same thing as runtime readiness
118
- - `--doctor` is the authority for whether real `.pkt` operations are ready
119
- - repo-local bridge and external bridge are reported separately
120
- - current strict validation is Windows-first and external-bridge-assisted
121
- - `validate_open` can be ready while strict decode/edit/generate are still blocked
122
-
123
- The mixed case is especially important. If `validate_open` works, that only proves Packet Tracer can be launched. It does not prove the current checkout can decode or regenerate `.pkt` files safely. For strict work, donor availability and Twofish bridge resolution still decide the outcome.
157
+ - installer success is not the same thing as runtime readiness
158
+ - `--doctor` is the authority for whether real `.pkt` operations are ready
159
+ - repo-local bridge and external bridge are reported separately
160
+ - current strict validation is Windows-first and external-bridge-assisted
161
+ - `validate_open` can be ready while strict decode/edit/generate are still blocked
162
+
163
+ The mixed case is especially important. If `validate_open` works, that only proves Packet Tracer can be launched. It does not prove the current checkout can decode or regenerate `.pkt` files safely. For strict work, donor availability and Twofish bridge resolution still decide the outcome.
124
164
 
125
165
  ## Quick Start
126
166
 
@@ -150,6 +190,15 @@ npx packet-tracer-skill --doctor
150
190
  python .\scripts\runtime_doctor.py
151
191
  ```
152
192
 
193
+ First-run workflow for real use:
194
+
195
+ 1. Run `npx packet-tracer-skill --doctor` or `python .\scripts\runtime_doctor.py`.
196
+ 2. Read `runtime_grade`, `ready_operations`, `blocked_operations`, and `best_next_fix`.
197
+ 3. If runtime is blocked, fix Packet Tracer root, donor path, or Twofish bridge before expecting real `.pkt` decode/edit/generate.
198
+ 4. Run `python .\scripts\generate_pkt.py --parity-report "<your prompt>"` to see whether the scenario is report-only, edit-proven, donor-backed-ready, or generate-ready.
199
+ 5. Run `python .\scripts\generate_pkt.py --explain-plan "<your prompt>"` when parity says the prompt is blocked; the `user_summary`, `next_best_action`, and `proof_card_refs` fields are the fastest path to the next correct action.
200
+ 6. Check `examples/gallery.md` when you need a known working example, proof card, or local evidence summary before attempting a new donor-backed workflow.
201
+
153
202
  Local development:
154
203
 
155
204
  ```powershell
@@ -158,44 +207,45 @@ cd .\packet-tracer-skill
158
207
  powershell -ExecutionPolicy Bypass -File .\scripts\setup.ps1 -Dev
159
208
  ```
160
209
 
161
- Launch references:
162
-
163
- - [docs/release-notes-0.2.3.md](docs/release-notes-0.2.3.md)
164
- - [docs/release-notes-0.2.2.md](docs/release-notes-0.2.2.md)
165
- - [docs/hero-demo-plan.md](docs/hero-demo-plan.md)
166
- - [docs/github-metadata.md](docs/github-metadata.md)
167
- - [docs/release-checklist.md](docs/release-checklist.md)
168
- - [docs/github-launch-ops-0.2.2.md](docs/github-launch-ops-0.2.2.md)
169
- - [docs/campus-donor-proof.md](docs/campus-donor-proof.md)
170
- - [docs/home-iot-donor-proof.md](docs/home-iot-donor-proof.md)
171
- - [docs/wan-security-donor-proof.md](docs/wan-security-donor-proof.md)
172
- - [docs/wireless-advanced-proof.md](docs/wireless-advanced-proof.md)
173
- - [docs/industrial-programming-proof.md](docs/industrial-programming-proof.md)
174
- - [docs/automation-controller-proof.md](docs/automation-controller-proof.md)
175
- - [docs/voice-collaboration-proof.md](docs/voice-collaboration-proof.md)
176
- - [docs/l2-resiliency-bgp-proof.md](docs/l2-resiliency-bgp-proof.md)
177
- - [docs/ipv4-routing-management-proof.md](docs/ipv4-routing-management-proof.md)
178
- - [docs/l2-security-qos-proof.md](docs/l2-security-qos-proof.md)
179
- - [docs/security-edge-deepening-proof.md](docs/security-edge-deepening-proof.md)
180
- - [docs/packet-tracer-feature-gap-atlas.md](docs/packet-tracer-feature-gap-atlas.md)
210
+ Launch references:
211
+
212
+ - [docs/release-notes-0.2.3.md](docs/release-notes-0.2.3.md)
213
+ - [docs/release-notes-0.2.4.md](docs/release-notes-0.2.4.md)
214
+ - [docs/hero-demo-plan.md](docs/hero-demo-plan.md)
215
+ - [docs/github-metadata.md](docs/github-metadata.md)
216
+ - [docs/release-checklist.md](docs/release-checklist.md)
217
+ - [docs/github-launch-ops-0.2.3.md](docs/github-launch-ops-0.2.3.md)
218
+ - [docs/proof-readiness-dashboard.md](docs/proof-readiness-dashboard.md)
219
+ - [docs/campus-donor-proof.md](docs/campus-donor-proof.md)
220
+ - [docs/home-iot-donor-proof.md](docs/home-iot-donor-proof.md)
221
+ - [docs/wan-security-donor-proof.md](docs/wan-security-donor-proof.md)
222
+ - [docs/wireless-advanced-proof.md](docs/wireless-advanced-proof.md)
223
+ - [docs/industrial-programming-proof.md](docs/industrial-programming-proof.md)
224
+ - [docs/automation-controller-proof.md](docs/automation-controller-proof.md)
225
+ - [docs/voice-collaboration-proof.md](docs/voice-collaboration-proof.md)
226
+ - [docs/l2-resiliency-bgp-proof.md](docs/l2-resiliency-bgp-proof.md)
227
+ - [docs/ipv4-routing-management-proof.md](docs/ipv4-routing-management-proof.md)
228
+ - [docs/l2-security-qos-proof.md](docs/l2-security-qos-proof.md)
229
+ - [docs/security-edge-deepening-proof.md](docs/security-edge-deepening-proof.md)
230
+ - [docs/packet-tracer-feature-gap-atlas.md](docs/packet-tracer-feature-gap-atlas.md)
181
231
 
182
232
  ## Runtime Doctor Contract
183
233
 
184
- `--doctor` is a product surface, not a debug afterthought. It reports:
185
-
186
- - `capability_impact`
187
- - `runtime_blockers`
188
- - `blocked_operations`
189
- - `ready_operations`
190
- - `what_currently_works`
191
- - `what_is_blocked`
192
- - `why_it_is_blocked`
193
- - `best_next_fix`
194
- - `recommended_next_steps`
195
- - `doctor_summary`
196
- - `runtime_grade`
197
- - `bridge_resolution`
198
- - `bridge_path_source`
234
+ `--doctor` is a product surface, not a debug afterthought. It reports:
235
+
236
+ - `capability_impact`
237
+ - `runtime_blockers`
238
+ - `blocked_operations`
239
+ - `ready_operations`
240
+ - `what_currently_works`
241
+ - `what_is_blocked`
242
+ - `why_it_is_blocked`
243
+ - `best_next_fix`
244
+ - `recommended_next_steps`
245
+ - `doctor_summary`
246
+ - `runtime_grade`
247
+ - `bridge_resolution`
248
+ - `bridge_path_source`
199
249
  - `bridge_recommendation`
200
250
  - `runtime_contract_notes`
201
251
 
@@ -211,32 +261,32 @@ Runtime grade states:
211
261
  - `partially_ready`
212
262
  - `blocked`
213
263
 
214
- Important distinction:
215
-
216
- - tests can pass with an external bridge override
217
- - that does not mean the repo is self-contained runtime-ready
218
- - the difference between repo-local readiness and external bridge fallback is part of the public contract
219
- - mixed states should still read like a decision guide, not a debug dump
220
-
221
- Selector and runtime are intentionally kept separate:
222
-
223
- - donor selection can still block a prompt even when runtime is healthy
224
- - runtime can still block strict `.pkt` work even when a donor artifact exists
225
- - campus donor proof currently shows the first case more clearly than the second
226
-
227
- Runtime truth reference:
228
-
229
- - [docs/runtime-truth.md](docs/runtime-truth.md)
230
- - [docs/post-launch-follow-up.md](docs/post-launch-follow-up.md)
264
+ Important distinction:
265
+
266
+ - tests can pass with an external bridge override
267
+ - that does not mean the repo is self-contained runtime-ready
268
+ - the difference between repo-local readiness and external bridge fallback is part of the public contract
269
+ - mixed states should still read like a decision guide, not a debug dump
270
+
271
+ Selector and runtime are intentionally kept separate:
272
+
273
+ - donor selection can still block a prompt even when runtime is healthy
274
+ - runtime can still block strict `.pkt` work even when a donor artifact exists
275
+ - campus donor proof currently shows the first case more clearly than the second
276
+
277
+ Runtime truth reference:
278
+
279
+ - [docs/runtime-truth.md](docs/runtime-truth.md)
280
+ - [docs/post-launch-follow-up.md](docs/post-launch-follow-up.md)
231
281
 
232
282
  ## Runtime Configuration
233
283
 
234
284
  Set the local Packet Tracer environment before real `.pkt` generation:
235
285
 
236
- ```powershell
237
- $env:PACKET_TRACER_ROOT='C:\Program Files\Cisco Packet Tracer 9.0.0'
238
- $env:PACKET_TRACER_COMPAT_DONOR='C:\path\to\your-working-9.0-donor.pkt'
239
- ```
286
+ ```powershell
287
+ $env:PACKET_TRACER_ROOT='C:\Program Files\Cisco Packet Tracer 9.0.0'
288
+ $env:PACKET_TRACER_COMPAT_DONOR='C:\path\to\your-working-9.0-donor.pkt'
289
+ ```
240
290
 
241
291
  Important variables:
242
292
 
@@ -245,51 +295,54 @@ Important variables:
245
295
  - `PACKET_TRACER_EXE`
246
296
  - `PACKET_TRACER_COMPAT_DONOR`
247
297
  - `PACKET_TRACER_TARGET_VERSION`
248
- - `PKT_TWOFISH_LIBRARY`
249
- - `PKT_TWOFISH_SEARCH_ROOTS`
250
-
251
- Twofish bridge setup is intentionally local-machine specific. Use a path that exists on your own machine.
252
-
253
- Generic explicit bridge path:
254
-
255
- ```powershell
256
- $env:PKT_TWOFISH_LIBRARY="C:\path\to\_twofish.cp314-win_amd64.pyd"
257
- ```
258
-
259
- Repo-local bridge path, if you have placed a compatible bridge inside this
260
- checkout:
261
-
262
- ```powershell
263
- $env:PKT_TWOFISH_LIBRARY="$PWD\scripts\vendor\_twofish.cp314-win_amd64.pyd"
264
- ```
265
-
266
- Search-root fallback, if you want the runtime to look inside a local bridge
267
- folder:
268
-
269
- ```powershell
270
- $env:PKT_TWOFISH_SEARCH_ROOTS="C:\path\to\bridge-folder"
271
- ```
272
-
273
- Developer-local bridge paths are valid only for the person and host where that bridge exists. They are not the public setup contract.
274
-
275
- Required policy:
276
-
277
- - keep `PACKET_TRACER_TARGET_VERSION` on `9.0.0.0810`
278
- - do not downgrade the workflow to `5.3`
279
- - if donor or bridge is missing, fix the runtime instead of weakening the compatibility profile
280
-
281
- Troubleshooting guide:
282
-
283
- - `bridge_resolution=repo_local` means the checkout contains the bridge path the doctor resolved.
284
- - `bridge_resolution=external_env` means an environment variable points to a bridge outside the repo. This can be valid for testing, but it is not repo self-contained readiness.
285
- - `bridge_resolution=missing` means strict decode/edit/generate is blocked until `PKT_TWOFISH_LIBRARY` or `PKT_TWOFISH_SEARCH_ROOTS` resolves a compatible bridge.
286
- - `validate_open` readiness only proves Packet Tracer can launch a file. Strict `.pkt` generation still depends on donor and bridge readiness.
287
-
288
- ## Core Product Surfaces
289
-
290
- The CLI is not only a generator entrypoint. It is also the inspection surface for deciding whether a request is safe. In normal development, start with the reporting commands before expecting a final `.pkt` output.
291
-
292
- Use `--explain-plan` when you need the full decision payload:
298
+ - `PKT_TWOFISH_LIBRARY`
299
+ - `PKT_TWOFISH_SEARCH_ROOTS`
300
+
301
+ **None of these are required.** The skill resolves all of them on its own; set
302
+ one only to override what it found.
303
+
304
+ ### Twofish
305
+
306
+ Nothing to install. `scripts/vendor/twofish_pure.py` is a pure-Python Twofish
307
+ that ships in the checkout and passes the official test vectors, so decode,
308
+ edit and generate work with no binaries and no environment variables.
309
+
310
+ A compiled bridge is an optional accelerator, worth setting only for repeated
311
+ work on very large labs (~12x on the Twofish step):
312
+
313
+ ```powershell
314
+ $env:PKT_TWOFISH_LIBRARY="C:\path\to\_twofish.cp314-win_amd64.pyd"
315
+ $env:PKT_TWOFISH_SEARCH_ROOTS="C:\path\to\bridge-folder" # or search a folder
316
+ ```
317
+
318
+ ### Target version
319
+
320
+ Do not pin `PACKET_TRACER_TARGET_VERSION`. Packet Tracer refuses any lab whose
321
+ `<VERSION>` build differs from its own, so the correct value is whatever build
322
+ is installed on *your* machine, and the skill detects it:
323
+
324
+ 1. `PACKET_TRACER_TARGET_VERSION`, if you set it
325
+ 2. the Packet Tracer binary's own version resource (Windows)
326
+ 3. a lab the local install has saved
327
+ 4. the install directory name, which gives a release but no build
328
+
329
+ Steps 2 and 3 are the ones that yield a full four-field build. Only a donor
330
+ carrying that exact build can serve as a generation base -- bundled Cisco
331
+ samples ship as `9.0.0.0000` and produce files Packet Tracer rejects.
332
+
333
+ Troubleshooting:
334
+
335
+ - `twofish_backend=pure_python` is the normal, fully supported state.
336
+ - `bridge_resolution=missing` means only that no compiled accelerator was
337
+ found. It does not block anything.
338
+ - `validate_open` readiness proves Packet Tracer can launch a file. Generation
339
+ additionally needs an eligible donor -- run `runtime_doctor.py` to see which.
340
+
341
+ ## Core Product Surfaces
342
+
343
+ The CLI is not only a generator entrypoint. It is also the inspection surface for deciding whether a request is safe. In normal development, start with the reporting commands before expecting a final `.pkt` output.
344
+
345
+ Use `--explain-plan` when you need the full decision payload:
293
346
 
294
347
  ```powershell
295
348
  python .\scripts\generate_pkt.py --explain-plan "6 department campus with router-on-a-stick, VLAN, DHCP, management VLAN, Telnet, ACL"
@@ -301,150 +354,150 @@ Use `--compare-scenarios` when you need scenario comparison:
301
354
  python .\scripts\generate_pkt.py --compare-scenarios "campus with VLAN DHCP ACL" --compare-scenarios "smart home with IoT registration" --matrix-out .\output\compare.json
302
355
  ```
303
356
 
304
- Use `--parity-report` for prompt-scoped capability readiness:
357
+ Use `--parity-report` for prompt-scoped capability readiness:
358
+
359
+ ```powershell
360
+ python .\scripts\generate_pkt.py --parity-report "service-heavy lab with DNS DHCP FTP email syslog AAA"
361
+ ```
362
+
363
+ Use `--feature-gap-report` for the Packet Tracer 9.0 feature atlas:
364
+
365
+ ```powershell
366
+ python .\scripts\generate_pkt.py --feature-gap-report
367
+ ```
368
+
369
+ ## GitHub Sample Ingestion Is Local/Cache-Only
370
+
371
+ The skill can search GitHub for public Packet Tracer sample repositories when you explicitly opt in with `--search-remote`. This is a developer workflow for collecting evidence, not a promise that downloaded labs become trusted donors or package assets.
372
+
373
+ Remote ingestion rules:
374
+
375
+ - imported `.pkt` and `.pka` files stay under `output/remote-import-cache` by default
376
+ - `output/remote-import-cache` is local-only and is not included in the npm package
377
+ - unknown or missing license metadata is treated as `reference_only`
378
+ - permissive-license repositories, such as MIT, only become curated donor candidates after decode and inventory validation
379
+ - decode-fail samples can contribute sample-path evidence, but they never create edit, donor-backed, or generate-ready claims
380
+ - final `.pkt` apply still uses the same `single-donor` safety rule
381
+
382
+ Preview GitHub candidates without downloading archives:
383
+
384
+ ```powershell
385
+ python .\scripts\generate_pkt.py --explain-plan "ipv6 ospf hsrp lab" --search-remote --remote-dry-run --max-remote-results 3
386
+ ```
387
+
388
+ Import into the local cache and write the audit report:
305
389
 
306
390
  ```powershell
307
- python .\scripts\generate_pkt.py --parity-report "service-heavy lab with DNS DHCP FTP email syslog AAA"
308
- ```
309
-
310
- Use `--feature-gap-report` for the Packet Tracer 9.0 feature atlas:
311
-
312
- ```powershell
313
- python .\scripts\generate_pkt.py --feature-gap-report
314
- ```
315
-
316
- ## GitHub Sample Ingestion Is Local/Cache-Only
317
-
318
- The skill can search GitHub for public Packet Tracer sample repositories when you explicitly opt in with `--search-remote`. This is a developer workflow for collecting evidence, not a promise that downloaded labs become trusted donors or package assets.
319
-
320
- Remote ingestion rules:
321
-
322
- - imported `.pkt` and `.pka` files stay under `output/remote-import-cache` by default
323
- - `output/remote-import-cache` is local-only and is not included in the npm package
324
- - unknown or missing license metadata is treated as `reference_only`
325
- - permissive-license repositories, such as MIT, only become curated donor candidates after decode and inventory validation
326
- - decode-fail samples can contribute sample-path evidence, but they never create edit, donor-backed, or generate-ready claims
327
- - final `.pkt` apply still uses the same `single-donor` safety rule
328
-
329
- Preview GitHub candidates without downloading archives:
330
-
331
- ```powershell
332
- python .\scripts\generate_pkt.py --explain-plan "ipv6 ospf hsrp lab" --search-remote --remote-dry-run --max-remote-results 3
333
- ```
334
-
335
- Import into the local cache and write the audit report:
336
-
337
- ```powershell
338
- python .\scripts\generate_pkt.py --explain-plan "ipv6 ospf hsrp lab" --search-remote --max-remote-results 3 --remote-audit-out output\remote-import-cache\remote-sample-audit.json
339
- ```
340
-
341
- ## Local Sample Audit Is Evidence-Only
342
-
343
- If you have your own Packet Tracer lab folder, audit it locally instead of copying raw `.pkt` files into this repo:
344
-
345
- ```powershell
346
- python .\scripts\generate_pkt.py --local-sample-audit-root "C:\path\to\pkt_examples"
347
- ```
348
-
349
- By default this writes `output/local-sample-audit.json`. That file is local-only and ignored by git/npm packaging. The audit reports total `.pkt/.pka` files, decode success/fail counts, detected config capabilities, top device types, and local promotion candidates. It is evidence for future proof waves, not a curated donor registry entry by itself.
350
-
351
- Use an explicit output path when you want to compare audit snapshots:
352
-
353
- ```powershell
354
- python .\scripts\generate_pkt.py --local-sample-audit-root "C:\path\to\pkt_examples" --local-sample-audit-out output\local-sample-audit.json
355
- ```
356
-
357
- Local evidence still follows the same maturity ladder: sample path evidence, decode evidence, inventory proof, editor roundtrip proof, donor-backed readiness, then possible generate readiness. Raw user-supplied `.pkt/.pka` files are not committed or published.
358
-
359
- The generated audit is local by design:
360
-
361
- - `repo_url`, license, default branch, import status
362
- - imported `.pkt` / `.pka` / README / LICENSE counts
363
- - decode success and failure counts
364
- - detected feature tags when decode succeeds
365
- - license-based candidate promotion status and decode-gated validation status
366
-
367
- The atlas now distinguishes report-only features, edit-proven features, and donor-backed edit readiness. IPv6/routing, IPv4 routing/NAT/IOS management, a constrained L2 security/monitoring subset, BGP + L2 resiliency IOS text edits, router-based CBAC/ZFW, a narrow WAN/security subset, and a narrow advanced-wireless subset can be edited with explicit commands. Real HTTP/WebSocket, OSPFv3, EIGRP IPv6, RIPng, HSRP, dot1x, ZFW, voice IOS, and selected programming script-file edits are donor-backed-ready proof paths. None of these are claimed as broad generate-ready without acceptance evidence.
368
-
369
- Support levels used by the atlas:
370
-
371
- - `not_mapped`: the feature is known as a Packet Tracer area, but this repo does not yet model it.
372
- - `inventory_known`: the feature can be discovered or inferred from sample/catalog evidence.
373
- - `report_supported`: prompts and reports can talk about the feature without claiming edits.
374
- - `edit_proven`: explicit command shapes have editor roundtrip evidence.
375
- - `donor_backed_ready`: a selected donor or proof-linked explicit edit path can safely carry the capability for a prompt-scoped workflow.
376
- - `generate_ready`: strict generate support is acceptance-backed for that scenario.
377
-
378
- Current feature-support truth:
379
-
380
- | Area | Current status | Safe action |
381
- | --- | --- | --- |
382
- | Campus / service-heavy / Home IoT / WAN-security scenario families | Donor-aware planning and parity/report surfaces | Use `--explain-plan`, `--compare-scenarios`, and donor proof docs before strict generate claims |
383
- | IPv6/routing | OSPFv3, EIGRP IPv6, RIPng, and HSRP are donor-backed ready for explicit edit paths; SLAAC and DHCPv6 stateful remain edit-proven; tunneling, ISATAP, prefix delegation, and AAAA DNS remain report-first | Use explicit router/interface commands; strict generate still needs selected-donor acceptance |
384
- | IPv4 routing/management | OSPFv2, EIGRP IPv4, RIPv2, static/default route, DHCP relay, NAT/PAT, SSH, NTP, and syslog are edit-proven only for explicit IOS text commands | Use named router/interface commands; do not claim route convergence, NAT policy synthesis, or topology generation |
385
- | L2 security/monitoring | Explicit dot1x is donor-backed ready; QoS and the rest of the explicit L2 subset remain edit-proven | Use explicit DHCP snooping, DAI, dot1x, QoS, LLDP, REP, SNMP, NetFlow, SPAN/RSPAN, and port-security commands |
386
- | L2 resiliency + BGP | BGP, STP/RSTP, EtherChannel, LACP/PAgP, VTP, and DTP are edit-proven only for explicit IOS text commands | Use named router/switch/interface commands; do not claim topology/link synthesis or protocol convergence |
387
- | WAN/security edge | Router ZFW is donor-backed ready; GRE, PPP, IPSec, VPN crypto-map, and CBAC are explicit-edit capable; ASA policies and multilayer switching remain report-only | Use explicit router edit commands; strict generate still needs selected-donor acceptance |
388
- | Advanced wireless | WEP and WPA Enterprise/RADIUS are explicit-edit capable; WLC, Meraki, cellular, Bluetooth, beamforming, and guest Wi-Fi remain report-only | Keep controller/cellular/Bluetooth claims in atlas/report mode until donor-backed proof exists |
389
- | Industrial programming | Real HTTP and Real WebSocket existing script files are donor-backed-ready for explicit edits; MQTT, Profinet, PTP, L2NAT, CyberObserver, and industrial firewall remain report-only | Use quoted device/app/file script edit commands only |
390
- | Automation/controller | Python, JavaScript, and TCP/UDP app files are donor-backed ready through existing script-file replacement; Network Controller, Blockly, and VM/IOx remain report-only | Use quoted device/app/file script edit commands only |
391
- | Voice/collaboration | IOS `telephony-service`, `ephone-dn`, `ephone`, and `dial-peer voice` commands are donor-backed ready; Linksys voice remains report-only | Use explicit router voice commands; do not claim broad Call Manager or phone GUI generation |
392
- | Physical/media gaps | Report-supported atlas entries | Do not claim edit/generate support until a proof wave promotes them |
393
-
394
- The important number is still `generate_ready=0` for the atlas gap families. That is deliberate: visibility comes first, then edit proof, then donor-backed readiness, and only then generate readiness. `donor_backed_ready` is now used for narrow explicit edit paths, not broad topology generation.
395
-
396
- For `--parity-report`, prefer the critical parity counters when reading a scenario-level answer:
397
- `critical_parity_donor_backed_ready_count` shows proof-linked donor readiness, while `critical_parity_generate_ready_count` only counts capabilities that are critical for the detected scenario family and generate-ready. Treat these `critical_*` counts as the release truth. The older total `parity_generate_ready_count` remains for backward compatibility, but it can include non-critical helper capabilities and should not be read as scenario-level generate readiness.
398
-
399
- Stable CLI surfaces:
400
-
401
- - `--explain-plan`
402
- - `--compare-scenarios`
403
- - `--matrix-out`
404
- - `--coverage-report`
405
- - `--feature-gap-report`
406
- - `--inventory-capabilities`
391
+ python .\scripts\generate_pkt.py --explain-plan "ipv6 ospf hsrp lab" --search-remote --max-remote-results 3 --remote-audit-out output\remote-import-cache\remote-sample-audit.json
392
+ ```
393
+
394
+ ## Local Sample Audit Is Evidence-Only
395
+
396
+ If you have your own Packet Tracer lab folder, audit it locally instead of copying raw `.pkt` files into this repo:
397
+
398
+ ```powershell
399
+ python .\scripts\generate_pkt.py --local-sample-audit-root "C:\path\to\pkt_examples"
400
+ ```
401
+
402
+ By default this writes `output/local-sample-audit.json`. That file is local-only and ignored by git/npm packaging. The audit reports total `.pkt/.pka` files, decode success/fail counts, detected config capabilities, top device types, and local promotion candidates. It is evidence for future proof waves, not a curated donor registry entry by itself.
403
+
404
+ Use an explicit output path when you want to compare audit snapshots:
405
+
406
+ ```powershell
407
+ python .\scripts\generate_pkt.py --local-sample-audit-root "C:\path\to\pkt_examples" --local-sample-audit-out output\local-sample-audit.json
408
+ ```
409
+
410
+ Local evidence still follows the same maturity ladder: sample path evidence, decode evidence, inventory proof, editor roundtrip proof, donor-backed readiness, then possible generate readiness. Raw user-supplied `.pkt/.pka` files are not committed or published.
411
+
412
+ The generated audit is local by design:
413
+
414
+ - `repo_url`, license, default branch, import status
415
+ - imported `.pkt` / `.pka` / README / LICENSE counts
416
+ - decode success and failure counts
417
+ - detected feature tags when decode succeeds
418
+ - license-based candidate promotion status and decode-gated validation status
419
+
420
+ The atlas now distinguishes report-only features, edit-proven features, and donor-backed edit readiness. IPv6/routing, IPv4 routing/NAT/IOS management, a constrained L2 security/monitoring subset, BGP + L2 resiliency IOS text edits, router-based CBAC/ZFW, a narrow WAN/security subset, and a narrow advanced-wireless subset can be edited with explicit commands. Real HTTP/WebSocket, OSPFv3, EIGRP IPv6, RIPng, HSRP, dot1x, ZFW, voice IOS, and selected programming script-file edits are donor-backed-ready proof paths. None of these are claimed as broad generate-ready without acceptance evidence.
421
+
422
+ Support levels used by the atlas:
423
+
424
+ - `not_mapped`: the feature is known as a Packet Tracer area, but this repo does not yet model it.
425
+ - `inventory_known`: the feature can be discovered or inferred from sample/catalog evidence.
426
+ - `report_supported`: prompts and reports can talk about the feature without claiming edits.
427
+ - `edit_proven`: explicit command shapes have editor roundtrip evidence.
428
+ - `donor_backed_ready`: a selected donor or proof-linked explicit edit path can safely carry the capability for a prompt-scoped workflow.
429
+ - `generate_ready`: strict generate support is acceptance-backed for that scenario.
430
+
431
+ Current feature-support truth:
432
+
433
+ | Area | Current status | Safe action |
434
+ | --- | --- | --- |
435
+ | Campus / service-heavy / Home IoT / WAN-security scenario families | Donor-aware planning and parity/report surfaces | Use `--explain-plan`, `--compare-scenarios`, and donor proof docs before strict generate claims |
436
+ | IPv6/routing | OSPFv3, EIGRP IPv6, RIPng, and HSRP are donor-backed ready for explicit edit paths; SLAAC and DHCPv6 stateful remain edit-proven; tunneling, ISATAP, prefix delegation, and AAAA DNS remain report-first | Use explicit router/interface commands; strict generate still needs selected-donor acceptance |
437
+ | IPv4 routing/management | OSPFv2, EIGRP IPv4, RIPv2, static/default route, DHCP relay, NAT/PAT, SSH, NTP, and syslog are edit-proven only for explicit IOS text commands | Use named router/interface commands; do not claim route convergence, NAT policy synthesis, or topology generation |
438
+ | L2 security/monitoring | Explicit dot1x is donor-backed ready; QoS and the rest of the explicit L2 subset remain edit-proven | Use explicit DHCP snooping, DAI, dot1x, QoS, LLDP, REP, SNMP, NetFlow, SPAN/RSPAN, and port-security commands |
439
+ | L2 resiliency + BGP | BGP, STP/RSTP, EtherChannel, LACP/PAgP, VTP, and DTP are edit-proven only for explicit IOS text commands | Use named router/switch/interface commands; do not claim topology/link synthesis or protocol convergence |
440
+ | WAN/security edge | Router ZFW is donor-backed ready; GRE, PPP, IPSec, VPN crypto-map, and CBAC are explicit-edit capable; ASA policies and multilayer switching remain report-only | Use explicit router edit commands; strict generate still needs selected-donor acceptance |
441
+ | Advanced wireless | WEP and WPA Enterprise/RADIUS are explicit-edit capable; WLC, Meraki, cellular, Bluetooth, beamforming, and guest Wi-Fi remain report-only | Keep controller/cellular/Bluetooth claims in atlas/report mode until donor-backed proof exists |
442
+ | Industrial programming | Real HTTP and Real WebSocket existing script files are donor-backed-ready for explicit edits; MQTT, Profinet, PTP, L2NAT, CyberObserver, and industrial firewall remain report-only | Use quoted device/app/file script edit commands only |
443
+ | Automation/controller | Python, JavaScript, and TCP/UDP app files are donor-backed ready through existing script-file replacement; Network Controller, Blockly, and VM/IOx remain report-only | Use quoted device/app/file script edit commands only |
444
+ | Voice/collaboration | IOS `telephony-service`, `ephone-dn`, `ephone`, and `dial-peer voice` commands are donor-backed ready; Linksys voice remains report-only | Use explicit router voice commands; do not claim broad Call Manager or phone GUI generation |
445
+ | Physical/media gaps | Report-supported atlas entries | Do not claim edit/generate support until a proof wave promotes them |
446
+
447
+ The important number is still `generate_ready=0` for the atlas gap families. That is deliberate: visibility comes first, then edit proof, then donor-backed readiness, and only then generate readiness. `donor_backed_ready` is now used for narrow explicit edit paths, not broad topology generation.
448
+
449
+ For `--parity-report`, prefer the critical parity counters when reading a scenario-level answer:
450
+ `critical_parity_donor_backed_ready_count` shows proof-linked donor readiness, while `critical_parity_generate_ready_count` only counts capabilities that are critical for the detected scenario family and generate-ready. Treat these `critical_*` counts as the release truth. The older total `parity_generate_ready_count` remains for backward compatibility, but it can include non-critical helper capabilities and should not be read as scenario-level generate readiness.
451
+
452
+ Stable CLI surfaces:
453
+
454
+ - `--explain-plan`
455
+ - `--compare-scenarios`
456
+ - `--matrix-out`
457
+ - `--coverage-report`
458
+ - `--feature-gap-report`
459
+ - `--inventory-capabilities`
407
460
  - `--doctor`
408
461
  - `--parity-report`
409
462
  - `--acceptance-json-out`
410
463
 
411
- ## Curated Donor and Fixture Truth Sources
412
-
413
- This repository keeps explicit truth sources for donor evidence and scenario regression:
414
-
415
- - `references/curated-donor-registry.json`
416
- - `references/scenario-fixture-corpus.json`
417
- - `references/packettracer-feature-atlas.json`
418
-
419
- Curated donor registry reference:
420
-
421
- - [docs/curated-donor-registry.md](docs/curated-donor-registry.md)
422
-
423
- The registry is not a marketing list. It is a control surface for deciding which donor classes can be trusted for which scenario families. A donor can be useful for inventory and proof while still being rejected for a larger prompt if the skeleton does not safely match the requested topology.
424
-
425
- Current selector truth:
426
-
427
- - a registry-backed donor can be inventory-proof without being prompt-selected
428
- - selector output should explain the closest rejected donor class when generate is blocked
429
- - `best_rejected_donor_class` and `primary_rejection_code` are intended to keep donor-limited refusals specific
430
- - Home IoT readiness is only raised when the selected donor and prompt targets are both deterministic
431
- - WAN/security readiness is only raised for explicit WAN/security intent when the selected donor carries matching WAN, security, tunnel, or multilayer runtime evidence
432
- - Feature atlas entries are report-first; a feature can be visible in the atlas while still blocked for edit/generate.
433
-
434
- ## Known Working Scenario Set
435
-
436
- Public examples stay text-first and review-friendly. Raw `.pkt` binaries are not committed.
437
-
438
- These examples are not decorative screenshots. They are the public proof set for the current product contract. Each one is intended to show a scenario family that was actually exercised through donor-backed logic and then reduced into reviewable artifacts:
439
-
440
- - screenshot
441
- - inventory manifest
442
- - acceptance excerpt
443
- - parity excerpt
444
- - decision excerpt
445
- - runtime excerpt
446
-
447
- This is why the examples surface matters so much in release work. It is the shortest path from a marketing claim to a falsifiable engineering artifact.
464
+ ## Curated Donor and Fixture Truth Sources
465
+
466
+ This repository keeps explicit truth sources for donor evidence and scenario regression:
467
+
468
+ - `references/curated-donor-registry.json`
469
+ - `references/scenario-fixture-corpus.json`
470
+ - `references/packettracer-feature-atlas.json`
471
+
472
+ Curated donor registry reference:
473
+
474
+ - [docs/curated-donor-registry.md](docs/curated-donor-registry.md)
475
+
476
+ The registry is not a marketing list. It is a control surface for deciding which donor classes can be trusted for which scenario families. A donor can be useful for inventory and proof while still being rejected for a larger prompt if the skeleton does not safely match the requested topology.
477
+
478
+ Current selector truth:
479
+
480
+ - a registry-backed donor can be inventory-proof without being prompt-selected
481
+ - selector output should explain the closest rejected donor class when generate is blocked
482
+ - `best_rejected_donor_class` and `primary_rejection_code` are intended to keep donor-limited refusals specific
483
+ - Home IoT readiness is only raised when the selected donor and prompt targets are both deterministic
484
+ - WAN/security readiness is only raised for explicit WAN/security intent when the selected donor carries matching WAN, security, tunnel, or multilayer runtime evidence
485
+ - Feature atlas entries are report-first; a feature can be visible in the atlas while still blocked for edit/generate.
486
+
487
+ ## Known Working Scenario Set
488
+
489
+ Public examples stay text-first and review-friendly. Raw `.pkt` binaries are not committed.
490
+
491
+ These examples are not decorative screenshots. They are the public proof set for the current product contract. Each one is intended to show a scenario family that was actually exercised through donor-backed logic and then reduced into reviewable artifacts:
492
+
493
+ - screenshot
494
+ - inventory manifest
495
+ - acceptance excerpt
496
+ - parity excerpt
497
+ - decision excerpt
498
+ - runtime excerpt
499
+
500
+ This is why the examples surface matters so much in release work. It is the shortest path from a marketing claim to a falsifiable engineering artifact.
448
501
 
449
502
  Canonical public examples:
450
503
 
@@ -464,58 +517,61 @@ Primary screenshot:
464
517
 
465
518
  ![Packet Tracer topology](examples/screenshots/complex_campus_master_edit_v4.png)
466
519
 
467
- Hero visual for the `0.2.3` capability release surface:
520
+ Hero visual for the `0.2.3` capability release and `0.2.4` candidate surface:
468
521
 
469
522
  - `examples/screenshots/complex_campus_master_edit_v4.png`
470
523
 
471
- The gallery is treated as a known working scenario set, not just a screenshot list, and the same canonical set feeds release notes and GitHub metadata.
472
-
473
- Canonical public proof:
474
-
475
- - [docs/campus-donor-proof.md](docs/campus-donor-proof.md)
476
- - [docs/home-iot-donor-proof.md](docs/home-iot-donor-proof.md)
477
- - [docs/wan-security-donor-proof.md](docs/wan-security-donor-proof.md)
478
- - [docs/l2-resiliency-bgp-proof.md](docs/l2-resiliency-bgp-proof.md)
479
- - [docs/ipv4-routing-management-proof.md](docs/ipv4-routing-management-proof.md)
480
- - [docs/l2-security-qos-proof.md](docs/l2-security-qos-proof.md)
481
- - [docs/security-edge-deepening-proof.md](docs/security-edge-deepening-proof.md)
482
-
483
- The campus donor proof is intentionally more specific than the gallery cards. It shows that a real donor artifact inventories correctly, but it also shows that a generalized campus prompt can still be donor-limited. That is exactly the kind of nuance the public docs should preserve.
484
-
485
- The Home IoT donor proof is intentionally narrower than a generic smart-home claim. It shows that donor-backed registration, rule control, and wireless association are integrated only inside a constrained path with explicit targets and a selected donor.
486
-
487
- The WAN/security donor proof is also conservative. It shows family-correct report/selection behavior, donor-backed readiness semantics, and a narrow explicit-edit subset for GRE, PPP, IPSec transform-set, and VPN crypto-map skeletons. It does not claim broad synthetic WAN/security configuration generation.
488
-
489
- The L2 resiliency + BGP proof is IOS text only. It can append explicit `router bgp`, `spanning-tree`, `channel-group`, `vtp`, and `switchport mode dynamic` lines when the router/switch and interfaces are named. It does not create redundant links, validate STP state, prove BGP convergence, or make these capabilities donor-backed/generate-ready.
490
-
491
- The IPv4 routing/management proof is IOS text only. It can append explicit `router ospf`, `router eigrp`, `router rip`, `ip route`, `ip helper-address`, `ip nat`, `ip ssh`, `ntp server`, and `logging host` lines when the router and interfaces are named. It does not synthesize routing designs, NAT pools, ACL policy, or convergence tests.
492
-
493
- The L2 security/QoS proof is explicit-command only. It can append IOS-style dot1x and QoS lines when the switch, interface, class-map, policy-map, direction, and optional RADIUS target are explicit. It does not create a full NAC design, supplicant profiles, RADIUS users, or broad QoS policy from intent alone.
494
-
495
- The security-edge deepening proof is router IOS only. It can append CBAC and ZFW line-based configuration for explicit targets. It does not mutate ASA GUI/internal state, clientless VPN, ASA service-policy, or broad security topology generation.
496
-
497
- Generate-ready pilot design is intentionally separate from implementation:
498
-
499
- - [docs/generate-ready-pilot-design.md](docs/generate-ready-pilot-design.md)
500
-
501
- That document exists to define the first possible acceptance-backed `generate_ready` pilot without opening it in the current batch.
502
-
503
- The advanced wireless proof is narrower again. It promotes only explicit WEP and WPA Enterprise/RADIUS edit semantics while keeping WLC, Meraki, cellular, Bluetooth, beamforming, and guest Wi-Fi in report-only atlas mode.
504
-
505
- The industrial programming proof is explicit-file-edit only. It can replace an existing Real HTTP or Real WebSocket script file when the device, app, and file names are quoted and uniquely resolved. It does not create apps, files, MQTT brokers, Profinet/PTP/L2NAT workflows, or broad Industrial IoT topologies.
506
-
507
- What the proof now tries to surface explicitly:
508
-
509
- - a real donor exists
510
- - inventory succeeds
511
- - the larger generalized prompt is still refused
512
- - the blocking layer is donor selection, not runtime
513
- - the closest rejected donor class and rejection code should be visible in the decision payload
514
-
515
- Classifier truth matters here too:
516
-
517
- - shorthand campus prompts should still resolve to the `campus` family
518
- - donor-limited campus refusal should be read as a campus selector result, not a service-heavy misclassification
524
+ The gallery is treated as a known working scenario set, not just a screenshot list, and the same canonical set feeds release notes and GitHub metadata.
525
+
526
+ Canonical public proof:
527
+
528
+ - [docs/campus-donor-proof.md](docs/campus-donor-proof.md)
529
+ - [docs/home-iot-donor-proof.md](docs/home-iot-donor-proof.md)
530
+ - [docs/wan-security-donor-proof.md](docs/wan-security-donor-proof.md)
531
+ - [docs/l2-resiliency-bgp-proof.md](docs/l2-resiliency-bgp-proof.md)
532
+ - [docs/ipv4-routing-management-proof.md](docs/ipv4-routing-management-proof.md)
533
+ - [docs/l2-security-qos-proof.md](docs/l2-security-qos-proof.md)
534
+ - [docs/security-edge-deepening-proof.md](docs/security-edge-deepening-proof.md)
535
+ - [docs/proof-readiness-dashboard.md](docs/proof-readiness-dashboard.md)
536
+
537
+ The campus donor proof is intentionally more specific than the gallery cards. It shows that a real donor artifact inventories correctly, but it also shows that a generalized campus prompt can still be donor-limited. That is exactly the kind of nuance the public docs should preserve.
538
+
539
+ The Home IoT donor proof is intentionally narrower than a generic smart-home claim. It shows that donor-backed registration, rule control, and wireless association are integrated only inside a constrained path with explicit targets and a selected donor.
540
+
541
+ The WAN/security donor proof is also conservative. It shows family-correct report/selection behavior, donor-backed readiness semantics, and a narrow explicit-edit subset for GRE, PPP, IPSec transform-set, and VPN crypto-map skeletons. It does not claim broad synthetic WAN/security configuration generation.
542
+
543
+ The L2 resiliency + BGP proof is IOS text only. It can append explicit `router bgp`, `spanning-tree`, `channel-group`, `vtp`, and `switchport mode dynamic` lines when the router/switch and interfaces are named. It does not create redundant links, validate STP state, prove BGP convergence, or make these capabilities donor-backed/generate-ready.
544
+
545
+ The IPv4 routing/management proof is IOS text only. It can append explicit `router ospf`, `router eigrp`, `router rip`, `ip route`, `ip helper-address`, `ip nat`, `ip ssh`, `ntp server`, and `logging host` lines when the router and interfaces are named. It does not synthesize routing designs, NAT pools, ACL policy, or convergence tests.
546
+
547
+ The L2 security/QoS proof is explicit-command only. It can append IOS-style dot1x and QoS lines when the switch, interface, class-map, policy-map, direction, and optional RADIUS target are explicit. It does not create a full NAC design, supplicant profiles, RADIUS users, or broad QoS policy from intent alone.
548
+
549
+ The security-edge deepening proof is router IOS only. It can append CBAC and ZFW line-based configuration for explicit targets. It does not mutate ASA GUI/internal state, clientless VPN, ASA service-policy, or broad security topology generation.
550
+
551
+ The proof-readiness dashboard is the next promotion queue. It combines proof cards, feature atlas state, and local sample evidence so the next donor-backed readiness work is chosen from evidence instead of random feature requests.
552
+
553
+ Generate-ready pilot design is intentionally separate from implementation:
554
+
555
+ - [docs/generate-ready-pilot-design.md](docs/generate-ready-pilot-design.md)
556
+
557
+ That document exists to define the first possible acceptance-backed `generate_ready` pilot without opening it in the current batch.
558
+
559
+ The advanced wireless proof is narrower again. It promotes only explicit WEP and WPA Enterprise/RADIUS edit semantics while keeping WLC, Meraki, cellular, Bluetooth, beamforming, and guest Wi-Fi in report-only atlas mode.
560
+
561
+ The industrial programming proof is explicit-file-edit only. It can replace an existing Real HTTP or Real WebSocket script file when the device, app, and file names are quoted and uniquely resolved. It does not create apps, files, MQTT brokers, Profinet/PTP/L2NAT workflows, or broad Industrial IoT topologies.
562
+
563
+ What the proof now tries to surface explicitly:
564
+
565
+ - a real donor exists
566
+ - inventory succeeds
567
+ - the larger generalized prompt is still refused
568
+ - the blocking layer is donor selection, not runtime
569
+ - the closest rejected donor class and rejection code should be visible in the decision payload
570
+
571
+ Classifier truth matters here too:
572
+
573
+ - shorthand campus prompts should still resolve to the `campus` family
574
+ - donor-limited campus refusal should be read as a campus selector result, not a service-heavy misclassification
519
575
 
520
576
  ## Security and Privacy
521
577
 
@@ -540,18 +596,34 @@ See also:
540
596
  - [docs/release-checklist.md](docs/release-checklist.md)
541
597
  - [docs/github-discussions-setup.md](docs/github-discussions-setup.md)
542
598
 
543
- ## Release and Launch State
544
-
545
- The npm package line is advancing to `packet-tracer-skill@0.2.3`. This release is a capability proof and readiness release, not a broad generate-ready release. The GitHub README, npm README, changelog, release notes, proof docs, and feature atlas should all say the same thing: the skill can recognize more Packet Tracer features, edit more explicit IOS/script surfaces, and report donor-backed readiness for more narrow paths, while still refusing broad unsupported generation.
546
-
547
- So the current state is no longer "preparing an experiment." The package line is public and the `0.2.3` release freezes a real capability batch. The remaining launch ops are about making the public surface operationally complete:
548
-
549
- - GitHub release object should match the published npm state
550
- - About/Topics should match the README and launch wording
551
- - Discussions should exist as the feedback intake surface
552
- - donor proof should exist as the first post-launch technical evidence layer
553
-
554
- That is the difference between "published" and "productized." The release can be installed from npm, but GitHub release notes, About/Topics, Discussions, and follow-up proof artifacts are what make it operationally coherent.
599
+ ## Release and Launch State
600
+
601
+ The current line is `packet-tracer-skill@0.3.1`, and it is the first release
602
+ where generation is the headline rather than a deferred promise. `0.2.3`, the
603
+ previous published line, was a capability proof and readiness release that
604
+ deliberately refused broad generation.
605
+
606
+ What changed is measurable and was measured against live Packet Tracer: the
607
+ corpus generates 32 of 33 scenarios and Packet Tracer opens 32 of 32, 657 tests
608
+ pass, and connectivity is confirmed with real pings rather than file inspection.
609
+ Three defects that had made generated WAN labs unopenable were found and fixed —
610
+ a rejected donor rewriting the request, interface names invented from an assumed
611
+ switch model, and serial cables with no clocking end declared — along with the
612
+ open check itself, which had been giving false verdicts often enough to send
613
+ investigations after defects that were not there.
614
+
615
+ The candidate line after this one is `0.2.4`'s remaining product-hardening work:
616
+ Examples Truth 2.0, proof-card discoverability, local sample evidence
617
+ presentation, and proof-readiness promotion planning.
618
+
619
+ So the current state is no longer "preparing an experiment." The `0.2.3` package line is public, and the `0.2.4` candidate is about making the public proof surface operationally complete:
620
+
621
+ - examples should clearly distinguish `showcase_example` and `proof_card`
622
+ - proof-readiness candidates should show why a feature is not yet donor-backed-ready
623
+ - local sample evidence should be summarized without publishing raw `.pkt/.pka`
624
+ - GitHub metadata should match the published `0.2.3` state and next `0.2.4` candidate wording
625
+
626
+ That is the difference between "published" and "productized." The release can be installed from npm, but examples truth, proof cards, promotion queues, GitHub metadata, and follow-up proof artifacts are what make it operationally coherent.
555
627
 
556
628
  Recommended local validation before release:
557
629
 
@@ -563,65 +635,126 @@ python .\scripts\generate_pkt.py --parity-report "campus with VLAN DHCP ACL"
563
635
  python .\scripts\runtime_doctor.py
564
636
  ```
565
637
 
566
- Launch ops references:
567
-
568
- - [docs/release-checklist.md](docs/release-checklist.md)
569
- - [docs/publish-preview-roadmap.md](docs/publish-preview-roadmap.md)
570
- - [docs/discovery-keywords.md](docs/discovery-keywords.md)
571
- - [docs/github-metadata.md](docs/github-metadata.md)
572
- - [docs/github-launch-ops-0.2.2.md](docs/github-launch-ops-0.2.2.md)
573
- - [docs/post-launch-follow-up.md](docs/post-launch-follow-up.md)
574
-
575
- ## Azerbaijani Summary
576
-
577
- Bu repo Cisco Packet Tracer 9.x `.pkt` faylları üçün təbii dilə əsaslanan planlama, analiz, edit, parity hesabatı və donor-backed workflow yaradır. Məqsəd sadəcə promptdan topologiya şəkli çıxarmaq deyil. Məqsəd Packet Tracer-in real fayl formatına uyğun, açılan, yoxlanıla bilən və səhv olanda səbəbini izah edən daha etibarlı skill təqdim etməkdir.
578
-
579
- Skill promptu əvvəl scenario family və capability-lərə ayırır, sonra həmin tələbi feature atlas, curated donor registry, runtime doctor, parity report və proof docs ilə yoxlayır. Uyğun donor, runtime bridge, deterministic target və ya acceptance sübutu zəifdirsə, sistem final `.pkt` yaratmaq əvəzinə səbəbli refusal verir. Bu davranış qəsdəndir: faylı korlamaqdansa, nə çatışmadığını və növbəti ən doğru addımı göstərmək daha təhlükəsizdir.
580
-
581
- Əsas public səthlər:
582
-
583
- - `--explain-plan`: promptun hansı scenario family və capability-lərə çevrildiyini, hansı donor və readiness qərarlarının verildiyini göstərir.
584
- - `--compare-scenarios`: bir neçə promptu eyni matrix üzərində müqayisə edir və hansı ailənin report-supported, edit-proven, donor-limited və ya unsupported olduğunu göstərir.
585
- - `--parity-report`: tələb olunan capability-lərin inventory, edit, donor-backed readiness, generate və acceptance səviyyəsində vəziyyətini izah edir.
586
- - `--feature-gap-report`: Packet Tracer 9.0-da mövcud olub skill-də hələ tam məhsullaşmamış sahələri atlas/backlog kimi göstərir.
587
- - `--local-sample-audit-root`: istifadəçinin lokal `.pkt/.pka` nümunə qovluğunu audit edir, decode nəticələrini və capability evidence-ni çıxarır, amma raw faylları repo-ya və npm paketinə daxil etmir.
588
- - `--doctor`: real `.pkt` runtime üçün Packet Tracer install, donor path, Twofish bridge və blocked/ready operations vəziyyətini yoxlayır.
589
- - examples gallery və proof docs: screenshot, inventory manifest, acceptance excerpt və donor proof ilə public iddiaları yoxlanıla bilən artefaktlara bağlayır.
590
-
591
- `0.2.3` release-in əsas dəyəri budur: skill Packet Tracer feature-lərini daha geniş tanıyır, daha çox explicit IOS/script edit path-i roundtrip proof ilə qoruyur və daha çox narrow path üçün donor-backed readiness göstərə bilir. Amma bu release hələ universal generate release deyil. `generate_ready=0` açıq saxlanılır, çünki geniş synthetic generation yalnız single-donor, deterministic inventory və acceptance JSON sübutu ilə açılmalıdır.
592
-
593
- Hazırda ən güclü sahələr:
594
-
595
- - campus və service-heavy lab planning, parity və reporting
596
- - donor-backed Home IoT constrained edits
597
- - WAN/security edge report və donor-backed readiness semantics
598
- - WAN/security edge üçün GRE, PPP, IPSec transform-set, VPN crypto-map, router CBAC və ZFW explicit edit semantics
599
- - IPv6/routing üçün OSPFv3, EIGRP IPv6, RIPng və HSRP donor-backed-ready subset
600
- - IPv4 routing/NAT/IOS management üçün OSPFv2, EIGRP IPv4, RIPv2, static/default route, DHCP relay, NAT/PAT, SSH, NTP və syslog explicit edit-proven subset
601
- - L2 security/monitoring üçün DHCP snooping, DAI, dot1x, QoS, SNMP, NetFlow və SPAN kimi explicit edit/report path-lər
602
- - BGP və L2 resiliency üçün STP/RSTP, EtherChannel/LACP/PAgP, VTP və DTP explicit IOS edit semantics
603
- - advanced wireless üçün WEP və WPA Enterprise/RADIUS explicit edit semantics
604
- - automation/controller və industrial programming üçün Python, JavaScript, TCP/UDP, Real HTTP və Real WebSocket existing script-file explicit edits
605
- - voice/collaboration üçün IOS telephony-service, ephone-dn/ephone və dial-peer voice explicit edit semantics
606
-
607
- Hələ konservativ saxlanan sahələr:
608
-
609
- - broad synthetic generate bütün Packet Tracer feature-ləri üçün açıq deyil
610
- - BGP/STP/EtherChannel/VTP/DTP üçün link/topology synthesis və protocol convergence iddiası edilmir
611
- - WLC, Meraki, cellular, Bluetooth, beamforming və guest Wi-Fi əsasən report-only qalır
612
- - Linksys voice, Network Controller GUI, Blockly visual graph, VM/IOx və physical/media feature-lər atlasda görünür, amma edit/generate iddiası almır
613
- - industrial MQTT, Profinet, PTP, L2NAT, CyberObserver və industrial firewall report-only qalır
614
- - repo-local self-contained runtime readiness iddia edilmir; external bridge-assisted validation ayrıca göstərilir
615
- - lokal `pkt_examples` və remote GitHub sample importları evidence source-dur, public curated truth və ya npm package content deyil
616
-
617
- Hazırkı release prioriteti:
618
-
619
- - `0.2.3` capability release-i dondurmaq və npm/GitHub ilə hizalamaq
620
- - README, npm package, changelog, release notes və proof docs arasında terminologiya drift-ni bağlamaq
621
- - scenario truth source, donor registry və runtime doctor contract consistency-ni qorumaq
622
- - feature atlas üzərindən Packet Tracer-də qalan bütün boşluqları görünən backlog kimi saxlamaq
623
- - yeni capability-ləri yalnız inventory proof, edit roundtrip proof, deterministic target resolution və donor-backed acceptance olduqda yüksəltmək
624
-
625
- ## License
626
-
627
- This project is licensed under the MIT License.
638
+ Launch ops references:
639
+
640
+ - [docs/release-checklist.md](docs/release-checklist.md)
641
+ - [docs/publish-preview-roadmap.md](docs/publish-preview-roadmap.md)
642
+ - [docs/discovery-keywords.md](docs/discovery-keywords.md)
643
+ - [docs/github-metadata.md](docs/github-metadata.md)
644
+ - [docs/github-launch-ops-0.2.3.md](docs/github-launch-ops-0.2.3.md)
645
+ - [docs/post-launch-follow-up.md](docs/post-launch-follow-up.md)
646
+ - [docs/proof-readiness-dashboard.md](docs/proof-readiness-dashboard.md)
647
+
648
+ ## Azərbaycanca
649
+
650
+ Bu repo Cisco Packet Tracer 9.x `.pkt` faylları üçün təbii dildən laboratoriya
651
+ qurur, mövcud faylı redaktə edir və hər iddiasını ölçü ilə əsaslandırır. Verdiyi
652
+ fayl Packet Tracer-də açılır və cihazları bir-birini ping edir; alınmayanda
653
+ səbəbini açıq deyir.
654
+
655
+ ### `0.3.1` nə dəyişdi
656
+
657
+ Bu, promptun Packet Tracer-in açdığı fayla çevrildiyi ilk buraxılışdır.
658
+
659
+ | Ölçü | Nəticə |
660
+ | --- | --- |
661
+ | korpusda qurulan ssenari | 33-dən 32 (33-cü heç bir cihaz istəmir, rədd edilir) |
662
+ | onlardan Packet Tracer-in açdığı | 32-dən 31 |
663
+ | testlər | 833 keçdi, 1 ötürüldü |
664
+ | DHCP laboratoriyası | 4 kompüter routerin hovuzundan ünvan aldı, şlüzə və bir-birinə 4/4 ping |
665
+ | icarə xətti (leased line) | trafik `Serial0/1/1 <-> Serial0/1/0` üzərindən 4/4 keçdi |
666
+ | ev routeri laboratoriyası | hər iki host şlüzə və bir-birinə 4/4 ping etdi -- kabel və Wi-Fi, açıq və WPA2 |
667
+
668
+ Ping rəqəmləri cihazların özündə `ping` işlədilməklə alınıb. Bu layihədə bütün
669
+ statik yoxlamaları keçən, amma heç nəyin ping etmədiyi laboratoriyalar olub.
670
+
671
+ **Wi-Fi laboratoriyasını yoxlayarkən bilməli olduğunuz bir şey.** Fayl açılan
672
+ kimi simsiz klienti bir dəfə oxusanız, xarab görünəcək: port `up` və `linked`,
673
+ `ip 0.0.0.0`, radio danışılmamış sürətdə. Bu **ilk oxunuşdur** və heç nə demir --
674
+ klient hələ icarəsini almayıb. İkinci dəfə oxuyun: ünvanı olur və ping edir.
675
+ Packet Tracer-in özünün yaddaşa verdiyi, saniyələr əvvəl 4/4 ping edən fayl da
676
+ yenidən açılanda eyni cür oxunur -- səhv olanın lab yox, oxunuş olduğunu bundan
677
+ bilirik.
678
+
679
+ ### Nə düzəldildi
680
+
681
+ Generasiya edilən hər WAN laboratoriyası açılmırdı və bunun arxasında bir-birini
682
+ gizlədən üç defekt vardı:
683
+
684
+ 1. **Seçilməyən donor tələbi yenidən yazırdı.** Sınanan ilk donor WAN-ı daşıya
685
+ bilmirdisə, planlanmış `R1 Serial0/0/0 <-> R2 Serial0/0/0` xəttini misə
686
+ çevirirdi, və bundan sonra heç bir mərhələ serial istənildiyini bilmirdi.
687
+ Topologiya tələbdən yox, donorun formasından çıxırdı.
688
+ 2. **Port adları cihazdan alınmırdı, güman edilən modeldən uydurulurdu.**
689
+ Portlarını `FastEthernet0/1, 1/1 … 9/1` kimi nömrələyən switch-dən
690
+ `FastEthernet0/2` istənilirdi. Eyni fayl uplink `FastEthernet2/1`-ə keçəndə
691
+ açılır.
692
+ 3. **Serial kabelin clock ucu (DCE) elan olunmurdu.** Donorların hər serial
693
+ xəttində var idi, bizimkilərin heç birində yox.
694
+
695
+ Bunlardan ikisi yalnız ölçü aləti düzəldiləndən sonra görünə bildi. Açılış
696
+ yoxlaması eyni fayla beş sınaqdan ikisində yalan cavab verirdi.
697
+
698
+ ### Necə işləyir
699
+
700
+ Skill promptu ssenari ailəsinə və tələb olunan imkanlara ayırır, uyğun donor
701
+ laboratoriya seçir, onu tələbə uyğun budayıb yenidən kabelləyir, sonra nəticəni
702
+ yoxlayır. Donor, runtime və ya sübut zəifdirsə, yarımçıq fayl vermək əvəzinə
703
+ səbəbli imtina qaytarır. Faylı korlamaqdansa nəyin çatışmadığını demək daha
704
+ təhlükəsizdir.
705
+
706
+ ### Başlamaq üçün
707
+
708
+ ```bash
709
+ npx packet-tracer-skill --doctor
710
+ python scripts/generate_pkt.py --prompt "1 router 1 switch 4 komputer, DHCP ile avtomatik IP payla" --output lab.pkt
711
+ ```
712
+
713
+ Faydalı bayraqlar:
714
+
715
+ - `--doctor` — Packet Tracer quraşdırması, donor yolu və hansı əməliyyatların
716
+ hazır olduğunu göstərir
717
+ - `--explain-plan` — promptun hansı ssenariyə çevrildiyini və hansı donorun niyə
718
+ seçildiyini açır
719
+ - `--parity-report` — tələb olunan imkanların hansı səviyyədə dəstəkləndiyini
720
+ göstərir
721
+ - `--feature-gap-report` — Packet Tracer 9.0-da olub skilldə hələ tam
722
+ məhsullaşmamış sahələri sadalayır
723
+ - `--local-sample-audit-root` — öz `.pkt/.pka` qovluğunuzu audit edir; xam
724
+ fayllar nə repoya, nə də npm paketinə düşmür
725
+
726
+ ### Hazırda güclü olan sahələr
727
+
728
+ - kampus və servis yüklü laboratoriyaların planlanması, redaktəsi və hesabatı
729
+ - VLAN, DHCP, ACL, NAT/PAT, statik və dinamik marşrutlaşdırma (OSPF, EIGRP,
730
+ RIP), SSH/NTP/syslog kimi əmr formaları üçün sübutlanmış redaktə yolları
731
+ - router-router serial WAN — planlanır, qurulur, açılır və trafik keçir
732
+ - L2 təhlükəsizliyi və monitorinqi: DHCP snooping, DAI, dot1x, QoS, SNMP,
733
+ NetFlow, SPAN
734
+ - STP/RSTP, EtherChannel, VTP, DTP və BGP üçün IOS mətn redaktəsi
735
+ - səs və avtomatlaşdırma: `telephony-service`, `ephone`, `dial-peer`, mövcud
736
+ Python/JavaScript/TCP/UDP skript fayllarının dəyişdirilməsi
737
+
738
+ ### Hələ konservativ qalan sahələr
739
+
740
+ - atlasdakı `generate_ready` sayğacı qəsdən `0`-dır: o, daha sərt, hər xüsusiyyət
741
+ üçün ayrıca qəbul qapısıdır və yuxarıdakı generasiya ilə eyni şey deyil
742
+ - switch-lər arasında fiber uplink: 140 laboratoriyanın heç bir switch-ində
743
+ fiber port yoxdur, ona görə donordan əldə edilə bilmir
744
+ - WLC, Meraki, mobil şəbəkə, Bluetooth və qonaq Wi-Fi əsasən yalnız hesabat
745
+ səviyyəsindədir
746
+ - sənaye protokolları (MQTT, Profinet, PTP, L2NAT) hesabat səviyyəsində qalır
747
+ - cihaz əhatəsi genişlənir, amma hələ Packet Tracer palitrasının hamısını
748
+ əhatə etmir
749
+
750
+ ### Növbəti işlər
751
+
752
+ - port adlarının kodda deyil, hər zaman cihazın öz kataloqundan alınması
753
+ - topologiyanın tələbdən çıxması: core/distribution/access strukturu, rola görə
754
+ fərqli switch modelləri, uplinklərdə fiber
755
+ - cihaz və kabel əhatəsinin genişləndirilməsi
756
+ - hər yeni imkanın yalnız canlı Packet Tracer-də ölçüldükdən sonra elan edilməsi
757
+
758
+ ## License
759
+
760
+ This project is licensed under the MIT License.