packet-tracer-skill 0.2.2 → 0.3.0

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 (66) hide show
  1. package/CHANGELOG.md +424 -42
  2. package/README.md +535 -250
  3. package/SKILL.md +337 -262
  4. package/bin/packet-tracer-skill.js +29 -2
  5. package/docs/automation-controller-proof.md +35 -0
  6. package/docs/curated-donor-registry.md +11 -0
  7. package/docs/generate-ready-pilot-design.md +30 -0
  8. package/docs/github-launch-ops-0.2.3.md +37 -0
  9. package/docs/github-metadata.md +6 -4
  10. package/docs/hero-demo-plan.md +1 -1
  11. package/docs/home-iot-donor-proof.md +4 -4
  12. package/docs/industrial-programming-proof.md +48 -0
  13. package/docs/ipv4-routing-management-proof.md +37 -0
  14. package/docs/l2-resiliency-bgp-proof.md +60 -0
  15. package/docs/l2-security-qos-proof.md +59 -0
  16. package/docs/packet-tracer-feature-gap-atlas.md +174 -17
  17. package/docs/post-launch-follow-up.md +9 -5
  18. package/docs/proof-readiness-dashboard.md +69 -0
  19. package/docs/publish-preview-roadmap.md +6 -5
  20. package/docs/release-checklist.md +27 -13
  21. package/docs/release-notes-0.2.2.md +1 -1
  22. package/docs/release-notes-0.2.3.md +59 -0
  23. package/docs/release-notes-0.2.4.md +20 -0
  24. package/docs/runtime-truth.md +33 -8
  25. package/docs/security-edge-deepening-proof.md +65 -0
  26. package/docs/voice-collaboration-proof.md +38 -0
  27. package/docs/wan-security-donor-proof.md +20 -3
  28. package/examples/README.md +98 -69
  29. package/examples/complex_campus_master_edit_v4.inventory.json +12 -2
  30. package/examples/gallery.md +94 -6
  31. package/examples/home_iot_cli_edit_v1.inventory.json +11 -2
  32. package/examples/index.json +932 -4
  33. package/examples/local-sample-evidence.json +24 -0
  34. package/examples/proof-cards.json +117 -0
  35. package/examples/service_heavy_cli_edit_v1.inventory.json +11 -2
  36. package/package.json +60 -44
  37. package/pytest.ini +9 -0
  38. package/references/packettracer-feature-atlas.json +67 -17
  39. package/references/packettracer-sample-catalog.json +45287 -4525
  40. package/references/packettracer-sample-catalog.md +599 -259
  41. package/references/proof-readiness-candidates.json +352 -0
  42. package/scripts/build_examples_index.py +228 -35
  43. package/scripts/build_sample_catalog.py +24 -44
  44. package/scripts/corpus_runner.py +430 -0
  45. package/scripts/coverage_matrix.py +1842 -1319
  46. package/scripts/donor_cache.py +354 -0
  47. package/scripts/donor_diagnostics.py +3 -1
  48. package/scripts/feature_atlas.py +65 -1
  49. package/scripts/generate_pkt.py +8762 -4070
  50. package/scripts/intent_parser.py +2242 -1138
  51. package/scripts/local_donors.py +340 -0
  52. package/scripts/packet_tracer_env.py +846 -391
  53. package/scripts/pkt_annotate.py +218 -0
  54. package/scripts/pkt_codec.py +420 -181
  55. package/scripts/pkt_editor.py +2405 -1226
  56. package/scripts/pkt_transformer.py +1072 -727
  57. package/scripts/pkt_verify.py +461 -0
  58. package/scripts/remote_search.py +197 -21
  59. package/scripts/runtime_doctor.py +80 -29
  60. package/scripts/sample_catalog.py +1372 -1195
  61. package/scripts/twofish_diagnostics.py +48 -31
  62. package/scripts/usage_ledger.py +218 -0
  63. package/scripts/vendor/README.md +44 -37
  64. package/scripts/vendor/twofish_pure.py +321 -0
  65. package/scripts/workspace_repair.py +548 -508
  66. package/templates/pt900/donors/README.md +15 -0
