Skip to content

LAB-903: frame-crosscheck bin support + python-frame bin twins + matrix refresh (post-0.4.0 close-out) - #47

Merged
27Bslash6 merged 5 commits into
mainfrom
agent/winston/03c41647
Jul 30, 2026
Merged

LAB-903: frame-crosscheck bin support + python-frame bin twins + matrix refresh (post-0.4.0 close-out)#47
27Bslash6 merged 5 commits into
mainfrom
agent/winston/03c41647

Conversation

@27Bslash6

@27Bslash6 27Bslash6 commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

LAB-903 — protocol 1.1 close-out: frame-crosscheck dual-encoding, python-frame bin twin, matrix refresh

Stage 6 of the envelope bin-encoding rollout (LAB-764), unblocked by cachekit 0.17.0 shipping to PyPI today with cachekit-core 0.4.0 (cachekit-py#249).

What changed

  1. tools/frame-crosscheck.mjs — accepts BOTH envelope encodings (legacy array-of-ints and protocol 1.1 msgpack bin 0xc4/c5/c6), like every real reader. The protocol#11-era deliberate bin rejection is gone; the legacy pin now lives where it belongs — in the legacy vectors' byte-identity plus a per-vector envelope_encoding assertion. Checksum remains array-of-ints-only in both encodings (protocol 1.1 excludes it from the flip) and the reader enforces that.
  2. test-vectors/python-frame.json — append-only bin twin of the default-path vector (default_saas_write_msgpack_bytestorage_bin), generated from the real cachekit 0.17.0 PyPI wheel via the new generate-bin-twin mode; per-vector generator provenance recorded (same discipline as the 0.11.1 originals). Legacy vectors' frame_hex bytes untouched; the legacy default-path vector gains only the machine-readable envelope_encoding: "int-array" pin.
  3. tools/python-frame-reference.py — new append-only generate-bin-twin mode (refuses non-bin wheels, refuses double-append); generate now REFUSES to run on bin-emitting wheels at runtime (it would clobber the irreproducible legacy vectors and the twin, and post-dual-decode that clobber would pass CI); --help prints the docstring.
  4. sdk-feature-matrix.md — SDK Overview versions refreshed against the registries (py 0.17.0 PyPI, core 0.4.0 crates.io, rs 0.5.0 + macros 0.5.0 crates.io, ts 0.1.4 npm); core/rs architecture notes updated. Rollout state recorded once, in the cachekit-core note: py ≥ 0.17.0 ships the flip; released rs 0.5.0 / ts 0.1.4 still pin the core 0.3 line (their 0.4.0 bumps — cachekit-rs#53, cachekit-ts#91 — are merged on main, unreleased; registry-verified today).
  5. spec/wire-format.md — descriptive-only update to the "Test vectors" fixture-inventory paragraph. No normative text touched (no MUST/SHOULD/layout changes).

Verification

  • Full local verify.yml suite green: all reference verifiers + both JS crosschecks, stdlib and msgpack-enabled variants.
  • Negative-tested (commands + output in the run log): envelope_encoding mismatch fails; bin-encoded checksum fails (hand-built frame); generate refuses cachekit 0.17.0; generate-bin-twin refuses double-append.
  • Twin byte-consistency hand-verified: 94 c4 22 … = fixarray(4) → bin8(34) LZ4 block (identical compressed bytes to the legacy vector) → fixarray(8) int checksum daf468618e624bfe → size 32 → "msgpack".

Gates

  • Expert panel (high stakes) RAN — 4 agents in parallel. Surviving findings applied in the second commit: checksum-encoding enforcement both sides, generate runtime clobber guard, legacy-vector envelope_encoding backfill, --help fix, matrix rollout-state dedup. Rejected: --force-clobber flag (YAGNI), deleting the generate mode (scope).
  • Docs gate: the matrix IS the doc — rows changed: SDK Overview (4 version cells), cachekit-core + cachekit-rs architecture notes, Last-updated banner. Plus the descriptive spec/wire-format.md fixture-inventory sentence.
  • Scope guard: the bin16/bin32 width-boundary vector for wire-format.json is LAB-868 (separate, already filed) — referenced, not duplicated here.

Summary by CodeRabbit

  • Documentation

    • Updated SDK Feature Matrix version information and architecture notes.
    • Clarified protocol 1.1 bin and legacy envelope encodings in the wire-format documentation.
  • Tests

    • Added protocol 1.1 twin test vectors for Python frame encoding.
    • Expanded cross-checking to validate both supported envelope formats and encoding metadata.
    • Improved reference fixture validation and added generation support for bin-encoded vectors.

… refresh (LAB-903)

Post-0.4.0 close-out of the envelope bin-encoding rollout (LAB-764 stage 6):

- tools/frame-crosscheck.mjs: accept BOTH envelope encodings (legacy
  array-of-ints and protocol 1.1 msgpack bin), like every real reader.
  The legacy pin lives in the legacy vectors' byte-identity, not in the
  reader rejecting bin. Vectors may declare envelope_encoding and the
  reader asserts the observed encoding matches (negative-tested).
- test-vectors/python-frame.json: append-only bin twin of the
  default-path vector, generated from the real cachekit 0.17.0 PyPI
  wheel (first release emitting bin envelopes) via the new
  generate-bin-twin mode; per-vector generator provenance recorded;
  legacy vectors byte-untouched.
- tools/python-frame-reference.py: new append-only generate-bin-twin
  mode (refuses non-bin wheels, refuses to overwrite); 'generate' now
  carries a clobber warning since a post-0.4.0 wheel cannot reproduce
  the legacy vectors.
- sdk-feature-matrix.md: SDK Overview versions refreshed against the
  registries (py 0.17.0, rs 0.5.0, core 0.4.0, ts 0.1.4); core/rs
  architecture notes updated with rollout state (rs/ts bumps merged on
  main, unreleased).
- spec/wire-format.md: descriptive-only fixture-inventory update in the
  'Test vectors' paragraph (no normative text touched).

The bin16/bin32 width-boundary vector for wire-format.json is LAB-868
(separate, already filed).
…903)

Panel findings applied (bug-hunter + security + craftsman converged):

- frame-crosscheck.mjs: checksum must be array-of-ints in BOTH encodings
  (protocol 1.1 excludes it from the bin flip) — a bin checksum now fails
  instead of passing silently. Negative-tested with a hand-built frame.
- python-frame-reference.py: _build_default_path_vector asserts the
  checksum type; 'generate' gains a runtime refusal on bin-emitting
  wheels (the docstring warning alone left a one-keystroke clobber of
  the irreproducible legacy vectors that would now pass CI);
  --help/-h prints the module docstring instead of exiting 2.
- python-frame.json: backfill envelope_encoding=int-array on the legacy
  default-path vector (JSON metadata only, frame_hex byte-untouched) so
  the legacy-read proof is tool-enforced again post-dual-decode.
- sdk-feature-matrix.md: rollout state deduplicated to one site (the
  cachekit-core architecture note) per the pragmatism pass.
@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 17 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 216d50ce-b946-4f0a-ad6e-d97d40f14b12

📥 Commits

Reviewing files that changed from the base of the PR and between 155ddd5 and d1b90ea.

📒 Files selected for processing (5)
  • sdk-feature-matrix.md
  • spec/wire-format.md
  • test-vectors/python-frame.json
  • tools/frame-crosscheck.mjs
  • tools/python-frame-reference.py

Walkthrough

The PR documents protocol 1.1 envelope encoding changes, adds a binary-envelope Python frame twin, teaches cross-check tooling to decode both representations, and adds guarded reference-vector generation with a generate-bin-twin mode.

Changes

Protocol 1.1 envelope vectors

Layer / File(s) Summary
Protocol metadata and vector contract
sdk-feature-matrix.md, spec/wire-format.md, test-vectors/python-frame.json
SDK version metadata, dual envelope encoding requirements, release provenance, and legacy/bin frame expectations are updated.
Dual-encoding cross-checks
tools/frame-crosscheck.mjs
MessagePack bin fields are decoded alongside integer arrays; envelope and checksum encodings are validated during full round-trip checks.
Reference vector generation
tools/python-frame-reference.py
Generation invariants and fixture loading are strengthened, legacy generation is guarded against bin-emitting wheels, and generate-bin-twin appends protocol 1.1 vectors with provenance.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant CLI as generate-bin-twin CLI
  participant Cachekit as installed cachekit wheel
  participant Fixture as python-frame.json
  participant Crosscheck as frame-crosscheck.mjs
  CLI->>Cachekit: Generate and round-trip the default frame
  Cachekit-->>CLI: Return bin envelope metadata
  CLI->>Fixture: Append the protocol 1.1 twin
  Crosscheck->>Fixture: Read expected encoding and frame values
  Crosscheck->>Cachekit: Validate the decoded frame round-trip
  Cachekit-->>Crosscheck: Return compressed_data and checksum bytes
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarises the main changes: bin support, Python frame bin twins, and a matrix refresh.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch agent/winston/03c41647

Comment @coderabbitai help to get the list of available commands.

@kodus-27b

This comment has been minimized.

Comment thread tools/python-frame-reference.py Outdated
Comment thread tools/python-frame-reference.py Outdated
Comment thread tools/python-frame-reference.py

@kodus-27b kodus-27b Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Found critical issues please review the requested changes

…errors (Kody, LAB-903)

Kody review round on PR #47:

- critical: every generation-path 'assert' converted to _require()
  (explicit raise) — assert is stripped under python -O, which would
  silently disable round-trip validation and let a corrupt vector into
  the cross-SDK source of truth. Fixed as a class (9 sites), not just
  the flagged line. Verified: verify passes under -O and _require still
  raises under -O.
- high: fixture read/parse extracted to _load_fixture() with explicit
  OSError/JSONDecodeError handling and a clear message (used by both
  verify and generate-bin-twin — same class, both call sites).
- low (print vs logging): deliberately not changed — print IS the
  user-facing output contract of this zero-dependency CLI tool;
  rationale on the review thread.
@kodus-27b

This comment has been minimized.

@27Bslash6

Copy link
Copy Markdown
Contributor Author

@kody start-review

Comment thread tools/python-frame-reference.py
@27Bslash6

Copy link
Copy Markdown
Contributor Author

@kody start-review

kodus-27b[bot]
kodus-27b Bot previously approved these changes Jul 29, 2026
@27Bslash6

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@27Bslash6

Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Full review finished.

@27Bslash6

Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Full review finished.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@tools/python-frame-reference.py`:
- Around line 416-428: Update the unsupported-mode fallback in the __main__
dispatch to terminate with a non-zero exit status after printing the existing
error and usage messages. Preserve the current behavior for -h/--help, generate,
generate-bin-twin, and verify.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 3d7fca2e-1ec6-446b-9e3b-64a9e7a13667

📥 Commits

Reviewing files that changed from the base of the PR and between 155ddd5 and fa41b79.

📒 Files selected for processing (5)
  • sdk-feature-matrix.md
  • spec/wire-format.md
  • test-vectors/python-frame.json
  • tools/frame-crosscheck.mjs
  • tools/python-frame-reference.py

Comment thread tools/python-frame-reference.py Outdated
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 29, 2026
Expert-panel review (crypto/protocol gate, critical stakes) mutation-tested the
conformance gate this PR adds and found it self-certifying: every drift it was
written to catch exited 0. Twelve mutations that previously passed now fail, in
both verifiers independently.

- generate() refused only the post-1.1 direction, and its message named the
  *_bin clobber in the one branch that cannot reach the write. A pre-1.1 wheel
  passed the sniff, rebuilt the fixture from 3 vectors and silently deleted the
  protocol-1.1 twin. Replaced with a name-level check: refuse if the rewrite
  would drop ANY committed vector. Closes both directions, on the names present
  rather than on a wheel version.

- envelope_encoding was opt-in (`if (env.envelope_encoding && ...)`). Since
  compressed_data_hex / checksum_hex / inner_msgpack_hex / original_size /
  format are byte-identical between a legacy vector and its bin twin, that
  field is the ONLY assertion that can catch an encoding drift - a vector
  allowed to omit it pinned nothing. Now mandatory in both tools.

- No coverage floor: deleting the twin, or flipping its declaration, left the
  gate green while proving one encoding or neither. "Readers MUST accept legacy
  forever" is only proven while a vector in each encoding exists - both tools
  now fail unless they observe int-array AND bin.

- verify(), the stdlib leg SDK authors run standalone, never decoded
  payload_envelope at all: it printed ok for the bin twin having proved nothing
  about bin, leaving this PR's entire subject asserted by the Node tool alone.
  It now classifies the envelope's compressed_data tag from the msgpack byte
  and cross-checks the declaration. The two CI legs are independent again.

- decodeBin's 0xc4 length prefix was used before validation: on a truncated
  buffer b[at+1] is undefined, so `at + NaN > b.length` is false, the overrun
  guard was bypassed and the reader returned an empty field plus a NaN offset.
  Failed closed in-repo only via decodeDocument's trailing-byte check; ported to
  a reader without it, a truncated envelope yields silent empty compressed_data.
  bin8 is the width every sub-256-byte rmp_serde envelope actually uses. Guard
  added at the read via u8len(), which also covers 0xd9 (str8, same class).
  Protocol 1.1 rule: validate declared length headers before using them.

- generate-bin-twin asserted in prose that encoding was the sole delta from the
  legacy vector but never checked it; a wheel that also changed LZ4 level,
  msgpack key order or the frame header would append a vector that lies about
  what it isolates. Now _require()s value, header and all five envelope fields
  byte-equal before appending.

- format joins checksum as a named exclusion from the bin flip in both tools;
  it feeds AAD construction, so a drift must not surface as a type pun.

- Idempotent re-run of generate-bin-twin returned 1; an append-only no-op is
  success. Corrected to 0, keeping 1 for the wrong-encoding refusal.

spec/wire-format.md said "no shipped release emits the canonical bin encoding
yet - cachekit-core v0.3.0 (current)", contradicted by this PR's own bin vector
from a shipping 0.17.0 wheel: an SDK author would conclude bin never appears on
the wire. Replaced with shipped status (core 0.4.0 / py >= 0.17.0 emit it; rs
0.5.0 and ts 0.1.4 still write legacy, so readers see both), stamp bumped 0.3.0
-> 0.4.0.

test-vectors/python-frame.json is deliberately UNCHANGED - downstream SDKs pin
it by sha256.
@kodus-27b

kodus-27b Bot commented Jul 29, 2026

Copy link
Copy Markdown

Code Review Completed! 🔥

The code review was successfully completed based on your current configurations.

Kody Guide: Usage and Configuration
Interacting with Kody
  • Request a Review: Ask Kody to review your PR manually by adding a comment with the @kody start-review command at the root of your PR.

  • Validate Business Logic: Ask Kody to validate your code against business rules by adding a comment with the @kody -v business-logic command.

  • Provide Feedback: Help Kody learn and improve by reacting to its comments with a 👍 for helpful suggestions or a 👎 if improvements are needed.

Current Kody Configuration
Review Options

The following review options are enabled or disabled:

Options Enabled
Bug
Performance
Security
Business Logic

Access your configuration settings here.

The coverage floor proves the bin encoding is exercised, which today means bin8
only - no committed vector exceeds 255 B compressed. Say so at the two widths
rather than letting them read as covered.
@27Bslash6

Copy link
Copy Markdown
Contributor Author

Expert-panel review (crypto/protocol gate) — complete, findings applied

The workspace's mandatory crypto/protocol gate applies to this PR: the diff changes how the ByteStorage envelope is decoded, the cross-SDK test vectors, and the conformance checker four SDKs are written against. Panel run at critical stakes (4 agents: bug-hunter-supreme, security-specialist, code-craftsman, catchphrase-agent), with the ratified decisions/envelope-bin-encoding.md constraints passed to each.

Three agents independently mutation-tested the gate this PR adds, and converged on the same structural problem: the gate was self-certifying. Every drift it was written to catch exited 0.

Applied (commits d64ec93, d1b90ea)

# Sev Finding Fix
1 CRIT generate() refused only the post-1.1 direction — and its message named the *_bin clobber in the one branch that cannot reach the write. A pre-1.1 wheel passed the sniff, rebuilt the fixture from 3 vectors and silently deleted the protocol-1.1 twin; both verifiers stayed green. Name-level check before the write: refuse if the rewrite would drop any committed vector. Closes both directions, keyed on names present rather than a wheel version.
2 CRIT envelope_encoding was opt-in (if (env.envelope_encoding && …)). compressed_data_hex, checksum_hex, inner_msgpack_hex, original_size and format are byte-identical between a legacy vector and its bin twin — so that field is the only assertion that can catch an encoding drift. A vector allowed to omit it pinned nothing. Mandatory in both tools.
3 CRIT No coverage floor. Deleting the twin — or flipping its declaration — left the gate green while proving one encoding, or neither. "Readers MUST accept legacy forever" was unpinned. Both tools now fail unless they observe int-array and bin.
4 MAJ verify(), the stdlib leg SDK authors run standalone, never decoded payload_envelope at all — it printed ok for the bin twin having proved nothing about bin, leaving this PR's entire subject asserted by the Node tool alone. It now classifies compressed_data's msgpack tag (stdlib, no dep) and cross-checks the declaration. The two CI legs are independent again.
5 MAJ decodeBin's 0xc4 length prefix was used before validation: on a truncated buffer b[at+1] is undefined, so at + NaN > b.length is false, the overrun guard was bypassed, and the reader returned an empty field plus a NaN offset. Failed closed in-repo only via decodeDocument's trailing-byte check — ported to a reader without it, a truncated envelope yields silent empty compressed_data. bin8 is the width every sub-256-byte rmp_serde envelope actually uses. Guard at the read via u8len(), which also covers 0xd9 (str8, same class). This is the ratified validate declared length headers before use rule.
6 MAJ generate-bin-twin asserts in prose that encoding is the sole delta from the legacy vector, but never checked it. A wheel that also changed LZ4 level, msgpack key order or the frame header would append a vector that lies about what it isolates — into a fixture downstream SDKs pin by sha256. _require()s value, header and all five envelope fields byte-equal before appending.
7 MAJ spec/wire-format.md NOTE read "no shipped release emits the canonical bin encoding yet — cachekit-core v0.3.0 (current)" — contradicted by this PR's own bin vector from a shipping 0.17.0 wheel. An SDK author would conclude bin never appears on the wire. Replaced with shipped status (core 0.4.0 / py ≥ 0.17.0 emit it; released rs 0.5.0 + ts 0.1.4 still write legacy, so readers see both). Stamp bumped 0.3.0 → 0.4.0.
8 MIN format was unguarded while checksum was, though the decision excludes both — and format feeds AAD construction, so a drift surfaced as a json.dumps TypeError rather than a named invariant. Named exclusion in both tools.
9 MIN Idempotent re-run of generate-bin-twin returned 1; an append-only no-op is success. Returns 0; 1 retained for the wrong-encoding refusal.
10 MIN bin16/bin32 are implemented but unexercised (no vector exceeds 255 B). Noted at the two cases, pointing at LAB-868.

Verification

Twelve mutations that previously exited 0 now fail, in both verifiers independently — baseline unmutated still passes both, and the fixture was restored byte-identical after each:

  • bin twin deleted → coverage floor fires · legacy vector deleted → fires
  • envelope_encoding omitted → mandatory-declaration fires
  • twin declares int-array while carrying bin → mismatch fires
  • legacy vector silently regenerated to bin bytes with the declaration dropped (the panel's demonstrated case) → fires
  • truncated 0xc4 prefix → clean bin8 length prefix overruns buffer, no NaN bypass

Full local CI suite green: interop-reference, encryption-verify --require-seal, wire-format-reference, python-frame-reference verify, file-backend-reference, frame-crosscheck.mjs.

test-vectors/python-frame.json is deliberately unchanged — downstream SDKs pin it by sha256, so this remediation touches only the tools and the spec.

Rejected, with reasons

  • Share the envelope encoders with tools/wire-format-reference.py and delete generate-bin-twin (code-craftsman, MAJ). Correct that the two tools solve one problem twice — but rewriting the fixture-writing path for an artifact four SDKs pin by sha256, in order to remove a mode that is now guarded, is the wrong trade at this tier. The catchphrase agent independently vetoed it for this PR and I agree. Worth a follow-up ticket: one generate that upserts by name dissolves the second entry point, the destructive warning and the refusal branch.
  • Assert compressed_data_hex / checksum_hex occur as substrings of expected_payload_hex (bug-hunter, MAJ). Wrong as stated — I implemented it and it failed on the committed vectors. The legacy encoding prefixes every byte ≥ 0x80 with 0xcc, so the raw hex is not a substring of an int-array payload. Reverted; finding chore: gitignore AI agent configs #4's tag classification covers the actual gap.
  • Bound lz4BlockDecompress's allocation from the declared original_size (security-specialist, MAJ). Real, and genuinely the same ratified rule as docs: update SDK feature matrix for cachekit-rs v0.2.0 #5 — but pre-existing, outside this diff, and safe in-repo because the driver compares originalSize to the vector first. Picking the cap is a judgment call on a shared artifact rather than a mechanical fix, so it belongs in its own ticket, not smuggled into this one.
  • Cut payload_envelope.encoding's prose ternary (catchphrase + craftsman). No verifier reads the key — but cutting it means either rewriting committed fixture bytes (breaking downstream sha256 pins) or leaving generator output diverged from the committed fixture, which is worse than the redundancy. Aesthetic benefit, real cost.
  • Footnote-mark the cachekit-core row in the SDK Overview table (craftsman, MIN). ² already carries two different meanings in the backends and compliance tables; adding a third in a table with no footnote block would collide. The overview lists SDK versions, not the core version each pins, so it isn't making the claim. The genuinely wrong status claim was chore: add org-canonical .coderabbit.yaml #7, and that is fixed.
  • Trim the "Last updated" changelog enumeration (catchphrase). Every prior LAB entry follows that convention in this file; changing it isn't this PR's job.

Panel-confirmed clean, for the record: AAD-neutrality holds provably — legacy and bin twin are byte-identical on every AAD input (header format/compressed/original_type, envelope format token, checksum, original_size); only field 0's msgpack tag differs, and AAD v0x03 carries no payload-derived bytes. Decision scope enforced both sides (a bin checksum and a bin format are each rejected). Single-document strictness intact — adding 0xc4/c5/c6 did not weaken decodeDocument; ck_frame_fed_to_interop_reader still rejects. No discriminator or version field introduced. No secrets in fixtures or tool output.

@27Bslash6

Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Full review finished.


Your included review limit is currently reached under our Fair Usage Limits Policy. Your recent PR review activity is in the 95th percentile or higher among CodeRabbit users, so adaptive limits apply. This review may still proceed through usage-based billing if eligible. Your next included review will be available in 17 minutes.

Comment thread tools/python-frame-reference.py
@27Bslash6

Copy link
Copy Markdown
Contributor Author

@kody start-review

@27Bslash6

Copy link
Copy Markdown
Contributor Author

@27Bslash6 — ready for your signoff / merge. CodeRabbit has now approved this head (d1b90ea, 22:37Z — its earlier Review rate limited pass has cleared), CI is green, 0 unresolved threads, and the mandatory crypto/protocol expert panel has run at critical stakes with its 10 surviving findings applied and 4 rejected in writing above. GitHub won't let me request a review from you since you're the PR author, hence the mention. Multica: LAB-903 is now awaiting-signoff.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant