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.
- Two attack families promoted into the public taxonomy (
python/bundle_spec/taxonomy.py,rust/bundle_spec/src/taxonomy.rs,schema/bundle_v1.schema.json,docs/adoption-guide.md):subscription_cpu_amp(a subscription/streaming filter whose per-notification server CPU is disproportionate to the trivial cost of subscribing) andstate_import_abuse(a malformed/oversized state artefact that crashes a node's snapshot/bootstrap import path before validation). The taxonomy is now 12 attack families +benign(was 10 + benign). Additive enum extension — existing bundles stay valid; a new bundle carrying either value validates against ≥0.2.0. Schema regenerated; all tests pass (Python + Rust).
provenance.source_class(python/bundle_spec/bundle_v1.py,README.md,schema/bundle_v1.schema.json): an optional attack-bundle sourcing tier.public-cve-replicationmarks a bundle that faithfully reproduces an EXTERNAL public disclosure (a CVE, GHSA, named third-party audit, or published post-mortem, referenced in aprovenance.public_sourceURL) and is therefore publishable;originalmarks the recorder's own measurement of a vendor-acknowledged abuse for which no external CVE exists (an ecosystem survey finding). Null for benign / unclassified bundles. Lets dataset curators cut a publishable, externally-sourced-only subset without inspecting each bundle. Additive optional field (the model already accepted extras viaextra="allow"): noBUNDLE_VERSIONchange, existing bundles stay valid. Schema regenerated; all 103 tests pass.
family_idscope boundary (python/bundle_spec/taxonomy.pydocstring +README.md): documented thatfamily_idis the validator / node-software vulnerability-class vocabulary, and that on-chain contract / DeFi-economic findings (AMM value-extraction, oracle/TWAP manipulation, liquidation, governance capture, bridge-contract message abuse, ERC-4626/reentrancy logic) are out of scope: a separate DeFi-economic namespace, neverfamily_idvalues, cross-mapped in the VIIledger/family_map.csv. Records the canonical-vocabulary ratification (the 11-valueFamilyIdenum, unchanged). No enum/wire change:BUNDLE_VERSIONunchanged; doc-only patch.
BundleFilesflag-semantics (python/bundle_spec/bundle_v1.py): tightened the docstring to spell out the forward-only contract.True⇒ file MUST be present and schema-conformant;False⇒ no on-disk constraint (the file may exist as an empty placeholder per the reference-example convention, but consumers should not read it). The change aligns the docstring with the actual semantics already implemented bytools/validate_bundle.pyand observed in the v0.1.0 reference example bundles, where someFalse-flagged modalities ship empty placeholder files. No on-the-wire schema change; this is a contract clarification only.
tools/validate_bundle.py: release-cert validator CLI that walks bundle directories + asserts each manifest validates againstBundleManifest+ asserts flag-honest file presence per the forward-onlyBundleFilessemantic. Per-bundle release-cert JSON output when--cert-outsupplied. Smoke-tested against the 5 reference example bundles (5/5 pass).
Initial release of Bundle v1.
- Python reference parser (
bundle_specpackage on PyPI): full Pydantic-validatedBundleManifest,Provenance,BundleFiles,PrimitiveDescriptor,ParameterSpec, six enum types (Posture,GroundTruthLabel,TrafficSource,FidelityClass,TargetAuthorisation,FamilyId), five parquet schema helper functions, and the deterministiccompute_genome_idhelper. - Rust reference parser (
bundle-speccrate on crates.io): byte-equivalent with the Python parser. Same wire enum strings, same JSON Schema, same parquet schemas (asarrow_schema::Schemaconstants), samecompute_genome_idoutput (verified by shared test vectors). JSON Schema embedded viainclude_str!(). - JSON Schema artefacts in
schema/, generated from the Pydantic models viatools/regen_schema.py. Stable formatter (sorted keys, 2-space indent, trailing newline). CI verifies no drift between committed schema and Pydantic source. - Five reference example bundles in
examples/:sui_F10_multi_get_objects_amp(attack),sui_F14_devinspect_tokio_wedge(attack),sui_BENIGN_reproducer_pipeline(benign),SOL_F10_multi_get_accounts_amp(attack),solana_BENIGN_organic_rpc(benign). Alllab-tls-frontedfidelity,self-ownedauthorisation, with post-term cleartext pcap stripped per the public-release audit. tools/regen_schema.py: regenerates JSON Schema from the canonical Pydantic models.tools/strip_pcap.py: drops post-term cleartext pcap from a bundle and re-emits the manifest withpackets_pcap=False, for safe public release of lab-tls-fronted bundles.
- 0.1.x: bug-fix-only patches on the current schema.
- 0.2.0: reserved for the upcoming
provenance.substrate×provenance.traffic_origindecomposition (additive: existingprovenance.fidelity_classbecomes derived). Tracked as the next test of additive extensibility in upstream methodology documentation. - 1.0.0: deferred to first set of external citations, not calendar-bound.
- Wire enum strings (snake_case for
FamilyId, kebab-case forTrafficSource/FidelityClass/TargetAuthorisation, mixed forPosture). compute_genome_idbyte-identical with Python (six shared test vectors).- Parquet schemas: same field names, types, nullability across languages.
- Python: 71 tests across
test_contracts.py(63),test_schema.py(8), plus 32 intest_examples.py. - Rust: 48 tests across 8 unit-test modules + integration tests + doctests.
- Example-bundle round-trip pinned: every parquet column type + nullability matches the v0.1.0 schema across all five examples.