@@ -1036,12 +1036,39 @@ function main() {
1036
1036
  }
1037
1037
  }
1038
1038
  printEnvExamples(runtimeDoctor);
1039
- const failed = checks.some(([, ok]) => !ok);
1039
+ // The verdict follows the checks that decide whether anything is
1040
+ // actually blocked, not "did any line print MISSING". A fresh install
1041
+ // reported `RUNTIME_GRADE ready`, `BLOCKED_OPERATIONS none` and every
1042
+ // capability ready, and then closed with "Runtime is not fully ready"
1043
+ // and exit 1 -- because `TWOFISH_SHA256` is a checksum of the optional
1044
+ // compiled bridge, which is absent by design when the vendored
1045
+ // pure-Python engine is in use. A first-time user reads that as a failed
1046
+ // install.
1047
+ const status = checkMap(checks);
1048
+ const isClear = (name) => {
1049
+ const entry = status.get(name);
1050
+ if (!entry) return true;
1051
+ const detail = (entry.detail || "").trim().toLowerCase();
1052
+ return entry.ok || detail === "" || detail === "none";
1053
+ };
1054
+ const gradeEntry = status.get("RUNTIME_GRADE");
1055
+ const grade = (gradeEntry && gradeEntry.detail ? gradeEntry.detail : "").trim();
1056
+ const failed =
1057
+ (grade !== "" && grade !== "ready") ||
1058
+ !isClear("RUNTIME_BLOCKERS") ||
1059
+ !isClear("BLOCKED_OPERATIONS");
1040
1060
  if (failed) {
1041
1061
  console.error("\nRuntime is not fully ready. Install copies are fine, but Packet Tracer generation still needs the missing items above.");
1042
1062
  process.exit(1);
1043
1063
  }
1044
- console.log("\nRuntime looks ready.");
1064
+ const informational = checks.filter(([, ok]) => !ok).map(([name]) => name);
1065
+ if (informational.length > 0) {
1066
+ console.log(
1067
+ `\nRuntime looks ready. Optional items not present: ${informational.join(", ")}.`
1068
+ );
1069
+ } else {
1070
+ console.log("\nRuntime looks ready.");
1071
+ }
1045
1072
  process.exit(0);
1046
1073
  }
1047
1074
 
@@ -0,0 +1,35 @@
1
+ # Automation Controller Proof
2
+
3
+ This proof covers the narrow automation/controller wave for Packet Tracer programming surfaces. It is explicit script-file edit proof, not Network Controller GUI synthesis or broad automation topology generation.
4
+
5
+ ## What This Proves
6
+
7
+ - Inventory can report existing Python, JavaScript, Blockly, and TCP/UDP app files without dumping full source code.
8
+ - Existing Python and JavaScript script files can be replaced when the prompt quotes the device name, app name, and file name.
9
+ - TCP/UDP test app JavaScript files can be edited through the same deterministic existing-file path.
10
+ - `python_programming`, `javascript_programming`, and `tcp_udp_app` can be treated as `edit_proven` for explicit script-file edits.
11
+ - `python_programming`, `javascript_programming`, and `tcp_udp_app` are `donor_backed_ready` for explicit existing-file edits because the proof gate has sample, decode, parser, and editor roundtrip evidence.
12
+
13
+ ## What This Does Not Prove
14
+
15
+ - It does not create Network Controller projects, apps, or files.
16
+ - It does not mutate Blockly visual graphs beyond inventory/report truth.
17
+ - It does not create or run VM/IOx workloads.
18
+ - It does not synthesize controller policies, REST workflows, or TCP/UDP applications from a broad prompt.
19
+ - It does not make any automation/controller feature `generate_ready`.
20
+
21
+ ## Explicit Edit Shape
22
+
23
+ ```text
24
+ set "python" script app "New Project (Python)" file "main.py" content "print(\"ok\")"
25
+ set "javascript" script app "New Project (JavaScript)" file "main.js" content "console.log(\"ok\")"
26
+ set "PC0" script app "tcpServer" file "tcpServer.js" content "console.log(\"tcp\")"
27
+ ```
28
+
29
+ The editor refuses ambiguous or missing device/app/file targets. It replaces only existing file content and does not guess app names or create new programming surfaces.
30
+
31
+ ## Product Contract
32
+
33
+ - `python_programming`, `javascript_programming`, and `tcp_udp_app` can report `edit_supported=true` and `donor_backed_ready=true` only for explicit existing-file edit commands.
34
+ - `network_controller`, `blockly_programming`, and `vm_iox` remain report-only.
35
+ - All automation/controller features keep `generate_supported=false` until separate donor-backed acceptance evidence exists.
@@ -59,6 +59,17 @@ Those are related, but they are not the same claim.
59
59
  - registry-backed metadata overrides inferred metadata where the registry is more explicit
