ASSEMBLE · VERIFY · INSPECT
Artifact capacity: count stored content bytes
Follow exact content through assembly, a conditional write and a scoped version read.
Your experiment
Increase the per-version byte limit until the content fits. Try a euro symbol: it occupies three UTF-8 bytes, not one. Change version retention and inspect the stored versions. This is content accounting, not a cloud cost estimate.
Play inspects the whole trace over 60 seconds at 1×. Pause, step, restart or change speed. Parameters reset the trace without autoplay. Teaching time is not network, storage or SDK latency.
Exact visible content
Decision trace
Complete state inspector
Artifact event fields illustrate the pinned A2A v0.3 shape, not full protocol conformance. Storage is a separate application policy: a final marker is required before commit; expected generation protects the current live version; generation 0 cannot replace this already-existing object. File input is encoded text, not an upload. The byte limit counts decoded or serialized content, not base64/wire overhead. Data uses JSON parsing/serialization and does not preserve whitespace or duplicate keys. Version retention and read grants are explicit fixture policies, not full ADK/GCS semantics. No IAM, encryption, malware scanning, checksums, lifecycle rules or remote durability is implemented. All records, objects and identities are fictional. No credentials, files, cloud services or external model are accessed. Pinned A2A v0.3 reference · Cloud Storage preconditions · Official AICassindra articles.
Count content before choosing a quota
This experiment assembles actual fictional content, attempts a conditional object write and reads a version. The opening text, A short artifact for review., contains 28 UTF-8 bytes. The starting per-version limit is 24, so the client write is rejected and the reader still receives baseline at generation one. Set the limit to 28: generation two stores the whole text. Retained content becomes 36 bytes, including the eight-byte baseline. This is decoded content accounting for one object, not a storage bill or an ADK service benchmark.
Control the content representation
Part kind selects text, a JSON object or an inline file. Fixture content supplies the actual value; Load valid example restores valid text or a JSON object for the chosen kind. Maximum text chunks divides Unicode code points into at most four parts, so it never cuts a surrogate pair in half. It does not split UTF-8 byte sequences. Append later text parts keeps earlier parts; turning it off replaces them at every update. Data and file inputs are single parts, and the two text-only controls are disabled. JSON is parsed and serialized: whitespace and duplicate keys are not preserved. The file part contains base64-encoded text, not an uploaded file.
Find the exact byte boundary
Enter one euro symbol, €, with Text selected. A limit of two rejects the write; a limit of three accepts it. The inline file representation of that same symbol is 4oKs, four base64 characters, but the decoded content limit still counts three bytes. For JSON object input, enter {"n":1} with spaces around it: serialization removes those spaces and the stored body occupies seven bytes. An array, null or malformed JSON produces invalid-part without writing. Next enter ABCDEF as Text, choose three chunks and limit six. Append preserves AB, CD and EF; disabling append stores only EF. Disable Send final artifact marker to refuse a commit even when the content fits.
Separate quota from concurrency
Require matching live generation compares Expected live generation with the current object. With the original text and limit 28, enable Another writer commits first: generation two contains concurrent and expected generation one is stale. Expected two permits generation three. Enable Retry the same write intent: the first write succeeds, but the unchanged expected two fails against generation three. Turn off the generation condition and both attempts write distinct versions. With history enabled this retains 74 content bytes: baseline eight, concurrent ten and two copies of the 28-byte payload. Disable Retain earlier versions and only the final 28-byte generation remains. A per-version limit does not cap accumulated historical content.
Check the read boundary
Actor tenant Alpha owns this object. Beta cannot write, even if Grant Beta read access only is enabled. Without that grant Beta receives no content; with it Beta can read an existing version. Reader version Latest follows the live generation, while Generation 1 stays pinned to baseline if history retains it. Remove history after a successful write and the pinned version disappears. Expected generation zero cannot replace this already-existing object. These policies illustrate application-level behavior and do not implement full IAM, remote durability, checksums, lifecycle policies or the ADK artifact API.
Inspect, compare and record
Play reveals the operations over sixty inspection seconds, not simulated network latency. Pause freezes the position; Next operation pauses at the next operation; Restart returns to the beginning while keeping inputs and speed. Inspection scrubs the trace. Speed changes the elapsed inspection rate to quarter, half, normal or double speed. Editing a parameter resets without autoplay; hiding the tab pauses. The wide diagram has readable labels and can be scrolled horizontally with the keyboard on phones. Exact content, the decision trace and Complete state inspector provide text alternatives. Capture baseline saves a comparison, Replace baseline updates it, and Clear baseline removes it. The notebook stores observations locally; Export notes downloads them. Expand experiment and Exit full screen change the view. All values stay in this fictional local fixture; no object is uploaded.