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
@@ -0,0 +1,24 @@
1
+ {
2
+ "schema_version": "examples.truth.v2",
3
+ "source": "examples/local-sample-evidence.json",
4
+ "available": true,
5
+ "policy": "Local user-supplied samples are evidence inputs only, not curated donor truth or npm package content.",
6
+ "audit_source": "output/local-sample-audit.json",
7
+ "total_files": 367,
8
+ "decode_success_count": 366,
9
+ "decode_fail_count": 1,
10
+ "top_capabilities": [
11
+ {"capability": "stp", "sample_count": 348, "examples": ["09. 2Switches_3Routers_Rime_New.pkt", "1-Securing Network Devices and Establish a SSH Session.pkt", "10-IPv4 Static and Default Routes.pkt"]},
12
+ {"capability": "static_route", "sample_count": 87, "examples": ["09. 2Switches_3Routers_Rime_New.pkt", "10-IPv4 Static and Default Routes.pkt", "13.3.2 lab.pkt"]},
13
+ {"capability": "ripv2", "sample_count": 61, "examples": ["10routerEGIRP.pkt", "10RouterRIP.pkt", "13.3.2 lab.pkt"]},
14
+ {"capability": "default_route", "sample_count": 56, "examples": ["10-IPv4 Static and Default Routes.pkt", "13.3.2 lab.pkt", "23i2110.pkt"]},
15
+ {"capability": "ospfv2", "sample_count": 50, "examples": ["11-Single-Area OSPFv2.pkt", "13routerOSPF.pkt", "2020-06-18 OSPF.pkt"]},
16
+ {"capability": "dhcp_pool", "sample_count": 48, "examples": ["10PORTDHCP.pkt", "20211220 VoIP, PortSec, DHCP - finished.pkt", "6-DHCPv4.pkt"]},
17
+ {"capability": "acl", "sample_count": 40, "examples": ["13.3.2 lab.pkt", "2020-06-18 OSPF.pkt", "23i2110.pkt"]},
18
+ {"capability": "ssh_ios", "sample_count": 27, "examples": ["1-Securing Network Devices and Establish a SSH Session.pkt", "16.4.7 lab.pkt", "2020-05-16 AAA NTP For Learnersv3.pkt"]},
19
+ {"capability": "dhcp_relay", "sample_count": 24, "examples": ["2020-04-19 HSRP OGIT PT Lab.pkt", "2020-05-16 AAA NTP For Learnersv3.pkt", "2020-05-20 Routing NTP and more WTW.pkt"]},
20
+ {"capability": "eigrp_ipv4", "sample_count": 22, "examples": ["10routerEGIRP.pkt", "13routerEigrp.pkt", "13routerEigrpFINALIZED.pkt"]},
21
+ {"capability": "etherchannel", "sample_count": 7, "examples": ["20211124 L2 EtherChannel, HSRP, OSPF - empty.pkt", "20211124 L2 EtherChannel, HSRP, OSPF - finished.pkt", "5-Implement Inter-VLAN Routing and Etherchannel.pkt"]},
22
+ {"capability": "bgp", "sample_count": 2, "examples": ["Cisco-networking-projects-main\\BGP\\BGP_3_Router\\BGP_3_ROUTERS.pkt", "Cisco-networking-projects-main\\BGP\\BGP_Class_C\\BGP_Class_C.pkt"]}
23
+ ]
24
+ }
@@ -0,0 +1,117 @@
1
+ {
2
+ "schema_version": "examples.truth.v2",
3
+ "proof_cards": [
4
+ {
5
+ "schema_version": "examples.truth.v2",
6
+ "artifact_type": "proof_card",
7
+ "name": "ipv4_routing_management_edit_proof",
8
+ "title": "IPv4 Routing / NAT / IOS Management",
9
+ "scenario_family": "ipv4_routing_management",
10
+ "support_level": "edit_proven",
11
+ "capabilities": ["ospfv2", "eigrp_ipv4", "ripv2", "static_route", "default_route", "dhcp_relay", "nat_static", "nat_dynamic", "pat", "ssh_ios", "ntp_ios", "syslog_ios"],
12
+ "explicit_command": "set R1 ospfv2 1 network 10.0.0.0 wildcard 0.0.0.255 area 0",
13
+ "try_command": "set R1 ospfv2 1 network 10.0.0.0 wildcard 0.0.0.255 area 0",
14
+ "proof_doc": "docs/ipv4-routing-management-proof.md",
15
+ "parity_excerpt": "explicit IPv4 routing/NAT/IOS-management commands are edit_proven; generate_ready=false",
16
+ "refusal_boundary": "No topology synthesis, route convergence proof, ACL object inference, or broad NAT design generation.",
17
+ "does_not_claim": "No topology synthesis, route convergence proof, ACL object inference, or broad NAT design generation.",
18
+ "maturity_summary": {"atlas_status": "edit_proven", "example_status": "proof_card", "donor_backed_ready": false, "generate_ready": false}
19
+ },
20
+ {
21
+ "schema_version": "examples.truth.v2",
22
+ "artifact_type": "proof_card",
23
+ "name": "l2_resiliency_bgp_edit_proof",
24
+ "title": "L2 Resiliency + BGP",
25
+ "scenario_family": "l2_resiliency_routing",
26
+ "support_level": "edit_proven",
27
+ "capabilities": ["bgp", "stp", "rstp", "etherchannel", "lacp", "pagp", "vtp", "dtp"],
28
+ "explicit_command": "set SW1 etherchannel 1 mode active interfaces FastEthernet0/1 FastEthernet0/2",
29
+ "try_command": "set SW1 etherchannel 1 mode active interfaces FastEthernet0/1 FastEthernet0/2",
30
+ "proof_doc": "docs/l2-resiliency-bgp-proof.md",
31
+ "parity_excerpt": "explicit BGP/STP/EtherChannel/VTP/DTP IOS commands are edit_proven; generate_ready=false",
32
+ "refusal_boundary": "No redundant link creation, STP state validation, BGP convergence proof, or topology generation.",
33
+ "does_not_claim": "No redundant link creation, STP state validation, BGP convergence proof, or topology generation.",
34
+ "maturity_summary": {"atlas_status": "edit_proven", "example_status": "proof_card", "donor_backed_ready": false, "generate_ready": false}
35
+ },
36
+ {
37
+ "schema_version": "examples.truth.v2",
38
+ "artifact_type": "proof_card",
39
+ "name": "l2_security_qos_proof",
40
+ "title": "L2 Security + QoS",
41
+ "scenario_family": "l2_security_monitoring",
42
+ "support_level": "donor_backed_ready",
43
+ "capabilities": ["dot1x", "qos", "dhcp_snooping", "dai", "snmp", "netflow", "span"],
44
+ "explicit_command": "set SW1 dot1x interface FastEthernet0/1 mode auto radius 192.168.1.10 key radius123",
45
+ "try_command": "set SW1 dot1x interface FastEthernet0/1 mode auto radius 192.168.1.10 key radius123",
46
+ "proof_doc": "docs/l2-security-qos-proof.md",
47
+ "parity_excerpt": "dot1x is donor_backed_ready; QoS remains edit_proven; generate_ready=false",
48
+ "refusal_boundary": "No broad NAC design, RADIUS user synthesis, certificate workflow, or end-to-end QoS policy inference.",
49
+ "does_not_claim": "No broad NAC design, RADIUS user synthesis, certificate workflow, or end-to-end QoS policy inference.",
50
+ "maturity_summary": {"atlas_status": "donor_backed_ready", "example_status": "proof_card", "donor_backed_ready": true, "generate_ready": false}
51
+ },
52
+ {
53
+ "schema_version": "examples.truth.v2",
54
+ "artifact_type": "proof_card",
55
+ "name": "security_edge_deepening_proof",
56
+ "title": "Security Edge CBAC/ZFW",
57
+ "scenario_family": "wan_security_edge",
58
+ "support_level": "donor_backed_ready",
59
+ "capabilities": ["cbac", "zfw"],
60
+ "explicit_command": "set R1 zfw zone-pair INSIDE_OUT source inside destination outside policy POLICY1",
61
+ "try_command": "set R1 zfw zone-pair INSIDE_OUT source inside destination outside policy POLICY1",
62
+ "proof_doc": "docs/security-edge-deepening-proof.md",
63
+ "parity_excerpt": "ZFW is donor_backed_ready; CBAC remains edit_proven; generate_ready=false",
64
+ "refusal_boundary": "No ASA GUI/internal mutation, clientless VPN, service-policy synthesis, or broad security topology generation.",
65
+ "does_not_claim": "No ASA GUI/internal mutation, clientless VPN, service-policy synthesis, or broad security topology generation.",
66
+ "maturity_summary": {"atlas_status": "donor_backed_ready", "example_status": "proof_card", "donor_backed_ready": true, "generate_ready": false}
67
+ },
68
+ {
69
+ "schema_version": "examples.truth.v2",
70
+ "artifact_type": "proof_card",
71
+ "name": "voice_collaboration_proof",
72
+ "title": "Voice / Collaboration",
73
+ "scenario_family": "voice_collaboration",
74
+ "support_level": "donor_backed_ready",
75
+ "capabilities": ["voip", "ip_phone", "call_manager"],
76
+ "explicit_command": "set \"Router0\" telephony service source-address 192.168.10.1 port 2000 max-ephones 4 max-dn 4",
77
+ "try_command": "set \"Router0\" telephony service source-address 192.168.10.1 port 2000 max-ephones 4 max-dn 4",
78
+ "proof_doc": "docs/voice-collaboration-proof.md",
79
+ "parity_excerpt": "IOS telephony-service, ephone, and dial-peer paths are donor_backed_ready; generate_ready=false",
80
+ "refusal_boundary": "No Call Manager GUI synthesis, Linksys voice mutation, phone GUI internals, or broad VoIP topology generation.",
81
+ "does_not_claim": "No Call Manager GUI synthesis, Linksys voice mutation, phone GUI internals, or broad VoIP topology generation.",
82
+ "maturity_summary": {"atlas_status": "donor_backed_ready", "example_status": "proof_card", "donor_backed_ready": true, "generate_ready": false}
83
+ },
84
+ {
85
+ "schema_version": "examples.truth.v2",
86
+ "artifact_type": "proof_card",
87
+ "name": "automation_controller_proof",
88
+ "title": "Automation / Controller Scripts",
89
+ "scenario_family": "automation_controller",
90
+ "support_level": "donor_backed_ready",
91
+ "capabilities": ["python_programming", "javascript_programming", "tcp_udp_app"],
92
+ "explicit_command": "set \"Device\" script app \"App Name\" file \"main.py\" content \"print('hello')\"",
93
+ "try_command": "set \"Device\" script app \"App Name\" file \"main.py\" content \"print('hello')\"",
94
+ "proof_doc": "docs/automation-controller-proof.md",
95
+ "parity_excerpt": "existing Python, JavaScript, and TCP/UDP script files are donor_backed_ready; generate_ready=false",
96
+ "refusal_boundary": "No Network Controller GUI synthesis, Blockly graph mutation, VM/IOx workflow generation, or new app/file creation.",
97
+ "does_not_claim": "No Network Controller GUI synthesis, Blockly graph mutation, VM/IOx workflow generation, or new app/file creation.",
98
+ "maturity_summary": {"atlas_status": "donor_backed_ready", "example_status": "proof_card", "donor_backed_ready": true, "generate_ready": false}
99
+ },
100
+ {
101
+ "schema_version": "examples.truth.v2",
102
+ "artifact_type": "proof_card",
103
+ "name": "industrial_programming_proof",
104
+ "title": "Industrial Programming",
105
+ "scenario_family": "industrial_iot",
106
+ "support_level": "donor_backed_ready",
107
+ "capabilities": ["real_http", "real_websocket"],
108
+ "explicit_command": "set \"Py: real http server 2\" script app \"Real HTTP Server\" file \"main.py\" content \"print('updated')\"",
109
+ "try_command": "set \"Py: real http server 2\" script app \"Real HTTP Server\" file \"main.py\" content \"print('updated')\"",
110
+ "proof_doc": "docs/industrial-programming-proof.md",
111
+ "parity_excerpt": "Real HTTP and Real WebSocket script-file edits are donor_backed_ready; generate_ready=false",
112
+ "refusal_boundary": "No MQTT broker generation, Profinet/PTP/L2NAT mutation, CyberObserver workflow, or industrial topology generation.",
113
+ "does_not_claim": "No MQTT broker generation, Profinet/PTP/L2NAT mutation, CyberObserver workflow, or industrial topology generation.",
114
+ "maturity_summary": {"atlas_status": "donor_backed_ready", "example_status": "proof_card", "donor_backed_ready": true, "generate_ready": false}
115
+ }
116
+ ]
117
+ }
@@ -1,11 +1,20 @@
1
1
  {
2
+ "schema_version": "examples.truth.v2",
2
3
  "example_name": "service_heavy_cli_edit_v1",
4
+ "artifact_type": "showcase_example",
3
5
  "source_mode": "donor-backed edit",
4
6
  "scenario_family": "service_heavy",
5
- "public_repo_policy": {
7
+ "artifact_policy": {
6
8
  "commit_pkt_binary": false,
7
9
  "commit_inventory_json": true,
8
- "commit_screenshot": false
10
+ "commit_screenshots": true,
11
+ "raw_source_public": false
12
+ },
13
+ "maturity_summary": {
14
+ "atlas_status": "known_working_example",
15
+ "example_status": "known_working_example",
16
+ "donor_backed_ready": true,
17
+ "generate_ready": false
9
18
  },
10
19
  "artifact_paths": {
11
20
  "inventory_json": "examples/service_heavy_cli_edit_v1.inventory.json",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "packet-tracer-skill",
3
- "version": "0.2.2",
3
+ "version": "0.3.0",
4
4
  "private": false,
5
5
  "description": "Donor-backed Cisco Packet Tracer 9.x skill for natural-language planning, safe-open generation, editing, parity reporting, and runtime diagnostics across coding hosts.",
6
6
  "keywords": [
@@ -54,53 +54,69 @@
54
54
  "doctor": "node bin/packet-tracer-skill.js --doctor",
55
55
  "smoke:parity": "python scripts/generate_pkt.py --parity-report \"campus with VLAN DHCP ACL\""
56
56
  },
57
- "files": [
58
- "SKILL.md",
59
- "LICENSE",
60
- "LICENSES",
61
- "README.md",
57
+ "files": [
58
+ "SKILL.md",
59
+ "LICENSE",
60
+ "LICENSES",
61
+ "README.md",
62
62
  "CONTRIBUTING.md",
63
63
  "CHANGELOG.md",
64
64
  "CITATION.cff",
65
65
  "SECURITY.md",
66
- "CODE_OF_CONDUCT.md",
67
- "requirements.txt",
68
- "requirements-dev.txt",
69
- "bin/packet-tracer-skill.js",
70
- "scripts/*.py",
71
- "scripts/*.ps1",
72
- "scripts/vendor/README.md",
73
- "scripts/vendor/twofish.py",
74
- "templates",
75
- "references/*.json",
76
- "references/*.md",
77
- "examples/README.md",
78
- "examples/gallery.md",
79
- "examples/index.json",
80
- "examples/blueprint_minimal.json",
81
- "examples/*.inventory.json",
82
- "examples/screenshots/*.png",
83
- "docs/curated-donor-registry.md",
84
- "docs/campus-donor-proof.md",
85
- "docs/home-iot-donor-proof.md",
86
- "docs/wan-security-donor-proof.md",
87
- "docs/wireless-advanced-proof.md",
88
- "docs/packet-tracer-feature-gap-atlas.md",
89
- "docs/discovery-keywords.md",
90
- "docs/github-discussions-setup.md",
91
- "docs/github-launch-ops-0.2.1.md",
92
- "docs/github-launch-ops-0.2.2.md",
93
- "docs/github-metadata.md",
94
- "docs/hero-demo-plan.md",
95
- "docs/launch-announcement-0.2.1.md",
96
- "docs/launch-announcement-0.2.2.md",
97
- "docs/post-launch-follow-up.md",
98
- "docs/publish-preview-roadmap.md",
99
- "docs/release-checklist.md",
100
- "docs/release-notes-0.2.1.md",
101
- "docs/release-notes-0.2.2.md",
102
- "docs/runtime-truth.md"
103
- ],
66
+ "CODE_OF_CONDUCT.md",
67
+ "requirements.txt",
68
+ "requirements-dev.txt",
69
+ "pytest.ini",
70
+ "bin/packet-tracer-skill.js",
71
+ "scripts/*.py",
72
+ "scripts/*.ps1",
73
+ "scripts/vendor/README.md",
74
+ "scripts/vendor/twofish.py",
75
+ "scripts/vendor/twofish_pure.py",
76
+ "templates",
77
+ "references/*.json",
78
+ "references/*.md",
79
+ "examples/README.md",
80
+ "examples/gallery.md",
81
+ "examples/index.json",
82
+ "examples/proof-cards.json",
83
+ "examples/local-sample-evidence.json",
84
+ "examples/blueprint_minimal.json",
85
+ "examples/*.inventory.json",
86
+ "examples/screenshots/*.png",
87
+ "docs/curated-donor-registry.md",
88
+ "docs/campus-donor-proof.md",
89
+ "docs/home-iot-donor-proof.md",
90
+ "docs/wan-security-donor-proof.md",
91
+ "docs/wireless-advanced-proof.md",
92
+ "docs/industrial-programming-proof.md",
93
+ "docs/automation-controller-proof.md",
94
+ "docs/voice-collaboration-proof.md",
95
+ "docs/l2-resiliency-bgp-proof.md",
96
+ "docs/ipv4-routing-management-proof.md",
97
+ "docs/l2-security-qos-proof.md",
98
+ "docs/security-edge-deepening-proof.md",
99
+ "docs/generate-ready-pilot-design.md",
100
+ "docs/proof-readiness-dashboard.md",
101
+ "docs/packet-tracer-feature-gap-atlas.md",
102
+ "docs/discovery-keywords.md",
103
+ "docs/github-discussions-setup.md",
104
+ "docs/github-launch-ops-0.2.1.md",
105
+ "docs/github-launch-ops-0.2.2.md",
106
+ "docs/github-launch-ops-0.2.3.md",
107
+ "docs/github-metadata.md",
108
+ "docs/hero-demo-plan.md",
109
+ "docs/launch-announcement-0.2.1.md",
110
+ "docs/launch-announcement-0.2.2.md",
111
+ "docs/post-launch-follow-up.md",
112
+ "docs/publish-preview-roadmap.md",
113
+ "docs/release-checklist.md",
114
+ "docs/release-notes-0.2.1.md",
115
+ "docs/release-notes-0.2.2.md",
116
+ "docs/release-notes-0.2.3.md",
117
+ "docs/release-notes-0.2.4.md",
118
+ "docs/runtime-truth.md"
119
+ ],
104
120
  "engines": {
105
121
  "node": ">=18"
106
122
  }
package/pytest.ini ADDED
@@ -0,0 +1,9 @@
1
+ [pytest]
2
+ # Generated labs and their scratch installs live under `output/`, and a bare
3
+ # `pytest` used to walk into them: a vendored `colorama` there ships its own
4
+ # test files, so collection failed with 8 errors before a single test of this
5
+ # repo ran. The suite lives in exactly one place, so say so.
6
+ testpaths = tests
7
+ norecursedirs = output .git .pydeps __pycache__ templates
8
+ markers =
9
+ requires_twofish: test requires a local Packet Tracer Twofish bridge and real .pkt decode/edit runtime
@@ -17,10 +17,46 @@
17
17
  {"id": "ipv6_dns_aaaa", "capability": "ipv6_dns_aaaa", "label": "IPv6 DNS AAAA records", "sample_path_keywords": ["dns-a-and-aaaa", "aaaa"], "support_ceiling": "report_supported"},
18
18
  {"id": "ipv6_tunneling", "capability": "ipv6_tunneling", "label": "IPv6 tunneling", "sample_path_keywords": ["ipv6ip tunneling", "ipv6ip_"], "support_ceiling": "report_supported"},
19
19
  {"id": "isatap", "capability": "isatap", "label": "ISATAP", "sample_path_keywords": ["isatap"], "support_ceiling": "report_supported"},
20
- {"id": "ospfv3", "capability": "ospfv3", "label": "OSPFv3", "sample_path_keywords": ["ospfv3", "ipv6_ospf"], "support_ceiling": "edit_proven"},
21
- {"id": "eigrp_ipv6", "capability": "eigrp_ipv6", "label": "EIGRP IPv6", "sample_path_keywords": ["ipv6_eigrp"], "support_ceiling": "edit_proven"},
22
- {"id": "ripng", "capability": "ripng", "label": "RIPng", "sample_path_keywords": ["ipv6", "rip"], "support_ceiling": "edit_proven"},
23
- {"id": "hsrp", "capability": "hsrp", "label": "HSRP", "sample_path_keywords": ["hsrp"], "support_ceiling": "edit_proven"}
20
+ {"id": "ospfv3", "capability": "ospfv3", "label": "OSPFv3", "sample_path_keywords": ["ospfv3", "ipv6_ospf"], "support_ceiling": "donor_backed_ready", "donor_backed_proof": true},
21
+ {"id": "eigrp_ipv6", "capability": "eigrp_ipv6", "label": "EIGRP IPv6", "sample_path_keywords": ["ipv6_eigrp"], "support_ceiling": "donor_backed_ready", "donor_backed_proof": true},
22
+ {"id": "ripng", "capability": "ripng", "label": "RIPng", "sample_path_keywords": ["ipv6", "rip"], "support_ceiling": "donor_backed_ready", "donor_backed_proof": true},
23
+ {"id": "hsrp", "capability": "hsrp", "label": "HSRP", "sample_path_keywords": ["hsrp"], "support_ceiling": "donor_backed_ready", "donor_backed_proof": true}
24
+ ]
25
+ },
26
+ {
27
+ "id": "ipv4_routing_management",
28
+ "label": "IPv4 Routing And IOS Management",
29
+ "scenario_family": "ipv4_routing_management",
30
+ "wave": 7,
31
+ "features": [
32
+ {"id": "ospfv2", "capability": "ospfv2", "label": "OSPFv2", "sample_path_keywords": ["ospf", "ospfv2", "single-area ospf"], "support_ceiling": "edit_proven"},
33
+ {"id": "eigrp_ipv4", "capability": "eigrp_ipv4", "label": "EIGRP IPv4", "sample_path_keywords": ["eigrp", "ipv4 eigrp"], "support_ceiling": "edit_proven"},
34
+ {"id": "ripv2", "capability": "ripv2", "label": "RIPv2", "sample_path_keywords": ["ripv2", "rip"], "support_ceiling": "edit_proven"},
35
+ {"id": "static_route", "capability": "static_route", "label": "Static IPv4 route", "sample_path_keywords": ["static route", "ip route"], "support_ceiling": "edit_proven"},
36
+ {"id": "default_route", "capability": "default_route", "label": "Default IPv4 route", "sample_path_keywords": ["default route"], "support_ceiling": "edit_proven"},
37
+ {"id": "dhcp_relay", "capability": "dhcp_relay", "label": "DHCP relay / helper address", "sample_path_keywords": ["dhcp relay", "dhcprelay", "helper-address"], "support_ceiling": "edit_proven"},
38
+ {"id": "nat_static", "capability": "nat_static", "label": "Static NAT", "sample_path_keywords": ["static nat"], "support_ceiling": "edit_proven"},
39
+ {"id": "nat_dynamic", "capability": "nat_dynamic", "label": "Dynamic NAT", "sample_path_keywords": ["dynamic nat"], "support_ceiling": "edit_proven"},
40
+ {"id": "pat", "capability": "pat", "label": "PAT overload", "sample_path_keywords": ["pat", "overload"], "support_ceiling": "edit_proven"},
41
+ {"id": "ssh_ios", "capability": "ssh_ios", "label": "IOS SSH management", "sample_path_keywords": ["ssh"], "support_ceiling": "edit_proven"},
42
+ {"id": "ntp_ios", "capability": "ntp_ios", "label": "IOS NTP client", "sample_path_keywords": ["ntp"], "support_ceiling": "edit_proven"},
43
+ {"id": "syslog_ios", "capability": "syslog_ios", "label": "IOS syslog client", "sample_path_keywords": ["syslog"], "support_ceiling": "edit_proven"}
44
+ ]
45
+ },
46
+ {
47
+ "id": "l2_resiliency_routing",
48
+ "label": "L2 Resiliency And BGP",
49
+ "scenario_family": "l2_resiliency_routing",
50
+ "wave": 6,
51
+ "features": [
52
+ {"id": "bgp", "capability": "bgp", "label": "BGP", "sample_path_keywords": ["bgp"], "support_ceiling": "edit_proven"},
53
+ {"id": "stp", "capability": "stp", "label": "Spanning Tree Protocol", "sample_path_keywords": ["stp", "spanning tree", "spanning-tree"], "support_ceiling": "edit_proven"},
54
+ {"id": "rstp", "capability": "rstp", "label": "Rapid STP / Rapid PVST", "sample_path_keywords": ["rstp", "rapid-pvst"], "support_ceiling": "edit_proven"},
55
+ {"id": "etherchannel", "capability": "etherchannel", "label": "EtherChannel / Port-channel", "sample_path_keywords": ["etherchannel", "port-channel", "channel-group"], "support_ceiling": "edit_proven"},
56
+ {"id": "lacp", "capability": "lacp", "label": "LACP", "sample_path_keywords": ["lacp"], "support_ceiling": "edit_proven"},
57
+ {"id": "pagp", "capability": "pagp", "label": "PAgP", "sample_path_keywords": ["pagp"], "support_ceiling": "edit_proven"},
58
+ {"id": "vtp", "capability": "vtp", "label": "VTP", "sample_path_keywords": ["vtp"], "support_ceiling": "edit_proven"},
59
+ {"id": "dtp", "capability": "dtp", "label": "DTP", "sample_path_keywords": ["dtp"], "support_ceiling": "edit_proven"}
24
60
  ]
25
61
  },
26
62
  {
@@ -31,16 +67,30 @@
31
67
  "features": [
32
68
  {"id": "dhcp_snooping", "capability": "dhcp_snooping", "label": "DHCP snooping", "sample_path_keywords": ["dhcp_snooping"], "support_ceiling": "edit_proven"},
33
69
  {"id": "dai", "capability": "dai", "label": "Dynamic ARP Inspection", "sample_path_keywords": ["dai"], "support_ceiling": "edit_proven"},
34
- {"id": "dot1x", "capability": "dot1x", "label": "802.1X / NAC", "sample_path_keywords": ["dot1x", "port-based nac"], "support_ceiling": "report_supported"},
70
+ {"id": "dot1x", "capability": "dot1x", "label": "802.1X / NAC", "sample_path_keywords": ["dot1x", "port-based nac"], "support_ceiling": "donor_backed_ready", "donor_backed_proof": true},
35
71
  {"id": "lldp", "capability": "lldp", "label": "LLDP", "sample_path_keywords": ["lldp"], "support_ceiling": "edit_proven"},
36
72
  {"id": "rep", "capability": "rep", "label": "REP", "sample_path_keywords": ["rep_"], "support_ceiling": "edit_proven"},
37
73
  {"id": "snmp", "capability": "snmp", "label": "SNMP", "sample_path_keywords": ["snmp"], "support_ceiling": "edit_proven"},
38
74
  {"id": "netflow", "capability": "netflow", "label": "NetFlow", "sample_path_keywords": ["netflow"], "support_ceiling": "edit_proven"},
39
- {"id": "span", "capability": "span", "label": "SPAN/RSPAN", "sample_path_keywords": ["span"], "support_ceiling": "edit_proven"},
40
- {"id": "qos", "capability": "qos", "label": "QoS", "sample_path_keywords": ["qos"], "support_ceiling": "report_supported"},
75
+ {"id": "span", "capability": "span", "label": "SPAN/RSPAN", "sample_path_keywords": ["rspan", "monitor session", "span session"], "support_ceiling": "edit_proven"},
76
+ {"id": "qos", "capability": "qos", "label": "QoS", "sample_path_keywords": ["qos"], "support_ceiling": "donor_backed_ready", "donor_backed_proof": true},
41
77
  {"id": "port_security", "capability": "port_security", "label": "Port security", "sample_path_keywords": ["port security", "port-security"], "support_ceiling": "edit_proven"}
42
78
  ]
43
79
  },
80
+ {
81
+ "id": "wan_security_edge",
82
+ "label": "WAN Security Edge",
83
+ "scenario_family": "wan_security_edge",
84
+ "wave": 4,
85
+ "features": [
86
+ {"id": "vpn", "capability": "vpn", "label": "Site-to-site VPN crypto map", "sample_path_keywords": ["vpn", "ipsec"], "support_ceiling": "edit_proven"},
87
+ {"id": "ipsec", "capability": "ipsec", "label": "IPSec transform set / crypto map", "sample_path_keywords": ["ipsec", "ike"], "support_ceiling": "edit_proven"},
88
+ {"id": "gre", "capability": "gre", "label": "GRE tunnel basics", "sample_path_keywords": ["gre"], "support_ceiling": "edit_proven"},
89
+ {"id": "ppp", "capability": "ppp", "label": "PPP serial encapsulation", "sample_path_keywords": ["ppp", "chap", "pap"], "support_ceiling": "edit_proven"},
90
+ {"id": "security_edge", "capability": "security_edge", "label": "Security edge device evidence", "sample_path_keywords": ["asa", "firewall", "security appliance"], "support_ceiling": "report_supported"},
91
+ {"id": "multilayer_switching", "capability": "multilayer_switching", "label": "Multilayer switch / SVI evidence", "sample_path_keywords": ["multilayer", "3560", "svi"], "support_ceiling": "report_supported"}
92
+ ]
93
+ },
44
94
  {
45
95
  "id": "security_edge_deepening",
46
96
  "label": "Security Edge Deepening",
@@ -50,8 +100,8 @@
50
100
  {"id": "asa_acl_nat", "capability": "asa_acl_nat", "label": "ASA ACL/NAT", "sample_path_keywords": ["asa_acl_nat"], "support_ceiling": "report_supported"},
51
101
  {"id": "asa_service_policy", "capability": "asa_service_policy", "label": "ASA service policy", "sample_path_keywords": ["asa_service_policy"], "support_ceiling": "report_supported"},
52
102
  {"id": "clientless_vpn", "capability": "clientless_vpn", "label": "Clientless VPN", "sample_path_keywords": ["clientless_vpn"], "support_ceiling": "report_supported"},
53
- {"id": "cbac", "capability": "cbac", "label": "CBAC", "sample_path_keywords": ["cbac"], "support_ceiling": "report_supported"},
54
- {"id": "zfw", "capability": "zfw", "label": "Zone Based Firewall", "sample_path_keywords": ["zfw", "zone based firewall"], "support_ceiling": "report_supported"},
103
+ {"id": "cbac", "capability": "cbac", "label": "CBAC", "sample_path_keywords": ["cbac"], "support_ceiling": "donor_backed_ready", "donor_backed_proof": true},
104
+ {"id": "zfw", "capability": "zfw", "label": "Zone Based Firewall", "sample_path_keywords": ["zfw", "zone based firewall"], "support_ceiling": "donor_backed_ready", "donor_backed_proof": true},
55
105
  {"id": "sniffer", "capability": "sniffer", "label": "Sniffer", "sample_path_keywords": ["sniffer"], "support_ceiling": "report_supported"}
56
106
  ]
57
107
  },
@@ -78,10 +128,10 @@
78
128
  "wave": 5,
79
129
  "features": [
80
130
  {"id": "network_controller", "capability": "network_controller", "label": "Network Controller", "sample_path_keywords": ["network controller", "netcon"], "support_ceiling": "report_supported"},
81
- {"id": "python_programming", "capability": "python_programming", "label": "Python programming", "sample_path_keywords": ["python", "programming_with_python"], "support_ceiling": "report_supported"},
82
- {"id": "javascript_programming", "capability": "javascript_programming", "label": "JavaScript programming", "sample_path_keywords": ["javascript"], "support_ceiling": "report_supported"},
131
+ {"id": "python_programming", "capability": "python_programming", "label": "Python programming", "sample_path_keywords": ["python", "programming_with_python"], "support_ceiling": "donor_backed_ready", "donor_backed_proof": true},
132
+ {"id": "javascript_programming", "capability": "javascript_programming", "label": "JavaScript programming", "sample_path_keywords": ["javascript"], "support_ceiling": "donor_backed_ready", "donor_backed_proof": true},
83
133
  {"id": "blockly_programming", "capability": "blockly_programming", "label": "Blockly programming", "sample_path_keywords": ["blockly"], "support_ceiling": "report_supported"},
84
- {"id": "tcp_udp_app", "capability": "tcp_udp_app", "label": "TCP/UDP test apps", "sample_path_keywords": ["tcp_test_app", "udp_test_app"], "support_ceiling": "report_supported"},
134
+ {"id": "tcp_udp_app", "capability": "tcp_udp_app", "label": "TCP/UDP test apps", "sample_path_keywords": ["tcp_test_app", "udp_test_app"], "support_ceiling": "donor_backed_ready", "donor_backed_proof": true},
85
135
  {"id": "vm_iox", "capability": "vm_iox", "label": "VM / IOx", "sample_path_keywords": ["iox", "uploading_and_running_vm"], "support_ceiling": "report_supported"}
86
136
  ]