60
60
  - validation can still demote a registry entry if the actual donor is blocked or incompatible
61
61
 
62
+ ## Remote Sample Promotion Rules
63
+
64
+ GitHub sample ingestion is a local developer workflow, not a direct registry promotion path.
65
+
66
+ - remote `.pkt` and `.pka` files are imported only into `output/remote-import-cache`
67
+ - unknown, missing, or non-permissive license metadata stays `reference_only`
68
+ - permissive-license metadata can only create a `validated_curated` candidate after decode and inventory validation
69
+ - decode-fail samples can be recorded in `remote-sample-audit.json`, but they cannot create donor eligibility
70
+ - no remote sample becomes `acceptance_verified_curated` without checked acceptance fixtures and proof notes
71
+ - raw remote `.pkt` files are not committed and are not packed into npm artifacts
72
+
62
73
  ## Evidence Sources
63
74
 
64
75
  Selected donor summaries distinguish:
@@ -0,0 +1,30 @@
1
+ # Generate-Ready Pilot Design
2
+
3
+ This is a design artifact only. It does not enable `generate_ready`.
4
+
5
+ ## Candidate
6
+
7
+ The first safe pilot should use a narrow campus or service-heavy flow that already has fixture and donor evidence. The preferred pilot is `campus_core_complex` with a single `campus/core` donor class.
8
+
9
+ ## Required Gate
10
+
11
+ The pilot can only move to implementation when all of these are true:
12
+
13
+ - exactly one scenario family is in scope
14
+ - exactly one donor class is allowed
15
+ - exactly one fixture name is used as the regression truth source
16
+ - target inventory is deterministic
17
+ - final `.pkt` apply remains `single-donor`
18
+ - acceptance JSON proves openability, inventory expectations, parity expectations, and decision status
19
+
20
+ ## Explicit Non-Goals
21
+
22
+ - no L2/QoS generate-ready pilot
23
+ - no ASA/security generate-ready pilot
24
+ - no WLC/controller generate-ready pilot
25
+ - no broad topology synthesis
26
+ - no fallback guessed output when donor selection or acceptance is weak
27
+
28
+ ## Next Step
29
+
30
+ Before implementation, add a short acceptance fixture proposal that names the donor path, expected inventory excerpt, expected parity excerpt, and the refusal condition when that donor is absent.
@@ -0,0 +1,37 @@
1
+ # GitHub Launch Ops for `v0.2.3`
2
+
3
+ `packet-tracer-skill@0.2.3` is the current published capability release. This runbook is the active launch-ops source for the published line.
4
+
5
+ ## Release Object
6
+
7
+ 1. Ensure tag `v0.2.3` points to the publish commit.
8
+ 2. Create or verify the GitHub Release title `v0.2.3`.
9
+ 3. Use `docs/release-notes-0.2.3.md` as the release body source.
10
+ 4. Keep the hero visual as `examples/screenshots/complex_campus_master_edit_v4.png`.
11
+
12
+ ## About And Topics
13
+
14
+ Use `docs/github-metadata.md` as the current source of truth.
15
+
16
+ The public wording should say:
17
+
18
+ - donor-backed
19
+ - open-first
20
+ - scenario-aware
21
+ - Windows-first runtime
22
+ - validated with external bridge override
23
+
24
+ Do not claim repo-local self-contained runtime readiness unless `runtime_doctor` semantics change.
25
+
26
+ ## Discussions
27
+
28
+ Recommended categories:
29
+
30
+ - `Showcase`
31
+ - `Q&A`
32
+ - `Donor Requests`
33
+ - `Capability Roadmap`
34
+
35
+ ## Next Candidate
36
+
37
+ `0.2.4` is a candidate product-hardening patch for Examples Truth 2.0, proof-card discoverability, local sample evidence, and proof-readiness promotion planning. It should not be presented as published until version, tag, npm, and release notes are finalized.
@@ -27,13 +27,15 @@ Pinned screenshot:
27
27
 
