Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
220 commits
Select commit Hold shift + click to select a range
c637176
feat: RFC 9000 requirements manifest + MCP test report
ElNiak Mar 12, 2026
604bbde
feat: add formal model pattern library templates and update submodules
ElNiak Mar 13, 2026
702bad3
chore: update ivy-lsp and panther-ivy-plugin submodules
ElNiak Mar 13, 2026
66e806a
chore: update ivy-lsp and panther-ivy-plugin submodules
ElNiak Mar 13, 2026
2062554
fix: clean rfc9000 requirements text + fix Section 14 layer + update …
ElNiak Mar 13, 2026
83172aa
feat: fix api/ imports, update submodules (tool wiring + modularization)
ElNiak Mar 13, 2026
1b38363
refactor: remove dead code and consolidate duplicate implementations
ElNiak Mar 13, 2026
d1e30d1
chore: update submodules (MCP consolidation + plugin surface reduction)
ElNiak Mar 13, 2026
543bf73
chore: update ivy-lsp and panther-ivy-plugin submodules (PR review fi…
ElNiak Mar 13, 2026
8c7cdc1
feat: endpoint-type-aware file assembly + update submodules (LSP hand…
ElNiak Mar 16, 2026
ce78bc6
chore: update submodule pointers (evaluation fixes + test fix)
ElNiak Mar 16, 2026
f4a8c18
fix: unify endpoint-type classification, improve docstrings, clean im…
ElNiak Mar 16, 2026
96e6ee4
chore: update ivy-lsp submodule (tiered parsing cascade migration)
ElNiak Mar 17, 2026
842c4f2
fix: align _extract_test_directory with classify_endpoint_type
ElNiak Mar 17, 2026
0e39874
fix: remove 4 duplicate entries from rfc9000_requirements.yaml
ElNiak Mar 17, 2026
15e3974
chore: update panther-ivy-plugin submodule (nct-validate simplification)
ElNiak Mar 17, 2026
324c7f5
fix: use segment-based matching in classify_endpoint_type to prevent …
ElNiak Mar 17, 2026
d15a527
fix: add Python-level logging for endpoint fallback, narrow except, r…
ElNiak Mar 17, 2026
b59ce8e
fix: align rfc9000 requirement section fields, update submodule pointers
ElNiak Mar 17, 2026
4e044b4
test: add unit tests for _build_ivy_model_setup_commands()
ElNiak Mar 17, 2026
1b82baa
fix: restore panther-ivy-plugin submodule to consolidated tool names …
ElNiak Mar 17, 2026
f7977c3
chore: update ivy-lsp and panther-ivy-plugin submodules
ElNiak Mar 17, 2026
d0648a6
chore: update panther-ivy-plugin submodule (full audit — dedup, tool …
ElNiak Mar 17, 2026
459cff8
chore: update ivy-lsp submodule (server mixin extraction + post-revie…
ElNiak Mar 17, 2026
4bdaa11
chore: update ivy-lsp submodule (L6 workspaceSymbol scope-ranking fix)
ElNiak Mar 17, 2026
825a0ab
chore: update panther-ivy-plugin submodule (nct-validate v2)
ElNiak Mar 17, 2026
97f62e8
chore: update ivy-lsp submodule (nct-validate bug fixes — coverage st…
ElNiak Mar 18, 2026
0a7ee62
chore: upgrade .ivyworkspace to v3 with workspace_layers
ElNiak Mar 18, 2026
9b2f0a3
chore: update submodules and .ivyworkspace for Phase 0 completion
ElNiak Mar 18, 2026
d00331b
chore: update submodules (include_paths fix, SessionEnd cleanup hook)
ElNiak Mar 18, 2026
3f980d5
chore: update panther-ivy-plugin submodule (hook indexing readiness f…
ElNiak Mar 18, 2026
b3a3941
chore: update panther-ivy-plugin submodule (hook schema fix)
ElNiak Mar 18, 2026
78ef4c8
fix: resolve workspace diagnostics — time_api collision, phantom incl…
ElNiak Mar 18, 2026
ae11ef5
chore: update panther-ivy-plugin submodule (PR review fixes + hook cl…
ElNiak Mar 18, 2026
80b2968
chore: update panther-ivy-plugin submodule (interaction protocol for …
ElNiak Mar 18, 2026
8a97335
feat: layer-aware MCP staging, collision guard fallback, PID cleanup
ElNiak Mar 18, 2026
bd4b14a
chore: update ivy-lsp + panther-ivy-plugin submodules (workspace reli…
ElNiak Mar 19, 2026
737212c
chore: update panther-ivy-plugin submodule (LSP stdio fix + worker de…
ElNiak Mar 19, 2026
282e059
chore: update submodules (MCP bridge + tool consolidation)
ElNiak Mar 19, 2026
062c0ab
chore: update panther-ivy-plugin submodule (LSP PreToolUse hook)
ElNiak Mar 19, 2026
1fd0306
chore: update ivy-lsp submodule (debug trace instrumentation)
ElNiak Mar 19, 2026
1ded0eb
chore: update ivy-lsp submodule (safe_tool + worker FD isolation)
ElNiak Mar 19, 2026
539c125
chore: update ivy-lsp + panther-ivy-plugin submodules (crash resilience)
ElNiak Mar 19, 2026
1766f26
feat: split apt workspace layers and update submodules
ElNiak Mar 19, 2026
4555c70
chore: update ivy-lsp + panther-ivy-plugin submodules (goToDefinition…
ElNiak Mar 20, 2026
68a9812
chore: update ivy-lsp submodule (MCP shared cache write + parser clea…
ElNiak Mar 20, 2026
b76a74d
chore: update ivy-lsp submodule (MCP offline index fast-path)
ElNiak Mar 20, 2026
c9c6b4f
chore: update ivy-lsp submodule (unified .ivy-index/ cache)
ElNiak Mar 20, 2026
640b5f3
fix: add #lang headers, fix include naming, update ivy-lsp submodule
ElNiak Mar 20, 2026
95f5fe8
fix: switch MCP from mcp-bridge to standalone mode
ElNiak Mar 20, 2026
19df3fb
chore: update ivy-lsp and panther-ivy-plugin submodules (lazy bridge …
ElNiak Mar 20, 2026
0c2ea63
chore: update ivy-lsp and panther-ivy-plugin submodules (indexing fix)
ElNiak Mar 24, 2026
3e9f597
fix: restore deleted APT fork files and revert cross-protocol includes
ElNiak Mar 24, 2026
c283eac
feat: add workspace_groups, per-protocol markers, remove false apt_co…
ElNiak Mar 24, 2026
9854798
chore: update panther-ivy-plugin submodule (date-prefix session IDs)
ElNiak Mar 25, 2026
9853534
chore: update ivy-lsp submodule (file-based session ID resolution)
ElNiak Mar 25, 2026
14a38bb
chore: update panther-ivy-plugin submodule (hook log_event reads date…
ElNiak Mar 25, 2026
41889f7
chore: update panther-ivy-plugin submodule (server log redirection)
ElNiak Mar 25, 2026
d926e75
chore: remove tracked .ivy-index files (already in .gitignore)
ElNiak Mar 25, 2026
1210706
chore: update ivy-lsp and panther-ivy-plugin submodules (6 reliabilit…
ElNiak Mar 25, 2026
fa9715f
chore: update submodules (MCP tool timeout fixes)
ElNiak Mar 25, 2026
e3aabb4
chore: update ivy-lsp submodule to v0.12.0
ElNiak Mar 27, 2026
06e2f1b
chore: update panther-serena and ivy-lsp submodules
ElNiak Mar 27, 2026
ab27ce8
chore: update ivy-lsp submodule (per-call sidecar reconnect)
ElNiak Mar 30, 2026
b327774
chore: update ivy-lsp submodule (review cleanup fixes)
ElNiak Mar 30, 2026
05a5d5e
chore: update ivy-lsp and panther-ivy-plugin submodules (reliability …
ElNiak Mar 30, 2026
bbc38ef
feat: strict layer resolution + APT merge + protocol self-containment
ElNiak Mar 30, 2026
56a78d0
fix(observability): check CLAUDE_SESSION_ID in hook session ID resolu…
ElNiak Mar 31, 2026
99c2f07
fix: restore 8 truncated APT quic files from pre-merge-conflict state
ElNiak Mar 31, 2026
04eb89b
feat: ivyworkspace strict layers, APT syntax fixes, parser lineno, su…
ElNiak Apr 7, 2026
8412e2c
docs(apt): document known staging misses for QUIC utilities
ElNiak Apr 7, 2026
6e39402
chore: update panther-serena submodule (local_only symbol filter)
ElNiak Apr 7, 2026
f64854e
fix: update panther-serena submodule (line-count symbol filtering)
ElNiak Apr 7, 2026
aef2c72
chore: update ivy-lsp submodule (pyright zero errors)
ElNiak Apr 7, 2026
263869b
fix: update ivy-lsp submodule (3 MCP tool fixes from nct-validate)
ElNiak Apr 7, 2026
3673aff
chore: update panther-ivy-plugin submodule (v0.8.0)
ElNiak Apr 8, 2026
d32c650
fix: restore merge-damaged APT QUIC behavior files
ElNiak Apr 9, 2026
2da47d3
fix: repair APT module include paths broken by 04eb89ba
ElNiak Apr 9, 2026
b602ee4
fix: repair Ivy syntax errors across APT, CoAP, and patterns workspaces
ElNiak Apr 9, 2026
22f957f
fix: second pass — remaining parse errors across APT and CoAP
ElNiak Apr 9, 2026
cdc8457
fix: third pass — bare text, ellipsis in action bodies, trailing commas
ElNiak Apr 9, 2026
28ed4b5
fix: remove misplaced multiple_client/ from APT test tree
ElNiak Apr 9, 2026
e093dce
fix: remove colliding ping tests + scope new_prot workspace
ElNiak Apr 9, 2026
4431468
fix: add apt mim behavior + remove stale _note from apt marker
ElNiak Apr 9, 2026
87ca689
fix(bgp): uncomment after init block in bgp_shim.ivy
ElNiak Apr 9, 2026
14ea311
fix(bgp): connect is_errored to error subcode pipeline
ElNiak Apr 9, 2026
ba3651b
fix(bgp): enable test exports and remove invalid sub-action exports
ElNiak Apr 9, 2026
b0a7a5f
fix(bgp): rename ping_prot_* to bgp_prot_* in deser_ser
ElNiak Apr 9, 2026
1d0fae0
feat(bgp): add 6-state connection FSM from RFC 4271 Section 8
ElNiak Apr 9, 2026
fcdc086
feat(bgp): add HoldTimer and KeepaliveTimer model from RFC 4271
ElNiak Apr 9, 2026
d94bcaa
feat(bgp): fill empty stub files with skeleton implementations
ElNiak Apr 9, 2026
42f359c
feat(bgp): add timer exports and _finalize assertions to tests
ElNiak Apr 9, 2026
62b658f
feat(bgp): add RFC 4271 requirements manifest with 11 entries
ElNiak Apr 9, 2026
7188407
feat(bgp): add bracket-tag RFC annotations to require statements
ElNiak Apr 9, 2026
f849553
fix(bgp): rename bgp_prot_ser/deser to bgp_raw_ser/deser
ElNiak Apr 10, 2026
5ea3c55
fix(bgp): add explicit includes and resolve circular dependency
ElNiak Apr 10, 2026
c3da260
fix: resolve BGP model compile errors from include ordering and symbo…
ElNiak Apr 10, 2026
93d91ca
fix: auto-detect Z3 headers from Python z3-solver package
ElNiak Apr 10, 2026
53f51f3
refactor: re-generify tcp_impl with addr type parameter
ElNiak Apr 10, 2026
d4cedb9
refactor: replace bgp_network wrapper with direct tcp_impl instantiation
ElNiak Apr 10, 2026
b41a68c
fix: update ivy-lsp submodule with staging directory fixes
ElNiak Apr 10, 2026
ad34b85
fix: wrap as_idx_to_stream_pos C++ cast in trusted isolate
ElNiak Apr 10, 2026
3e7de95
feat: update ivy-lsp with timeout reporting for ivy_verify
ElNiak Apr 10, 2026
88bc581
fix: BGP serializer warning and tcp_impl parameterized bind address
ElNiak Apr 10, 2026
1e07294
feat: add BGP support to Ivy tester plugin with hex IP format
ElNiak Apr 10, 2026
c39f235
docs: fix passive voice in CLAUDE.md
ElNiak Apr 11, 2026
c61d8cd
fix: use bash SHELL for pyenv init in Dockerfiles
ElNiak Apr 11, 2026
fdf76e5
fix: three BGP test pipeline bugs (init hang, send queue, deser crash)
ElNiak Apr 13, 2026
2c4a4f9
fix: consolidate TCP impl — fix 3 bugs, add ip_addr param, migrate BGP
ElNiak Apr 14, 2026
fade6c0
fix: BGP FSM guards and notification deserializer crash
ElNiak Apr 14, 2026
7aa0c7a
fix: enable bidirectional BGP data exchange with FRR
ElNiak Apr 14, 2026
cf1437e
feat(bgp): add RFC 4271 assertion-line annotations and Hold Time vali…
ElNiak Apr 14, 2026
1e019de
feat(bgp): expand RFC 4271 requirements manifest with error handling …
ElNiak Apr 14, 2026
7ffa830
feat(bgp): implement Hold Time negotiation with bv[16] seconds type
ElNiak Apr 14, 2026
0d2a19f
fix(ivy): skip trusted sub-isolate NativeActions in ivy_check
ElNiak Apr 14, 2026
4e63c0a
chore: update submodule pointers for path resolution unification
ElNiak Apr 14, 2026
43f8a9e
chore: update panther-ivy-plugin for review fixes
ElNiak Apr 14, 2026
9a8e105
chore: update panther-ivy-plugin for simplify review fixes
ElNiak Apr 14, 2026
f926de5
chore: update ivy-lsp submodule for cache bypass and timeout fixes
ElNiak Apr 14, 2026
b658834
feat(bgp): add RFC 4271 sections 8.1, 9.1, 9.2 coverage + MCP bug fixes
ElNiak Apr 14, 2026
84f8c11
fix: enable native macOS compilation of Ivy network tests
ElNiak Apr 14, 2026
a4cc87d
chore: update ivy-lsp and panther-ivy-plugin submodules for workflow …
ElNiak Apr 14, 2026
04d2795
fix(bgp): correct Hold Time timer src/dst convention and update ivy-l…
ElNiak Apr 14, 2026
c94fee4
feat(bgp): extend RFC 4271 manifest to 36 requirements and add covera…
ElNiak Apr 14, 2026
e76331b
fix(bgp): correct 5 review findings in manifest and annotations
ElNiak Apr 14, 2026
a17b156
feat(bgp): add 6 RFC 4271 requirements for message lengths and attrib…
ElNiak Apr 14, 2026
6bfccfa
feat(bgp): add error-handling test and final coverage annotations
ElNiak Apr 14, 2026
3fd9153
feat(bgp): make 8 testable:false requirements testable + fix 6 bugs
ElNiak Apr 15, 2026
ba34f54
chore: update ivy-lsp and panther-ivy-plugin for panther venv PATH fix
ElNiak Apr 15, 2026
ff99ff8
fix(bgp): resolve generator starvation and enable UPDATE generation
ElNiak Apr 15, 2026
aee3fe4
chore: update panther-ivy-plugin submodule for generator docs
ElNiak Apr 15, 2026
2c6b16c
feat(bgp): enable UPDATE message generation with path attribute re-en…
ElNiak Apr 15, 2026
52c39a9
fix(bgp): fix UPDATE serializer state machine and add NOTIFICATION er…
ElNiak Apr 15, 2026
94c555e
fix(bgp): fix UPDATE serializer — override base class set/open_list/o…
ElNiak Apr 15, 2026
58485ca
feat(bgp): constrain NLRI to /24 prefix and fix header_length formula
ElNiak Apr 15, 2026
d706144
fix(bgp): quality gate fixes — serializer byte order, segmenttype, er…
ElNiak Apr 15, 2026
d914a40
fix(bgp): require all 3 mandatory path attrs before UPDATE generation
ElNiak Apr 15, 2026
b0f1da4
feat(bgp): add dedicated UPDATE compliance test spec
ElNiak Apr 15, 2026
039aa0f
chore: update ivy-lsp submodule for MCP tool fixes
ElNiak Apr 16, 2026
962ef24
chore: update ivy-lsp submodule for RFC service integration
ElNiak Apr 16, 2026
e460543
chore: update ivy-lsp submodule for RFC code review fixes
ElNiak Apr 16, 2026
65ffc5b
chore: update ivy-lsp submodule for final RFC review fixes
ElNiak Apr 16, 2026
8e7b7e0
chore: update ivy-lsp and panther-ivy-plugin submodules for RFC integ…
ElNiak Apr 16, 2026
c331dd5
fix(bgp): enable UPDATE generation — AS_PATH solver constraint + dese…
ElNiak Apr 16, 2026
ffed55d
chore: update ivy-lsp and panther-ivy-plugin for tool instructions re…
ElNiak Apr 16, 2026
a6f9791
fix(bgp): provide concrete NLRI values for Z3 + add apt retry to Dock…
ElNiak Apr 16, 2026
1c738d1
chore: update submodules for consolidated ivy_rfc tool docs
ElNiak Apr 16, 2026
a5f4e7a
chore: update ivy-lsp and panther-ivy-plugin submodule pointers
ElNiak Apr 17, 2026
a66b912
feat(bgp): scenario builder with announce_single — fix reserved keywo…
ElNiak Apr 17, 2026
faa7ea8
chore: update ivy-lsp submodule pointer with test cleanup
ElNiak Apr 17, 2026
bb94afa
chore: update ivy-lsp submodule pointer with formatter dispatch fix
ElNiak Apr 17, 2026
69399f0
fix(bgp): correct AS_PATH length byte and attr-size formula
ElNiak Apr 17, 2026
f8d0b02
chore: update ivy-lsp submodule pointer with simplify cleanup
ElNiak Apr 17, 2026
df21435
fix(bgp): prepend speaker_as to AS_PATH for eBGP originated routes
ElNiak Apr 17, 2026
1a3be0f
fix(bgp): set NEXT_HOP to speaker's wire interface per RFC 4271 §5.1.3
ElNiak Apr 17, 2026
ff5e606
fix(bgp): accept idle OR established in UPDATE test _finalize
ElNiak Apr 17, 2026
d5435f6
feat(bgp): add announce_multihop scenario with 3-AS AS_PATH
ElNiak Apr 17, 2026
88543d9
fix(bgp): cap KEEPALIVE generation to prevent TCP ACK starvation
ElNiak Apr 17, 2026
1b9b006
feat(bgp): add withdraw_single scenario + generalize UPDATE header_le…
ElNiak Apr 17, 2026
403a067
feat(bgp): commit_as_sequence redesign — unblocks UPDATE generation f…
ElNiak Apr 20, 2026
82afbd6
refactor(bgp): remove dead P3 queue actions + state variables
ElNiak Apr 20, 2026
8b67e14
fix(bgp): init received_origin_value to unblock announce UPDATE gener…
ElNiak Apr 20, 2026
4b49d2a
test(bgp): remove hold_timer_expire from announce acceptable_error wh…
ElNiak Apr 20, 2026
fc1e418
chore: update ivy-lsp + panther-ivy-plugin submodule pointers for pla…
ElNiak Apr 21, 2026
c266235
feat(bgp): group d modeling phase A+B - conn_state 2-arity + 6.8 yaml…
ElNiak Apr 21, 2026
2d49f14
chore(panther-ivy-plugin): advance submodule pointer
ElNiak Apr 23, 2026
93fef4d
chore(submodule): bump panther-ivy-plugin for XML-restructure refactor
ElNiak Apr 24, 2026
a5aa74a
chore(submodule): bump panther-ivy-plugin for userConfig default fix
ElNiak Apr 27, 2026
240b3e6
chore(submodule): bump panther-ivy-plugin for F1-F10 audit refactor
ElNiak Apr 27, 2026
be50b3b
chore(submodule): bump panther-ivy-plugin for Phase 1 flat-with-prefi…
ElNiak Apr 27, 2026
634daeb
chore(submodule): bump panther-ivy-plugin for Phases 2-5 + README
ElNiak Apr 27, 2026
5409b2f
chore: post-Phase-5 review cleanup + BGP journal migration
ElNiak Apr 27, 2026
ba2d43a
chore(submodule): bump panther-ivy-plugin for T1+T2+T4 simplification
ElNiak Apr 27, 2026
7617984
chore(submodule): bump panther-ivy-plugin for orchestrator Phase A
ElNiak Apr 28, 2026
fa273cc
chore(submodule): bump panther-ivy-plugin for cross-cutting skills + …
ElNiak Apr 28, 2026
873efb3
chore(submodule): bump panther-ivy-plugin for orchestrator Phase C
ElNiak Apr 28, 2026
6832223
feat(bgp,quic): RFC 4271 §6.8 collision detection + journal migration…
ElNiak Apr 28, 2026
da92a17
chore(submodule): bump panther-ivy-plugin for hook slim (Phase D)
ElNiak Apr 28, 2026
bba145a
chore(submodule): bump panther-ivy-plugin for Phase D D.11 render-scr…
ElNiak Apr 28, 2026
0b0444c
chore(submodule): bump panther-ivy-plugin for Phase D cross-cutting f…
ElNiak Apr 28, 2026
fc2df5a
chore(submodule): bump panther-ivy-plugin pointer (Phase E)
ElNiak Apr 28, 2026
cbccc98
chore(submodule): bump panther-ivy-plugin pointer (Phase F.1)
ElNiak Apr 28, 2026
3877f56
chore(submodule): bump panther-ivy-plugin pointer (Phase F.1 review I-1)
ElNiak Apr 28, 2026
7d41eb3
chore(submodule): bump panther-ivy-plugin pointer (Stop/Notification …
ElNiak Apr 29, 2026
5a61d58
chore(submodule): bump panther-ivy-plugin pointer (TestDetectIvyWorks…
ElNiak Apr 29, 2026
67a1593
fix(bgp): align _finalize conn_state with 2-arg signature; drop dorma…
ElNiak Apr 30, 2026
977e3cc
docs(bgp): add [rfc4271:4.2] annotation to open_message_recv requires
ElNiak Apr 30, 2026
a157623
chore(plugin): bump panther-ivy-plugin to ad9690c (journaling-contrac…
ElNiak Apr 30, 2026
0c882a9
feat(bgp): wire C tester leg via @{client_service:ip[bgp_c]:hex} plac…
ElNiak May 1, 2026
78b4bc7
docs(bgp): cross-reference §6.8.3 follow-up after Path α lands
ElNiak May 1, 2026
3a8af70
chore(plugin): bump panther-ivy-plugin to 58ff31b (hook-output discip…
ElNiak May 1, 2026
1e4a1b8
chore(plugin): bump panther-ivy-plugin to 68677b9 (test_hooks.py conf…
ElNiak May 1, 2026
f80957c
chore(plugin): bump panther-ivy-plugin to f4d8690 (simplify pass: reu…
ElNiak May 1, 2026
2ff765c
fix(panther_ivy): unblock Path α end-to-end (apt-mirror sed + bracket…
ElNiak May 1, 2026
e0a87d7
data(protocol-testing): bootstrap PROJECT.md for known protocols
ElNiak May 2, 2026
d3c164a
chore(plugin): bump panther-ivy-plugin to 7a91efb
ElNiak May 2, 2026
85e1742
chore(submodule): bump panther-ivy-plugin to 26f0505e (sync-statuslin…
ElNiak May 2, 2026
23de285
chore(submodule): bump panther-ivy-plugin to b520327 (Commit 2 + 3 + …
ElNiak May 2, 2026
d4c9efd
chore(submodule): bump panther-ivy-plugin to 6033fa9 (review-driven s…
ElNiak May 2, 2026
6255787
chore(submodule): bump panther-ivy-plugin to 0e5f8f1 (simplify-pass: …
ElNiak May 2, 2026
9cb379f
chore(submodule): bump panther-ivy-plugin to 1b357c7 (statusline sess…
ElNiak May 4, 2026
0f6b501
chore(submodule): bump panther-ivy-plugin to land harness-audit Tier-…
ElNiak May 4, 2026
555220c
chore(submodule): bump ivy-lsp to 9880af8 (Phase 1.5 audit-fence clos…
ElNiak May 4, 2026
3336497
chore(submodules): bump ivy-lsp + panther-ivy-plugin to land Tier-L PR2
ElNiak May 4, 2026
8f75a8c
chore(submodule): bump panther-ivy-plugin to land Tier-L PR3
ElNiak May 4, 2026
e1a0866
chore(submodule): bump ivy-lsp to land harness-audit Tier-L PR4
ElNiak May 4, 2026
25af34e
chore(submodule): bump panther-ivy-plugin to land Step-0 path-central…
ElNiak May 4, 2026
d0a99e3
chore(submodule): bump ivy-lsp to 08bb127 (Phase 5 + Phase 4 land)
ElNiak May 4, 2026
e73f958
chore(submodule): bump panther-ivy-plugin to land PR1 of hooks/ refactor
ElNiak May 4, 2026
ed7a290
chore(submodule): bump ivy-lsp to 34fc39f (review follow-ups: I1 LSP …
ElNiak May 4, 2026
b71cf1f
chore(submodule): bump panther-ivy-plugin to land Step-0.5 (baseline …
ElNiak May 4, 2026
5218b05
chore(submodule): bump panther-ivy-plugin to land Step-0.5 follow-up …
ElNiak May 4, 2026
9d6c956
chore(submodule): bump panther-ivy-plugin to land PR2 of hooks/ refac…
ElNiak May 4, 2026
a256351
chore(submodule): bump ivy-lsp to 563effa (/simplify A+B+D follow-ups)
ElNiak May 4, 2026
cfcb323
chore(submodule): bump panther-ivy-plugin to land PR3 of hooks/ refactor
ElNiak May 4, 2026
fc4b0f7
chore(submodule): bump panther-ivy-plugin to land PR4 of hooks/ refac…
ElNiak May 4, 2026
aa5d20f
chore(submodule): bump panther-ivy-plugin to land M1/M2/M3 minor foll…
ElNiak May 4, 2026
75b5fe8
chore(submodule): bump panther-ivy-plugin to land audit Commit A (run…
ElNiak May 4, 2026
7bd5dfa
chore(submodule): bump panther-ivy-plugin to land audit Commit B (doc…
ElNiak May 4, 2026
eb32617
chore(submodule): bump ivy-lsp + panther-ivy-plugin to land cluster-1…
ElNiak May 5, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Binary file modified .DS_Store
Binary file not shown.
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ ivy_termtab.py
*.drawio.xml
*.dsc

.backup/

# Python setup creates this
panther_ms_ivy.egg-info
Expand Down Expand Up @@ -84,3 +85,10 @@ ivy/lib/
#Ignore vscode AI rules
.github/instructions/codacy.instructions.md
# VSCode extension build artifacts (managed by vscode-ivy submodule's own .gitignore)

# Active workspace state (session-specific, not committed)
.ivy-workspace-state.json

.observability/
.ivy-index/
.serena/
56 changes: 52 additions & 4 deletions .ivyworkspace
Original file line number Diff line number Diff line change
@@ -1,6 +1,54 @@
{
"version": 1,
"include_paths": ["protocol-testing"],
"exclude_paths": ["doc/examples", "examples/ivy", "test", "notebooks", "patches"],
"standard_library": "ivy/include/1.7"
"version": 3,
"standard_library": "ivy/include/1.7",
"scope_detection": "auto",
"workspace_groups": {
"quic": ["quic", "quic_tests"],
"apt": ["apt", "apt_tests"],
"minip": ["minip"],
"bgp": ["bgp"],
"coap": ["coap"],
"scaffolds": ["scaffolds"]
},
"workspace_layers": [
{"id": "quic", "include_paths": [
"protocol-testing/quic/quic_stack",
"protocol-testing/quic/quic_utils",
"protocol-testing/quic/tls_stack",
"protocol-testing/quic/quic_shims",
"protocol-testing/quic/quic_config",
"protocol-testing/quic/quic_entities",
"protocol-testing/quic/quic_entities_behavior",
"protocol-testing/quic/quic_extensions",
"protocol-testing/quic/quic_fsm",
"protocol-testing/quic/quic_recovery",
"protocol-testing/quic/quic_attacks_stack"
], "priority": 1},
{"id": "quic_tests", "include_paths": [
"protocol-testing/quic/quic_tests"
], "priority": 2, "depends_on": ["quic"]},
{"id": "minip", "include_paths": ["protocol-testing/minip"], "priority": 3},
{"id": "apt", "include_paths": [
"protocol-testing/apt/apt_entities",
"protocol-testing/apt/apt_entities_behavior",
"protocol-testing/apt/apt_lifecycle",
"protocol-testing/apt/apt_network",
"protocol-testing/apt/apt_shims",
"protocol-testing/apt/apt_stack",
"protocol-testing/apt/apt_utils",
"protocol-testing/apt/apt_protocols/quic",
"protocol-testing/apt/apt_protocols/minip",
"protocol-testing/apt/apt_protocols/tls"
], "priority": 4},
{"id": "apt_tests", "include_paths": [
"protocol-testing/apt/apt_tests"
], "priority": 5, "depends_on": ["apt"]},
{"id": "bgp", "include_paths": ["protocol-testing/bgp"], "priority": 6},
{"id": "coap", "include_paths": ["protocol-testing/coap"], "priority": 7},
{"id": "scaffolds", "include_paths": ["protocol-testing/new_prot", "protocol-testing/http"], "priority": 8}
],
"exclude_paths": ["doc", "examples", "test", "notebooks", "patches", "submodules", "ivy",
"protocol-testing/apt/apt_protocols/dns",
"protocol-testing/apt/apt_protocols/http",
"protocol-testing/apt/apt_protocols/smtp"]
}
535 changes: 535 additions & 0 deletions .observability/sessions/unknown/events.jsonl

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ A key concept: the Ivy tester's role is the **opposite** of what it tests. Testi
- `use_system_models`: Toggle between standard and APT model architectures
- `log_level_events` / `log_level_binary`: Debug verbosity controls

Version-specific configs are loaded from `version_configs/{protocol}/` YAML files.
Load version-specific configs from `version_configs/{protocol}/` YAML files.

### Build Modes (Z3 Compilation)

Expand Down
3 changes: 3 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
uuid-dev

# Install pyenv (skip if already exists from base image)
# Use bash explicitly — pyenv init outputs bash-specific syntax that dash cannot parse
SHELL ["/bin/bash", "-c"]
RUN if [ -d "$HOME/.pyenv" ]; then \
echo "pyenv already installed, configuring environment..."; \
else \
Expand All @@ -125,6 +127,7 @@ RUN if [ -d "$HOME/.pyenv" ]; then \
ln -sf "$(pyenv which python3.10)" /usr/local/bin/python3.10 && \
ln -sf "$(pyenv which python)" /usr/local/bin/python && \
python3.10 -V && which python3.10 && python -V && which python
SHELL ["/bin/sh", "-c"]

# Build external dependencies
RUN cd /opt && \
Expand Down
74 changes: 40 additions & 34 deletions Dockerfile.buildkit
Original file line number Diff line number Diff line change
Expand Up @@ -52,35 +52,30 @@ RUN bash -c '\
ls /etc/apt/sources.list.d || true'

# APT package installation with cache mounts for Ubuntu 20.04 + Deadsnakes PPA
# All system dependencies in single RUN to maximize cache hit
RUN --mount=type=cache,target=/var/cache/apt-${TARGETPLATFORM},sharing=locked \
--mount=type=cache,target=/var/lib/apt-${TARGETPLATFORM},sharing=locked \
apt update && \
apt install -y software-properties-common && \
apt update && \
apt --fix-missing -y install \
build-essential python3-ply alien iptables iproute2 iputils-ping \
tzdata curl tar gcc g++ cmake tix pkg-config libssl-dev lsof \
graphviz graphviz-dev doxygen faketime libscope-guard-perl \
libtest-tcp-perl libbrotli-dev libev-dev libhttp-parser-dev \
libbsd-dev snapd rand binutils binutils-dev autoconf automake \
autotools-dev libtool libjemalloc-dev libboost-all-dev libboost-dev \
ca-certificates mime-support libevent-dev libdouble-conversion-dev \
libgflags-dev libgoogle-glog-dev libiberty-dev liblz4-dev liblzma-dev \
libsnappy-dev zlib1g-dev libsodium-dev libffi-dev cargo libunwind-dev \
radare2 strace bridge-utils libreadline-dev tk libgv-tcl libgraphviz-dev \
libdevil1c2 libgts-0.7-5 liblasi0 tcl-dev tcl libgmp-dev dsniff sudo jq ninja-build \
libomp-dev git clang clang-tidy clang-format


# 0) System toolchain + CPython feature headers (bz2, sqlite, zlib, ssl, tk, etc.)
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential make gcc g++ curl ca-certificates git \
zlib1g-dev libbz2-dev liblzma-dev \
libsqlite3-dev libssl-dev libffi-dev libreadline-dev \
tk-dev tcl-dev libncursesw5-dev libgdbm-dev libnss3-dev libedit-dev \
uuid-dev
printf 'Acquire::Retries "3";\nAcquire::http::Timeout "120";\nAcquire::https::Timeout "120";\n' > /etc/apt/apt.conf.d/99-retries && \
sed -i 's|://archive.ubuntu.com|://fr.archive.ubuntu.com|g' /etc/apt/sources.list && \
apt-get update --fix-missing -y && apt upgrade -y && \
apt-get install -y --no-install-recommends \
software-properties-common build-essential make gcc g++ curl \
python3-ply alien iptables iproute2 iputils-ping tzdata tar \
cmake tix pkg-config libssl-dev lsof graphviz graphviz-dev doxygen faketime \
libscope-guard-perl libtest-tcp-perl libbrotli-dev libev-dev libhttp-parser-dev \
libbsd-dev snapd rand binutils binutils-dev autoconf automake autotools-dev libtool \
libjemalloc-dev libboost-all-dev libboost-dev ca-certificates mime-support \
libevent-dev libdouble-conversion-dev libgflags-dev libgoogle-glog-dev libiberty-dev \
liblz4-dev liblzma-dev libsnappy-dev zlib1g-dev libbz2-dev libsqlite3-dev \
libffi-dev libreadline-dev cargo libunwind-dev radare2 strace bridge-utils \
tk libgv-tcl libgraphviz-dev libdevil1c2 libgts-0.7-5 liblasi0 tcl-dev tcl \
libgmp-dev dsniff sudo jq ninja-build libomp-dev git clang clang-tidy clang-format \
tk-dev libncursesw5-dev libgdbm-dev libnss3-dev libedit-dev uuid-dev && \
rm -rf /var/lib/apt/lists/*

# Install pyenv (skip if already present from base image)
# Use bash explicitly — pyenv init outputs bash-specific syntax that dash cannot parse
SHELL ["/bin/bash", "-c"]
RUN if [ ! -d "$HOME/.pyenv" ]; then \
curl https://pyenv.run | bash && \
echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bashrc && \
Expand All @@ -100,13 +95,14 @@ RUN if [ ! -d "$HOME/.pyenv" ]; then \
ln -sf "$(pyenv which python3.10)" /usr/local/bin/python3.10 && \
ln -sf "$(pyenv which python)" /usr/local/bin/python && \
python3.10 -V && which python3.10 && python -V && which python
SHELL ["/bin/sh", "-c"]

# Install pip with Python cache mount
RUN --mount=type=cache,target=/root/.cache-${TARGETPLATFORM}/pip \
RUN --mount=type=cache,target=/root/.cache-${TARGETPLATFORM}/pip,id=pip-bootstrap-${TARGETPLATFORM} \
curl -sS https://bootstrap.pypa.io/get-pip.py | python3.10

# Python packages with pip cache
RUN --mount=type=cache,target=/root/.cache-${TARGETPLATFORM}/pip \
RUN --mount=type=cache,target=/root/.cache-${TARGETPLATFORM}/pip,id=pip-deps-${TARGETPLATFORM} \
python3.10 -m pip install \
pexpect chardet pandas scandir ply pygraphviz pydot progressbar2

Expand Down Expand Up @@ -239,8 +235,8 @@ RUN --mount=type=cache,target=/var/cache/apt,id=toolchain-$TARGETPLATFORM,sharin
# BUILD_MODE passed as env var (not as layer ENV) to avoid invalidating COPY layers.
# NOTE: When Z3_SOURCE=local, both Python bindings and C++ test binaries
# use Z3 4.7.1 from the submodule. When Z3_SOURCE=pip, Python uses 4.13.4.0.
RUN --mount=type=cache,target=/root/.cache/pip-$TARGETPLATFORM,sharing=locked \
--mount=type=cache,target=/tmp/python-build-$TARGETPLATFORM,sharing=locked \
RUN --mount=type=cache,target=/root/.cache/pip,id=pip-build-${TARGETPLATFORM} \
--mount=type=cache,target=/tmp/python-build-${TARGETPLATFORM},id=pybuild-${TARGETPLATFORM} \
BUILD_MODE=${BUILD_MODE} python3.10 build_submodules.py --skip-z3 && \
if [ "$Z3_SOURCE" = "local" ]; then \
# Install locally-built Z3 Python bindings as the system 'z3' package. \
Expand Down Expand Up @@ -299,6 +295,16 @@ RUN --mount=type=cache,target=/root/.cache/pip-$TARGETPLATFORM,sharing=locked \
fi; \
fi

# =============================================================================
# STAGE 4: Z3-VERIFY - Isolated Z3 verification (only runs on Z3 changes)
# Does NOT depend on ivy/ or protocol-testing, so changes to those files
# don't invalidate this cached stage.
# =============================================================================

FROM base AS z3-verify

ARG Z3_SOURCE

# Verify egg has the z3_shim fix (catches pyenv egg caching stale code)
RUN python3.10 -c "\
import importlib.util, pathlib; \
Expand Down Expand Up @@ -329,15 +335,12 @@ assert 'Z3_MINOR_VERSION >= 12' in src, \
'STALE: ivy_to_cpp.py missing Z3 4.12 version guard for mk_enum/mk_decl'; \
print('OK: ivy_to_cpp.py uses Python-based Z3 version macros with 4.12 guards')"

# Add protocol testing files (last to optimize layer caching)
COPY protocol-testing /opt/panther_ivy/protocol-testing/

# =============================================================================
# FINAL STAGE: Runtime configuration with platform metadata
# =============================================================================

# Target platform runtime stage (inherits platform from base)
FROM base AS final
# Target platform runtime stage (inherits platform from z3-verify)
FROM z3-verify AS final

# Platform and build metadata for debugging and compliance
ARG BUILDPLATFORM
Expand All @@ -364,6 +367,9 @@ LABEL build.syntax="docker/dockerfile:1"
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD python3.10 --version && echo "IVY tester runtime healthy" || exit 1

# Add protocol testing files (last to optimize layer caching)
COPY protocol-testing /opt/panther_ivy/protocol-testing/

# Set working directory
WORKDIR /opt/panther_ivy

Expand Down
37 changes: 37 additions & 0 deletions _shared.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,43 @@ def oppose_role(role: str) -> str:
return "client" if role == "server" else "server"


def classify_endpoint_type(test_name: str, role_name: str) -> str:
"""Classify a test into its endpoint type for directory-based filtering.

Uses the naming convention ``{protocol}_{endpoint}_test_{scenario}`` to
extract the endpoint. Only underscore-delimited segments **before** the
first ``test`` segment are considered keywords. This prevents scenario
words like ``mim`` in ``quic_client_test_0rtt_mim_replay`` from causing
a misclassification.

Checks keywords in priority order: mim > client > server > attacker.
First match wins. Falls back to oppose_role() when no keyword matches.

Returns 'mim', 'client', or 'server'. The 'attacker' keyword maps to
'server' because attacker tests live in server_tests/.
"""
segments = test_name.lower().split("_")

# Identify endpoint segments: everything before the first "test" segment.
# E.g., quic_client_test_0rtt_mim_replay -> segments before "test" = {quic, client}
try:
test_idx = segments.index("test")
endpoint_segments = set(segments[:test_idx])
except ValueError:
# No "test" segment found; fall back to checking all segments.
endpoint_segments = set(segments)

for keyword, result in [
("mim", "mim"),
("client", "client"),
("server", "server"),
("attacker", "server"),
]:
if keyword in endpoint_segments:
return result
return oppose_role(role_name)


def detect_role(test_name: str) -> str:
"""Infer role from test name convention: *_server_* or *_client_*."""
if "_server_" in test_name or test_name.endswith("_server"):
Expand Down
43 changes: 43 additions & 0 deletions api/_shared.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
"""Shared utilities re-exported from package root for API layer.

This module re-exports panther_ivy._shared names that the API layer
depends on, preserving the zero-PANTHER-imports contract while
eliminating code duplication.

The root _shared.py is the single source of truth for verdict logic,
regex patterns, crash indicators, and role utilities.
"""

from .._shared import ( # relative import: api/ -> parent package -> _shared.py
ASSUMPTION_FAILED_PATTERN,
CRASH_INDICATORS_IUT,
CRASH_INDICATORS_TESTER,
PROTOCOL_ACTIVITY_PATTERN,
TEST_COMPLETED_PATTERN,
VERDICT_IUT_CRASH,
VERDICT_NON_COMPLIANT,
VERDICT_NO_VIOLATION_FOUND,
VERDICT_TESTER_CRASH,
VERDICT_UNKNOWN,
classify_endpoint_type,
detect_role,
determine_verdict,
oppose_role,
)

__all__ = [
"ASSUMPTION_FAILED_PATTERN",
"CRASH_INDICATORS_IUT",
"CRASH_INDICATORS_TESTER",
"PROTOCOL_ACTIVITY_PATTERN",
"TEST_COMPLETED_PATTERN",
"VERDICT_IUT_CRASH",
"VERDICT_NON_COMPLIANT",
"VERDICT_NO_VIOLATION_FOUND",
"VERDICT_TESTER_CRASH",
"VERDICT_UNKNOWN",
"classify_endpoint_type",
"detect_role",
"determine_verdict",
"oppose_role",
]
17 changes: 7 additions & 10 deletions api/compiler.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,16 @@
_DEFAULT_DOCKER_IVY_INCLUDE_DIR = "$PYTHON_IVY_DIR/ivy/include/1.7"


def _extract_test_directory(test_name: str) -> str:
def _extract_test_directory(test_name: str, role_name: str = "server") -> str:
"""Extract test subdirectory from test name.

Mirrors ivy_command_mixin.py:597-605 logic for nested test directories.
Delegates to classify_endpoint_type() for consistent behavior
with ivy_command_mixin._extract_test_directory_from_name().
"""
lower = test_name.lower()
if "client" in lower:
return "client_tests"
elif "server" in lower:
return "server_tests"
elif "mim" in lower:
return "mim_tests"
return ""
from ._shared import classify_endpoint_type

endpoint = classify_endpoint_type(test_name, role_name)
return f"{endpoint}_tests"


def _detect_ivy_include_dir() -> str:
Expand Down
2 changes: 1 addition & 1 deletion config_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ class Test(BaseModel):


class PantherIvyVersion(VersionBase):
"""Version information for PantherIvy following PANTHER standards. (TODO not used)"""
"""Version information for PantherIvy following PANTHER standards."""

# Provide defaults for required base fields
version: str = Field(default="", description="Version string")
Expand Down
Loading