87
137
  },
@@ -91,9 +141,9 @@
91
141
  "scenario_family": "voice_collaboration",
92
142
  "wave": 5,
93
143
  "features": [
94
- {"id": "voip", "capability": "voip", "label": "VoIP", "sample_path_keywords": ["voip"], "support_ceiling": "report_supported"},
95
- {"id": "ip_phone", "capability": "ip_phone", "label": "IP phones", "sample_path_keywords": ["phone"], "support_ceiling": "report_supported"},
96
- {"id": "call_manager", "capability": "call_manager", "label": "Call Manager / telephony service", "sample_path_keywords": ["call", "voip"], "support_ceiling": "report_supported"},
144
+ {"id": "voip", "capability": "voip", "label": "VoIP", "sample_path_keywords": ["voip"], "support_ceiling": "donor_backed_ready", "donor_backed_proof": true},
145
+ {"id": "ip_phone", "capability": "ip_phone", "label": "IP phones", "sample_path_keywords": ["phone"], "support_ceiling": "donor_backed_ready", "donor_backed_proof": true},
146
+ {"id": "call_manager", "capability": "call_manager", "label": "Call Manager / telephony service", "sample_path_keywords": ["call", "voip"], "support_ceiling": "donor_backed_ready", "donor_backed_proof": true},
97
147
  {"id": "linksys_voice", "capability": "linksys_voice", "label": "Linksys voice", "sample_path_keywords": ["voip linksys"], "support_ceiling": "report_supported"}
98
148
  ]
