All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Isolated pipeline instance paths with
--data-dir,--output-dir, and--log-dir. The selected log directory is passed to every stage, and generated artifacts, caches, user-provided LLM response placeholders, reports, and logs stay within their instance directories so concurrent runs do not interfere with each other. - Transaction/correlation-id request-response pairing in
corpus/request_response_pairing.py:detect_correlation_field()finds a header field that varies across messages but matches a nearby message within a small window (rejecting constant fields such as a protocol-id), and pairing is performed on that id. This replaces fragile adjacency pairing, which broke whenever a capture started mid-stream with an orphan response (shifting every pair by one). On the Modbus corpus, pairs went from 0% to 100% transaction-id and function-code agreement; relations recall rose ~0.50→0.67. NewRequestResponsePairingthresholds inconfig/thresholds.py. - Opcode/command isolation in boundary detection: when a confident framing/body boundary is
known and the leading body byte is constant or near-constant within a family, it is split
into its own 1-byte field and protected from merging. Recovers the discriminator byte (e.g.
the Modbus function code) instead of fusing it into a wider uint16/uint32. New thresholds
BoundaryDetection.ISOLATE_BODY_OPCODE/OPCODE_MAX_CARDINALITY_RATIOand CLI flag--no-opcode-isolationon stage 07. On Modbus this lifts field-semantics F1 ~0.11→0.50 and field-boundary F1 ~0.66→0.70 (overall ~0.50→0.58). - Rewrote
truth_files/modbus.jsoninto a capture-derived, tshark-validated evaluation oracle: concrete per-FC request/response types (FC01/02/03/04/05/06 only — matching the actual capture), a single shared MBAP header type, documented offset convention, and per-FC responses. Removed phantom FC15/FC16/exception types and added the previously missing FC02 (Read Discrete Inputs).
--llm-render-onlynow renders only the stage 15 protocol-synthesis prompt. It skips LLM boundary refinement, semantic labeling, and relation validation, prevents stale stage summaries from being auto-loaded, and omits their sections from the HTML report.- HTML family rulers now use the final
field_hypothesesboundaries and semantic attributes instead of stale pre-refinement summaries.
- Family-card tooltips are rendered in a body-level overlay so they are not clipped by card or report wrappers.
- Serialized chat-completion response content is displayed in the HTML LLM Analysis section.
- Boundary and semantic refinement sections are hidden when their stage failed with an
llm_apierror. - Boundary and semantic refinement applied/rejected counts and row statuses now reflect validation and final-model data instead of stale stage counters.
- Centralized algorithmic thresholds in
src/protocol_re/config/thresholds.py— all magic numbers (boundary anti-fragmentation, framing scoring weights, echo/length detection limits, relation confidence thresholds, field semantic scores, clustering batch sizes, etc.) moved from individual modules to a single documented config module organised by subsystem. Module-level constants are re-exported for backward compatibility. - Documented multi-layer protocol detection implementation
- Documented hybrid fusion design (concat, adaptive, learned, fixed)
- Updated README accuracy metrics to reflect actual performance
- Field semantics labeling
- Coordinate/layering header split logic
- Reorganize project structure
- Comprehensive documentation with MkDocs
- Getting started guide
- Architecture documentation
- Contributing guidelines
--use-user-provided-responseflag for LLM stages--reuse-llm-responsesflag to skip successful API calls on re-runs- LLM response caching in
data/llm_stage_results/ - LLM request retries with exponential backoff
- Sequential LLM requests to avoid rate limits
- Framing summary block and LLM refinement block in HTML reports
- Stage timing logs printed in runner as they complete
- LLM options moved to config file only (
config/llm_config.json) - Increased LLM prompt token limit to 10k
- Disabled JSON logs by default; logs now override
- Removed unnecessary data from HTML reports
- Field semantics labeling
- Coordinate/layering header split logic
- Crash in build protocol model due to key mismatch
- Pipeline continues when LLM API fails
- Prompts lacking proper evidence
- Ignored errors in LLM stages
- Empty prompt files bug
- Over-printing in main runner
- Multiple bug fixes in LLM integration stages
- Enhanced boundary detection with anti-fragmentation penalties
- Multi-layer protocol detection for transport/application separation
- Hybrid feature fusion with adaptive weighting
- Multi-stage LLM integration with evidence-gated validation
- Improved logging and observability
- Code structure refactoring
- Diagnostic tools for neural features, boundaries, and fusion
- Refactored stage 15 LLM analysis with prompt splitting
- Updated README with comprehensive feature documentation
- Over-segmentation in boundary detection
- Neural feature collapse detection
- Large payload handling optimization
- Semantic field labeling with protocol-agnostic inference
- Relation false positive reduction
- Ground truth evaluation framework
- LLM-assisted refinement with RFC 6902 patches
- Improved clustering accuracy to 90%+ for raw_bytes mode
- Enhanced request/response pairing algorithm
- Clustering performance issues with large corpora
- Memory leaks in feature extraction
- Neural feature mode with VAE latent vectors
- Structural feature mode with symbolic patterns
- Hybrid feature fusion methods
- Latent vector caching for performance
- Refactored clustering module for multiple feature modes
- Improved feature extraction performance
- Discriminator/opcode discovery with learned salience
- Request/response relation inference
- Echo field detection
- Length relation detection
- Improved pairing algorithm accuracy
- Enhanced relation confidence scoring
- Field boundary detection with entropy and mutual information
- Framing inference for header detection
- Feature extraction per family
- Protocol model assembly
- Improved boundary detection algorithm
- Enhanced framing hypothesis generation
- Message family discovery with HDBSCAN/DBSCAN
- Raw bytes feature extraction
- Family assignment propagation
- Clustering quality metrics
- Optimized clustering for large message corpora
- Improved family assignment coverage
- TShark-based message extraction
- Scapy-based TCP port extraction
- Message corpus management
- PCAP collection and deduplication
- Improved extraction performance
- Enhanced error handling
- HTML report generation with interactive elements
- Markdown report generation
- LLM evidence export
- Evaluation metrics computation
- Improved report formatting and structure
- Enhanced visualization in HTML reports
- Initial project structure
- Basic pipeline runner
- Core module organization
- README and basic documentation
- Protocol model schema definition
- JSON schema validation
- Ground truth comparison framework
- Evaluation result reporting
- Standardized protocol model format
- Improved schema documentation
- Added - New features
- Changed - Changes in existing functionality
- Deprecated - Soon-to-be removed features
- Removed - Removed features
- Fixed - Bug fixes
- Security - Security fixes