28
28
  Pinned caption:
29
29
 
30
- - `donor-backed complex campus proof artifact for the 0.2.2 public preview`
30
+ - `donor-backed complex campus proof artifact for the 0.2.3 capability release`
31
31
 
32
32
  ## Release Source
33
33
 
34
- - release title: `v0.2.2`
35
- - release body source: `docs/release-notes-0.2.2.md`
36
- - launch wording source: `docs/launch-announcement-0.2.2.md`
34
+ - current published release title: `v0.2.3`
35
+ - current release body source: `docs/release-notes-0.2.3.md`
36
+ - current launch ops source: `docs/github-launch-ops-0.2.3.md`
37
+ - next candidate release notes draft: `docs/release-notes-0.2.4.md`
38
+ - historical `0.2.2` launch wording remains archived in `docs/launch-announcement-0.2.2.md`
37
39
 
38
40
  ## Discussions Categories
39
41
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Goal
4
4
 
5
- Prepare one conservative hero demo flow for the `0.2.1` public preview surface without implying self-contained runtime readiness.
5
+ Prepare one conservative hero demo flow for the current `0.2.3` capability release and the next `0.2.4` candidate surface without implying self-contained runtime readiness.
6
6
 
7
7
  ## Prompt
8
8
 
@@ -25,15 +25,15 @@ Observed Home IoT proof facts:
25
25
  - IoT rule enable/disable state
26
26
  - donor-backed wireless association
27
27
 
28
- ## Donor-Backed Generate Interpretation
28
+ ## Donor-Backed Readiness Interpretation
29
29
 
30
30
  The current product contract for Home IoT is intentionally narrow:
31
31
 
32
- - `iot_registration`, `iot_control`, and `wireless_client_association` are only considered generate-ready when a selected donor exists
32
+ - `iot_registration`, `iot_control`, and `wireless_client_association` are only considered donor-backed ready when a selected donor exists
33
33
  - the selected donor must match `IoT/home gateway` or a compatible `wireless-heavy` shape
34
34
  - the prompt must name deterministic targets such as the thing, gateway/server, client, AP/router, and SSID
35
35
 
36
- This is why the public wording uses `donor-backed constrained-generate` rather than broad `smart home generate-ready`.
36
+ This is why the public wording uses `donor-backed constrained edit/readiness` rather than broad smart-home generation.
37
37
 
38
38
  ## What This Proves
39
39
 
@@ -45,7 +45,7 @@ This is why the public wording uses `donor-backed constrained-generate` rather t
45
45
  ## What This Does Not Prove
46
46
 
47
47
  - it does not prove free-form smart-home topology generation is solved
48
- - it does not prove every prompt mentioning IoT registration is generate-ready
48
+ - it does not prove every prompt mentioning IoT registration is donor-backed ready or generation ready
49
49
  - it does not remove the need for a selected donor and deterministic target resolution
50
50
  - it does not promote WAN/security features ahead of the next wave
51
51
 