99
149
  },
@@ -104,8 +154,8 @@
104
154
  "wave": 5,
105
155
  "features": [
106
156
  {"id": "mqtt", "capability": "mqtt", "label": "MQTT", "sample_path_keywords": ["mqtt"], "support_ceiling": "report_supported"},
107
- {"id": "real_http", "capability": "real_http", "label": "Real HTTP", "sample_path_keywords": ["real http", "real-http"], "support_ceiling": "report_supported"},
108
- {"id": "real_websocket", "capability": "real_websocket", "label": "Real WebSocket", "sample_path_keywords": ["real websocket", "real-websocket"], "support_ceiling": "report_supported"},
157
+ {"id": "real_http", "capability": "real_http", "label": "Real HTTP", "sample_path_keywords": ["real http", "real-http"], "support_ceiling": "donor_backed_ready", "donor_backed_proof": true},
158
+ {"id": "real_websocket", "capability": "real_websocket", "label": "Real WebSocket", "sample_path_keywords": ["real websocket", "real-websocket"], "support_ceiling": "donor_backed_ready", "donor_backed_proof": true},
109
159
  {"id": "visual_scripting", "capability": "visual_scripting", "label": "Visual scripting", "sample_path_keywords": ["visual-scripting", "visual scripting"], "support_ceiling": "report_supported"},
110
160
  {"id": "ptp", "capability": "ptp", "label": "PTP", "sample_path_keywords": ["ptp"], "support_ceiling": "report_supported"},
111
161
  {"id": "profinet", "capability": "profinet", "label": "Profinet", "sample_path_keywords": ["profinet"], "support_ceiling": "report_supported"},