Skip to content

feat(cloud-brain): the wire format, its validation and shared fixtures (CB1) - #47

Merged
shaal merged 1 commit into
mainfrom
ship/cb1-wire-format
Sep 30, 2026
Merged

shaal merged 1 commit into
mainfrom
ship/cb1-wire-format

Conversation

@shaal

@shaal shaal commented Sep 30, 2026 •

Copy link
Copy Markdown
Owner

The browser and the future Rust service must refuse the same bodies for the
same reasons, so one module (AI-Car-Racer/cloud/wire.js) defines protocol 1
and a generator writes fixtures both sides run: 154 bodies (10 as raw bytes)
with expected results, plus context and meta cleaning tables.

  • Canonical padded base64 of little-endian Float32; strict JSON types; a
    fixed order of checks with stable reason codes; parsers that never throw.
  • Brain ids are 128 bits of SHA-256 of the weights: xxHash32 ids (the local
    archive's) can be forged for any brain.
  • Tracks are listed once per contribution and brains point at them (a track
    in every brain did not fit 16 brains in 64 KB).
  • Bodies are read as bytes with strict UTF-8; answers may be 256 KiB.
  • Weight bound 16: "Use my driving" clones reach 6.76 at most.
  • cleanLearning moves to learning/policy.js for both the cross-tab and cloud
    wires.

Five adversarial review rounds; 253 of 266 single mutations fail a test.

Confidence

Verbatim from /ship's Phase 2 confidence gate — per-axis score (0–25), the
evidence used, and the self-critique. Treat anything below 20 as a known soft
spot to verify before relying on it.

Requirements Fit: 24/25

  • Evidence:
    • AI-Car-Racer/cloud/wire.js covers the CB1 scope: protocol 1, canonical base64 Float32, SHA-256 ids, a fixed order of checks, parsers that never throw, builders, and four answer parsers with HTTP statuses.
    • tests/fixtures/cloud-brain/: 154 bodies and 2 cleaning tables, generated by scripts/cloud-brain-fixtures.mjs. The weight bound is 16, measured at 6.76 from 14 clones.
    • The full contract is in docs/validation/cloud-brain.md#cb1. The plan box and its sub-items are ticked.
  • To honestly score 25 I would need to: run the fixtures in the Rust service (CB2's job). The round-4 reviewer's offline Rust probe (serde_json with float_roundtrip and from_utf8) matched the JS on all fixtures and on 14 000 hard numbers.
  • Self-critique: the forget route has fixtures, but its service side waits for CB4.

Functional Robustness: 24/25

  • Evidence:
    • Five adversarial rounds found and fixed: coercion, forgeable ids, depth, surrogates, UTF-8 bytes, byte containers, detached buffers, -0 and strict types.
    • A hostile fuzz test ran 500 byte edits, 1 500 text edits and 20 000-deep nesting through 7 parsers. Nothing threw.
  • To honestly score 25 I would need to: fuzz natively in Rust (planned in CB4).
  • Self-critique: 13 mutants survive. Each one is argued as equivalent or out of reach, and a wrong argument there would hide a gap.

Verification Evidence: 24/25

  • Evidence:
    • npm run test:cloud-brain → 10/10 pass.
    • npm run test:learning → 147/147 pass.
    • npm run test:learning:browser → exit 0 (covers cleanLearning, which moved to learning/policy.js).
    • Five mutation sets: 266 mutants, 253 killed.
  • To honestly score 25 I would need to: run the service against the fixtures (CB2).
  • Self-critique: the claim that browsers refuse shared memory in TextDecoder is untested in a browser. The copy is harmless either way.

System Safety & Integration: 24/25

  • Evidence:
    • This is a new, isolated module. The only change to app code is a pure move of cleanLearning, and the unit and browser learning tests pass after it.
    • Nothing is deployed and there are no external calls.
  • To honestly score 25 I would need to: run the full browser suite (only the learning browser test ran).
  • Self-critique: 2.9 MB of fixtures enter the repo. Almost all of it is padding, which git compresses well.

Total: 96/100. Gate (≥95 AND no axis <15): PASS

…s (CB1)

The browser and the future Rust service must refuse the same bodies for the
same reasons, so one module (AI-Car-Racer/cloud/wire.js) defines protocol 1
and a generator writes fixtures both sides run: 154 bodies (10 as raw bytes)
with expected results, plus context and meta cleaning tables.

- Canonical padded base64 of little-endian Float32; strict JSON types; a
  fixed order of checks with stable reason codes; parsers that never throw.
- Brain ids are 128 bits of SHA-256 of the weights: xxHash32 ids (the local
  archive's) can be forged for any brain.
- Tracks are listed once per contribution and brains point at them (a track
  in every brain did not fit 16 brains in 64 KB).
- Bodies are read as bytes with strict UTF-8; answers may be 256 KiB.
- Weight bound 16: "Use my driving" clones reach 6.76 at most.
- cleanLearning moves to learning/policy.js for both the cross-tab and cloud
  wires.

Five adversarial review rounds; 253 of 266 single mutations fail a test.
@coderabbitai

coderabbitai Bot commented Sep 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 165 files, which is 65 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: 7646139c-8cb0-4dbb-9ddf-b5e9645a6ca7

📥 Commits

Reviewing files that changed from the base of the PR and between a396209 and 9247398.

📒 Files selected for processing (165)
  • AI-Car-Racer/cloud/wire.js
  • AI-Car-Racer/crosstab/wire.js
  • AI-Car-Racer/learning/policy.js
  • docs/plan/cloud-brain.md
  • docs/validation/cloud-brain-cb1-weights.json
  • docs/validation/cloud-brain.md
  • package.json
  • scripts/cloud-brain-fixtures.mjs
  • tests/cloud-brain-wire.test.mjs
  • tests/fixtures/cloud-brain/contexts.json
  • tests/fixtures/cloud-brain/invalid/body-is-an-array.json
  • tests/fixtures/cloud-brain/invalid/body-too-large-and-not-json.json
  • tests/fixtures/cloud-brain/invalid/body-too-large-before-utf8.json
  • tests/fixtures/cloud-brain/invalid/body-too-large-utf8.json
  • tests/fixtures/cloud-brain/invalid/body-too-large.json
  • tests/fixtures/cloud-brain/invalid/brain-schema-5.json
  • tests/fixtures/cloud-brain/invalid/brain-schema-as-string.json
  • tests/fixtures/cloud-brain/invalid/brain-schema-before-token.json
  • tests/fixtures/cloud-brain/invalid/brains-not-a-list.json
  • tests/fixtures/cloud-brain/invalid/contribute-bad-items.json
  • tests/fixtures/cloud-brain/invalid/contribute-bad-track-indices.json
  • tests/fixtures/cloud-brain/invalid/contribute-float-just-over-bound.json
  • tests/fixtures/cloud-brain/invalid/contribute-float-just-past-halfway.json
  • tests/fixtures/cloud-brain/invalid/contribute-item-precedence.json
  • tests/fixtures/cloud-brain/invalid/contribute-items-not-objects.json
  • tests/fixtures/cloud-brain/invalid/contribute-response-17-accepted.json
  • tests/fixtures/cloud-brain/invalid/contribute-response-17-rejected.json
  • tests/fixtures/cloud-brain/invalid/contribute-response-51-feedback-rejected.json
  • tests/fixtures/cloud-brain/invalid/contribute-response-bad-id.json
  • tests/fixtures/cloud-brain/invalid/contribute-response-feedback-accepted-negative.json
  • tests/fixtures/cloud-brain/invalid/contribute-response-feedback-count.json
  • tests/fixtures/cloud-brain/invalid/contribute-response-feedback-index-50.json
  • tests/fixtures/cloud-brain/invalid/contribute-response-index-negative.json
  • tests/fixtures/cloud-brain/invalid/contribute-response-index-out-of-range.json
  • tests/fixtures/cloud-brain/invalid/contribute-response-index-string.json
  • tests/fixtures/cloud-brain/invalid/contribute-response-no-feedback-accepted.json
  • tests/fixtures/cloud-brain/invalid/contribute-response-strings.json
  • tests/fixtures/cloud-brain/invalid/contribute-response-too-large.json
  • tests/fixtures/cloud-brain/invalid/contribute-response-unknown-reason.json
  • tests/fixtures/cloud-brain/invalid/contribute-track-index-no-tracks.json
  • tests/fixtures/cloud-brain/invalid/contribute-track-index-tracks-absent.json
  • tests/fixtures/cloud-brain/invalid/contribute-typed-fields.json
  • tests/fixtures/cloud-brain/invalid/counts-before-tracks.json
  • tests/fixtures/cloud-brain/invalid/counts-brains-before-feedback.json
  • tests/fixtures/cloud-brain/invalid/counts-tracks-before-brains.json
  • tests/fixtures/cloud-brain/invalid/error-response-invalid-utf8.json
  • tests/fixtures/cloud-brain/invalid/error-response-other-protocol.json
  • tests/fixtures/cloud-brain/invalid/error-response-too-large.json
  • tests/fixtures/cloud-brain/invalid/error-response-unknown-reason.json
  • tests/fixtures/cloud-brain/invalid/error-response-unknown.json
  • tests/fixtures/cloud-brain/invalid/forget-bad-token.json
  • tests/fixtures/cloud-brain/invalid/json-before-protocol.json
  • tests/fixtures/cloud-brain/invalid/json-before-shape.json
  • tests/fixtures/cloud-brain/invalid/list-shapes-before-counts-5-tracks.json
  • tests/fixtures/cloud-brain/invalid/list-shapes-before-counts-feedback.json
  • tests/fixtures/cloud-brain/invalid/list-shapes-before-counts.json
  • tests/fixtures/cloud-brain/invalid/not-json-bom-bytes.json
  • tests/fixtures/cloud-brain/invalid/not-json-bom.json
  • tests/fixtures/cloud-brain/invalid/not-json-depth-33-mixed.json
  • tests/fixtures/cloud-brain/invalid/not-json-depth-33-objects.json
  • tests/fixtures/cloud-brain/invalid/not-json-depth-33.json
  • tests/fixtures/cloud-brain/invalid/not-json-invalid-utf8.json
  • tests/fixtures/cloud-brain/invalid/not-json-lone-surrogate-key.json
  • tests/fixtures/cloud-brain/invalid/not-json-lone-surrogate.json
  • tests/fixtures/cloud-brain/invalid/not-json-overflow.json
  • tests/fixtures/cloud-brain/invalid/not-json-overlong-utf8.json
  • tests/fixtures/cloud-brain/invalid/not-json-truncated-utf8.json
  • tests/fixtures/cloud-brain/invalid/not-json-utf8-surrogate.json
  • tests/fixtures/cloud-brain/invalid/not-json.json
  • tests/fixtures/cloud-brain/invalid/protocol-2.json
  • tests/fixtures/cloud-brain/invalid/protocol-as-string.json
  • tests/fixtures/cloud-brain/invalid/protocol-before-schema.json
  • tests/fixtures/cloud-brain/invalid/recall-brain-schema-before-track.json
  • tests/fixtures/cloud-brain/invalid/recall-context-a-list.json
  • tests/fixtures/cloud-brain/invalid/recall-context-before-k.json
  • tests/fixtures/cloud-brain/invalid/recall-dynamics-before-context.json
  • tests/fixtures/cloud-brain/invalid/recall-dynamics-empty-string.json
  • tests/fixtures/cloud-brain/invalid/recall-dynamics-false.json
  • tests/fixtures/cloud-brain/invalid/recall-dynamics-not-unit.json
  • tests/fixtures/cloud-brain/invalid/recall-k-0.json
  • tests/fixtures/cloud-brain/invalid/recall-k-65.json
  • tests/fixtures/cloud-brain/invalid/recall-k-fraction.json
  • tests/fixtures/cloud-brain/invalid/recall-k-string.json
  • tests/fixtures/cloud-brain/invalid/recall-no-context.json
  • tests/fixtures/cloud-brain/invalid/recall-response-bad-entries.json
  • tests/fixtures/cloud-brain/invalid/recall-response-invalid-utf8.json
  • tests/fixtures/cloud-brain/invalid/recall-response-other-schema.json
  • tests/fixtures/cloud-brain/invalid/recall-response-too-large.json
  • tests/fixtures/cloud-brain/invalid/recall-response-too-many.json
  • tests/fixtures/cloud-brain/invalid/recall-track-before-context.json
  • tests/fixtures/cloud-brain/invalid/recall-track-before-dynamics.json
  • tests/fixtures/cloud-brain/invalid/recall-track-before-k.json
  • tests/fixtures/cloud-brain/invalid/recall-track-missing.json
  • tests/fixtures/cloud-brain/invalid/recall-track-not-unit.json
  • tests/fixtures/cloud-brain/invalid/recall-track-short.json
  • tests/fixtures/cloud-brain/invalid/stats-response-fraction.json
  • tests/fixtures/cloud-brain/invalid/stats-response-missing.json
  • tests/fixtures/cloud-brain/invalid/stats-response-negative.json
  • tests/fixtures/cloud-brain/invalid/stats-response-string.json
  • tests/fixtures/cloud-brain/invalid/stats-response-too-large.json
  • tests/fixtures/cloud-brain/invalid/stats-response-unsafe-integer.json
  • tests/fixtures/cloud-brain/invalid/token-before-counts.json
  • tests/fixtures/cloud-brain/invalid/token-before-list-shape.json
  • tests/fixtures/cloud-brain/invalid/token-missing.json
  • tests/fixtures/cloud-brain/invalid/token-too-long.json
  • tests/fixtures/cloud-brain/invalid/token-too-short.json
  • tests/fixtures/cloud-brain/invalid/token-uppercase.json
  • tests/fixtures/cloud-brain/invalid/too-many-brains.json
  • tests/fixtures/cloud-brain/invalid/too-many-feedback.json
  • tests/fixtures/cloud-brain/invalid/too-many-tracks.json
  • tests/fixtures/cloud-brain/invalid/track-not-a-string.json
  • tests/fixtures/cloud-brain/invalid/track-not-unit-inside-the-gap.json
  • tests/fixtures/cloud-brain/invalid/track-not-unit-low.json
  • tests/fixtures/cloud-brain/invalid/track-not-unit.json
  • tests/fixtures/cloud-brain/meta.json
  • tests/fixtures/cloud-brain/valid/contribute-at-the-limits.json
  • tests/fixtures/cloud-brain/valid/contribute-bytes-exactly-64kb.json
  • tests/fixtures/cloud-brain/valid/contribute-bytes-utf8.json
  • tests/fixtures/cloud-brain/valid/contribute-clone-and-edges.json
  • tests/fixtures/cloud-brain/valid/contribute-depth-32-objects.json
  • tests/fixtures/cloud-brain/valid/contribute-depth-32.json
  • tests/fixtures/cloud-brain/valid/contribute-duplicate-keys.json
  • tests/fixtures/cloud-brain/valid/contribute-evolved-brain.json
  • tests/fixtures/cloud-brain/valid/contribute-exactly-64kb.json
  • tests/fixtures/cloud-brain/valid/contribute-feedback-only.json
  • tests/fixtures/cloud-brain/valid/contribute-fitness-at-the-bounds.json
  • tests/fixtures/cloud-brain/valid/contribute-float-halfway-rounds-to-even.json
  • tests/fixtures/cloud-brain/valid/contribute-header-as-floats.json
  • tests/fixtures/cloud-brain/valid/contribute-integers-as-floats.json
  • tests/fixtures/cloud-brain/valid/contribute-negative-zero-meta.json
  • tests/fixtures/cloud-brain/valid/contribute-negative-zero.json
  • tests/fixtures/cloud-brain/valid/contribute-null-is-absent.json
  • tests/fixtures/cloud-brain/valid/contribute-response-at-the-bounds.json
  • tests/fixtures/cloud-brain/valid/contribute-response-large.json
  • tests/fixtures/cloud-brain/valid/contribute-response-lists-absent.json
  • tests/fixtures/cloud-brain/valid/contribute-response-negative-zero.json
  • tests/fixtures/cloud-brain/valid/contribute-response.json
  • tests/fixtures/cloud-brain/valid/contribute-unit-inside-the-gap.json
  • tests/fixtures/cloud-brain/valid/contribute-units-at-tolerance.json
  • tests/fixtures/cloud-brain/valid/error-response-disabled.json
  • tests/fixtures/cloud-brain/valid/error-response-large.json
  • tests/fixtures/cloud-brain/valid/error-response-too-large.json
  • tests/fixtures/cloud-brain/valid/error-response.json
  • tests/fixtures/cloud-brain/valid/forget-ignores-brain-schema.json
  • tests/fixtures/cloud-brain/valid/forget.json
  • tests/fixtures/cloud-brain/valid/recall-context-cleaned.json
  • tests/fixtures/cloud-brain/valid/recall-header-as-floats.json
  • tests/fixtures/cloud-brain/valid/recall-k-64-as-float.json
  • tests/fixtures/cloud-brain/valid/recall-k-float-roundtrip.json
  • tests/fixtures/cloud-brain/valid/recall-k-null.json
  • tests/fixtures/cloud-brain/valid/recall-negative-zero.json
  • tests/fixtures/cloud-brain/valid/recall-response-bounded-low.json
  • tests/fixtures/cloud-brain/valid/recall-response-bounded.json
  • tests/fixtures/cloud-brain/valid/recall-response-exactly-256kib.json
  • tests/fixtures/cloud-brain/valid/recall-response-full.json
  • tests/fixtures/cloud-brain/valid/recall-response-negative-zero.json
  • tests/fixtures/cloud-brain/valid/recall-response-no-pool.json
  • tests/fixtures/cloud-brain/valid/recall-response-strings.json
  • tests/fixtures/cloud-brain/valid/recall-track-near-unit.json
  • tests/fixtures/cloud-brain/valid/recall-with-dynamics-k1.json
  • tests/fixtures/cloud-brain/valid/recall.json
  • tests/fixtures/cloud-brain/valid/stats-response-large.json
  • tests/fixtures/cloud-brain/valid/stats-response-max-safe.json
  • tests/fixtures/cloud-brain/valid/stats-response-negative-zero.json
  • tests/fixtures/cloud-brain/valid/stats-response.json

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@shaal
shaal merged commit 678bdf4 into main Sep 30, 2026
10 checks passed
@shaal
shaal deleted the ship/cb1-wire-format branch September 30, 2026 13:45
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