@@ -0,0 +1,48 @@
1
+ # Industrial Programming Proof
2
+
3
+ This proof covers the narrow Packet Tracer programming surface promoted after the `0.2.2` baseline. It is intentionally donor-backed edit readiness, not generate-first support.
4
+
5
+ ## What This Proves
6
+
7
+ - Real HTTP and Real WebSocket samples expose stable existing script files in Packet Tracer XML.
8
+ - Inventory can report programming apps without dumping full source code.
9
+ - Explicit quoted commands can replace an existing script file when device, app, and file names are unique.
10
+ - Real HTTP and Real WebSocket can be treated as `edit_proven` for deterministic script-file edits.
11
+ - Real HTTP and Real WebSocket are the first `donor_backed_ready` atlas entries because they pass a validated proof gate: sample-backed inventory, decode evidence, explicit target resolution, and editor roundtrip proof.
12
+
13
+ ## What This Does Not Prove
14
+
15
+ - It does not claim broad Industrial IoT topology generation.
16
+ - It does not create new apps, new files, MQTT brokers, WebSocket servers, or Real HTTP services.
17
+ - It does not claim MQTT protocol mutation, Profinet, PTP, L2NAT, CyberObserver, or industrial firewall edit support.
18
+ - It does not make any industrial programming feature `generate_ready`.
19
+ - It does not create a new app or file when a donor lacks the named script target.
20
+
21
+ ## Explicit Edit Command Shape
22
+
23
+ ```text
24
+ set "Py: real http server 2" script app "New Project (Python)" file "main.py" content "from realhttp import *\nprint(\"ok\")"
25
+ set "WebSockets Client" script app "ws client (Python)" file "main.py" content "from realhttp import *\nclient = RealWSClient()\nprint(\"ok\")"
26
+ ```
27
+
28
+ The command is quoted on purpose. Packet Tracer app and device names often contain spaces, punctuation, and parentheses. Unquoted script mutation is not supported.
29
+
30
+ ## Donor-Backed Readiness Boundary
31
+
32
+ `donor_backed_ready` means the skill can safely apply an explicit existing-file script edit when the donor already contains the named device, app, and file. It does not mean broad prompt generation is ready.
33
+
34
+ Readiness requires all of these to be true:
35
+
36
+ - the feature is `real_http` or `real_websocket`
37
+ - the command quotes a device name, app name, existing file name, and replacement content
38
+ - inventory resolves exactly one matching target
39
+ - the editor roundtrip test proves the file content can be replaced and decoded again
40
+ - no new app, new file, MQTT broker, HTTP service, or WebSocket service is synthesized
41
+
42
+ ## Public Contract
43
+
44
+ - `real_http`, `real_websocket`, `python_programming`, and `javascript_programming` can report `edit_supported=true` only for explicit existing-file edits.
45
+ - `real_http` and `real_websocket` can report `donor_backed_ready=true` for explicit existing-file edits.
46
+ - `generate_supported=false` remains the expected result.
47
+ - `generate_mismatch_reason=supported_in_edit_only` is the intended parity wording.
48
+ - `mqtt`, `visual_scripting`, `ptp`, `profinet`, `l2nat`, `cyberobserver`, and `industrial_firewall` remain report-only until separate roundtrip proof exists.
@@ -0,0 +1,37 @@
1
+ # IPv4 Routing and IOS Management Proof
2
+
3
+ This proof wave uses the local user-supplied `pkt_examples` corpus as evidence input, not as public package content. The corpus contains many decodeable Packet Tracer labs with IPv4 routing, NAT/PAT, SSH, NTP, syslog, DHCP relay, and classic CCNA management patterns.
4
+
5
+ ## What Is Edit-Proven
6
+
7
+ The supported subset is explicit IOS `RUNNINGCONFIG` mutation only:
8
+
9
+ - OSPFv2 via `router ospf <process>` with `network <network> <wildcard> area <area>`
10
+ - `router eigrp <asn>` with IPv4 `network` and optional `no auto-summary`
11
+ - `router rip` with `version 2`, IPv4 `network`, and optional `no auto-summary`
12
+ - `ip route <network> <mask> <next-hop>` including default route
13
+ - interface-level `ip helper-address`
14
+ - interface-level `ip nat inside` and `ip nat outside`
15
+ - `ip nat inside source static <inside-local> <inside-global>`
16
+ - PAT overload with `ip nat inside source list <acl> interface <interface> overload`
17
+ - IOS SSH setup with domain, username/password, RSA modulus, and `ip ssh version 2`
18
+ - IOS `ntp server` and `logging host`
19
+
20
+ ## What This Proves
21
+
22
+ - The parser can classify IPv4 routing and management prompts as `ipv4_routing_management`.
23
+ - Explicit commands produce deterministic router operations.
24
+ - Existing IOS text config surfaces can roundtrip these command shapes.
25
+ - Parity can show these capabilities as `edit_supported=true`, `generate_supported=false`, and `generate_mismatch_reason=supported_in_edit_only`.
26
+ - Local sample audit can summarize user-supplied `.pkt/.pka` evidence without committing raw Packet Tracer files.
27
+
28
+ ## What This Does Not Prove
29
+
30
+ - It does not make any IPv4 routing, NAT, or IOS management capability `generate_ready`.
31
+ - It does not synthesize topology, links, ACL objects, NAT pools, route convergence, or lab scoring.
32
+ - It does not promote local `pkt_examples` files into curated public donors.
33
+ - It does not mutate GUI/internal Packet Tracer state.
34
+
35
+ ## Safe Next Step
36
+
37
+ The next promotion step is donor-backed readiness for a narrow single-donor IPv4 routing fixture, only after selected-donor evidence, deterministic targets, and acceptance JSON prove the resulting `.pkt` opens and matches expected inventory/parity.
@@ -0,0 +1,60 @@
1
+ # L2 Resiliency + BGP Proof Wave
2
+
3
+ This proof wave uses the local user-supplied `pkt_examples` corpus as evidence input only. Raw `.pkt` files, imported caches, and `output/pkt_examples_audit.json` are not package or repository artifacts.
4
+
5
+ ## What Is Covered
6
+
7
+ The wave adds parser, inventory, catalog, atlas, and parity truth for:
8
+
9
+ - `bgp`
10
+ - `stp`
11
+ - `rstp`
12
+ - `etherchannel`
13
+ - `lacp`
14
+ - `pagp`
15
+ - `vtp`
16
+ - `dtp`
17
+
18
+ These capabilities are constrained to IOS text configuration surfaces. They are not broad topology generation features.
19
+
20
+ ## Explicit Edit Commands
21
+
22
+ Supported edit-proof command shapes:
23
+
24
+ ```powershell
25
+ python scripts/generate_pkt.py --parity-report "set R1 bgp 65001 neighbor 10.0.0.2 remote-as 65002 network 192.168.1.0 mask 255.255.255.0"
26
+ python scripts/generate_pkt.py --parity-report "set SW1 stp mode rapid-pvst vlan 10 root primary"
27
+ python scripts/generate_pkt.py --parity-report "set SW1 etherchannel 1 mode active interfaces FastEthernet0/1 FastEthernet0/2"
28
+ python scripts/generate_pkt.py --parity-report "set SW1 etherchannel 2 mode desirable interfaces FastEthernet0/3 FastEthernet0/4"
29
+ python scripts/generate_pkt.py --parity-report "set SW1 vtp domain CAMPUS mode server version 2"
30
+ python scripts/generate_pkt.py --parity-report "set SW1 dtp interface FastEthernet0/1 mode dynamic desirable"
31
+ ```
32
+
33
+ ## Target Rules
34
+
35
+ - The target device name must be explicit.
36
+ - Interface names must be explicit where an interface command is used.
37
+ - Only existing device configuration text is mutated.
38
+ - No GUI/internal Packet Tracer state is guessed.
39
+ - No links, modules, devices, or topology shape are synthesized in this wave.
40
+
41
+ ## What This Proves
42
+
43
+ - BGP neighbor/network IOS text can be parsed and written deterministically.
44
+ - The editor writes a `router bgp` block with explicit `neighbor ... remote-as` and optional `network ... mask` lines.
45
+ - STP/RSTP can be detected separately from SPAN/RSPAN through explicit `spanning-tree` lines.
46
+ - EtherChannel can be represented through explicit `channel-group` and `Port-channel` text.
47
+ - LACP/PAgP are derived from explicit EtherChannel modes.
48
+ - VTP and DTP line shapes can be parsed, inventoried, and roundtripped as IOS text.
49
+
50
+ ## What This Does Not Prove
51
+
52
+ - It does not prove full BGP peering convergence.
53
+ - It does not prove STP state simulation correctness.
54
+ - It does not create or validate physical redundant links.
55
+ - It does not make these capabilities `donor_backed_ready`.
56
+ - It does not make any of these capabilities `generate_ready`.
57
+
58
+ ## Current Product Status
59
+
60
+ The atlas status for this wave is `edit_proven` when roundtrip tests exist. `generate_ready=0` remains intentional until a single-donor acceptance fixture proves a strict safe-open generate path.
@@ -0,0 +1,59 @@
1
+ # L2 Security and QoS Proof
2
+
3
+ This proof records the published `0.2.3` L2 security/QoS edit-proven subset and the `0.2.4` candidate proof-readiness context. It is intentionally narrow: the skill can append deterministic IOS-style switch configuration lines for explicitly named targets, but it does not synthesize a full NAC or QoS design from a broad prompt.
4
+
5
+ ## Explicit Commands
6
+
7
+ Supported explicit edit shapes:
8
+
9
+ ```text
10
+ set SW1 dot1x interface FastEthernet0/1 mode auto radius 192.168.1.10 key radius123
11
+ set SW1 qos class-map VOICE match dscp ef policy-map QOS_POLICY class VOICE priority service-policy output FastEthernet0/1
12
+ ```
13
+
14
+ The dot1x command writes:
15
+
16
+ ```text
17
+ aaa new-model
18
+ dot1x system-auth-control
19
+ radius-server host 192.168.1.10 key radius123
20
+ interface FastEthernet0/1
21
+ authentication port-control auto
22
+ dot1x pae authenticator
23
+ ```
24
+
25
+ The QoS command writes:
26
+
27
+ ```text
28
+ mls qos
29
+ class-map match-any VOICE
30
+ match dscp ef
31
+ policy-map QOS_POLICY
32
+ class VOICE
33
+ priority
34
+ interface FastEthernet0/1
35
+ service-policy output QOS_POLICY
36
+ ```
37
+
38
+ ## Donor-Backed Readiness
39
+
40
+ - `dot1x` is `donor_backed_ready` because it has parser, catalog, decode-verified sample, and editor roundtrip evidence.
41
+ - `qos` remains `edit_proven` rather than `donor_backed_ready` because the current QoS sample evidence is path-backed but not decode-verified in the atlas gate.
42
+
43
+ ## What This Proves
44
+
45
+ - `dot1x` and `qos` are parser-recognized as `l2_security_monitoring`.
46
+ - Explicit dot1x and QoS commands roundtrip through Packet Tracer XML config text.
47
+ - Parity reports mark these capabilities as `edit_supported=true`, `generate_supported=false`, and `generate_mismatch_reason=supported_in_edit_only`.
48
+ - The feature atlas can classify dot1x as `donor_backed_ready` and QoS as `edit_proven` when the proof gate is evaluated.
49
+
50
+ ## What This Does Not Prove
51
+
52
+ - This does not make dot1x or QoS `generate_ready`.
53
+ - This does not create RADIUS server users, certificates, supplicant profiles, policy discovery, or end-to-end NAC validation.
54
+ - This does not generate QoS classes from traffic intent; class-map, policy-map, direction, and interface must be explicit.
55
+ - This does not prove every Packet Tracer switch model accepts every IOS line.
56
+
57
+ ## Safe Next Step
58
+
59
+ The next promotion would require selected-donor proof with a reusable L2 security/monitoring skeleton and acceptance fixtures. Until then, broad prompts such as `dot1x qos policy class-map policy-map` remain report/plan evidence, while explicit commands use the edit-only path.