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.
- package/CHANGELOG.md +424 -42
- package/README.md +535 -250
- package/SKILL.md +337 -262
- package/bin/packet-tracer-skill.js +29 -2
- package/docs/automation-controller-proof.md +35 -0
- package/docs/curated-donor-registry.md +11 -0
- package/docs/generate-ready-pilot-design.md +30 -0
- package/docs/github-launch-ops-0.2.3.md +37 -0
- package/docs/github-metadata.md +6 -4
- package/docs/hero-demo-plan.md +1 -1
- package/docs/home-iot-donor-proof.md +4 -4
- package/docs/industrial-programming-proof.md +48 -0
- package/docs/ipv4-routing-management-proof.md +37 -0
- package/docs/l2-resiliency-bgp-proof.md +60 -0
- package/docs/l2-security-qos-proof.md +59 -0
- package/docs/packet-tracer-feature-gap-atlas.md +174 -17
- package/docs/post-launch-follow-up.md +9 -5
- package/docs/proof-readiness-dashboard.md +69 -0
- package/docs/publish-preview-roadmap.md +6 -5
- package/docs/release-checklist.md +27 -13
- package/docs/release-notes-0.2.2.md +1 -1
- package/docs/release-notes-0.2.3.md +59 -0
- package/docs/release-notes-0.2.4.md +20 -0
- package/docs/runtime-truth.md +33 -8
- package/docs/security-edge-deepening-proof.md +65 -0
- package/docs/voice-collaboration-proof.md +38 -0
- package/docs/wan-security-donor-proof.md +20 -3
- package/examples/README.md +98 -69
- package/examples/complex_campus_master_edit_v4.inventory.json +12 -2
- package/examples/gallery.md +94 -6
- package/examples/home_iot_cli_edit_v1.inventory.json +11 -2
- package/examples/index.json +932 -4
- package/examples/local-sample-evidence.json +24 -0
- package/examples/proof-cards.json +117 -0
- package/examples/service_heavy_cli_edit_v1.inventory.json +11 -2
- package/package.json +60 -44
- package/pytest.ini +9 -0
- package/references/packettracer-feature-atlas.json +67 -17
- package/references/packettracer-sample-catalog.json +45287 -4525
- package/references/packettracer-sample-catalog.md +599 -259
- package/references/proof-readiness-candidates.json +352 -0
- package/scripts/build_examples_index.py +228 -35
- package/scripts/build_sample_catalog.py +24 -44
- package/scripts/corpus_runner.py +430 -0
- package/scripts/coverage_matrix.py +1842 -1319
- package/scripts/donor_cache.py +354 -0
- package/scripts/donor_diagnostics.py +3 -1
- package/scripts/feature_atlas.py +65 -1
- package/scripts/generate_pkt.py +8762 -4070
- package/scripts/intent_parser.py +2242 -1138
- package/scripts/local_donors.py +340 -0
- package/scripts/packet_tracer_env.py +846 -391
- package/scripts/pkt_annotate.py +218 -0
- package/scripts/pkt_codec.py +420 -181
- package/scripts/pkt_editor.py +2405 -1226
- package/scripts/pkt_transformer.py +1072 -727
- package/scripts/pkt_verify.py +461 -0
- package/scripts/remote_search.py +197 -21
- package/scripts/runtime_doctor.py +80 -29
- package/scripts/sample_catalog.py +1372 -1195
- package/scripts/twofish_diagnostics.py +48 -31
- package/scripts/usage_ledger.py +218 -0
- package/scripts/vendor/README.md +44 -37
- package/scripts/vendor/twofish_pure.py +321 -0
- package/scripts/workspace_repair.py +548 -508
- package/templates/pt900/donors/README.md +15 -0
|
@@ -1036,12 +1036,39 @@ function main() {
|
|
|
1036
1036
|
}
|
|
1037
1037
|
}
|
|
1038
1038
|
printEnvExamples(runtimeDoctor);
|
|
1039
|
-
|
|
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
|
-
|
|
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.
|
package/docs/github-metadata.md
CHANGED
|
@@ -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.
|
|
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.
|
|
35
|
-
- release body source: `docs/release-notes-0.2.
|
|
36
|
-
- launch
|
|
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
|
|
package/docs/hero-demo-plan.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Goal
|
|
4
4
|
|
|
5
|
-
Prepare one conservative hero demo flow for the `0.2.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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.
|