Silicon DM Docs
DM / Manual verification record
DM 0.6 adds groups. Release status

Manual verification record

These are individual command checks performed during implementation on 2026-09-06. No automated scenario test or test harness was added. The build was validated with cargo check -p silicon-dm-client, cargo check -p silicon-dm-cli and cargo build -p silicon-dm-cli.

Offline checks

An explicitly isolated SILICON_DM_HOME directory was used; normal user profiles were not changed. Automatic updates were disabled before offline commands.

Individual check Observed result
dm --help Lists every family and global profile/test/idempotency/JSON/wait flags
dm messages send --help Examples for text, attachment-only, metadata, replies and JSON media
dm messages edit --help Requires observed version and explains full replacement/conflicts
dm drafts put --help Explains version-zero creation and conflict-body recovery
dm relay submit --help Shows typed JSON, queue-ACK semantics and result lookup
dm updates disable, then updates status Opt-out persisted; no registry check; hourly interval and development-build status shown
dm profiles list Empty profiles and default name returned without secrets
dm docs Guide locations and callback acknowledgement shape returned
dm environments clean without --test Rejected before network with required command syntax
File permissions State directory 0700; config, lock, SQLite and daemon log 0600
dm daemon start, separate daemon status, daemon stop, daemon status Detached daemon survived the launching command, same PID reported, clean stop then running:false

Two problems found during manual checks were fixed: stopped status originally returned a raw connection error, and the initial spawned daemon inherited the shell session. Status now provides a useful stopped state; Unix daemon launch uses setsid with redirected standard streams. A deliberately selected occupied port failed to bind; a free isolated port succeeded without disturbing its owner.

Live checks

An existing real IAM test login was used with a locally running DM backend and separate live CLI state directory. Credentials remained in private runtime files and are not included here.

Individual check Observed result
profiles list Correct Carbon actor, organization, test UUID and local callback mapping; no tokens
daemon start, separate daemon status Profile connected on persistent WebSocket after parent command exit
whoami through selected test profile Durable exact-request acknowledgement followed by real IAM identity, org role and capabilities
conversations list --limit 1 Successful empty-page result with next_cursor:null in a new sandbox
presence get, presence set typing, presence get, presence set clear Online state, durable request ACK, server-observed typing state, then clear accepted
gifs recent Empty list returned successfully for the new Carbon profile
Restart with two already pending requests Both original request IDs recovered and completed after restarting the daemon

Live concurrency exposed a bundled SQLite Unix WAL mutex deadlock while separate connections were opened/closed concurrently. A sampled daemon stack identified the blocked SQLite routines. Queue access now uses one process-local connection guarded for short transactions, with no guard held across an async wait. The restarted daemon recovered both pending requests from its existing database. Refresh-file lock acquisition was also made asynchronous to avoid blocking a runtime worker while another task refreshes the same profile. Clippy with -D warnings passes for both new crates.

Complete leaf-command coverage

Every leaf command in the current Clap command tree was invoked individually. env is the visible alias for environments. A separate CLI-created sandbox was used for environment lifecycle commands; the primary messaging sandbox was not cleaned, deleted or rotated. Login/refresh/logout used a fresh independent Silicon token family, leaving the active Carbon sessions intact.

Command Actual result
login Fresh real IAM SLT exchanged through DM; actor/org saved privately; local callback mapped and daemon started
refresh New access/refresh tokens saved atomically; same Silicon identity
logout New family revoked; profile disabled and pending work retained
whoami Real IAM Carbon identity, owner role and capabilities returned through relay
profiles list Carbon, Silicon, production and test mappings listed without tokens; logged-out profile shown disabled
profiles use alice Default profile persisted as Alice
profiles webhook URL Selected actor's callback mapping updated locally
conversations create Alice/Silicon participant conversation created
conversations list Empty new-sandbox page and existing conversation page returned
messages send Text, arbitrary nested metadata, reply reference, attachment-only and combined voice/transcript/GIF/attachment content preserved
messages list Limit-one cursor advanced from sequence 5 to 4; bundle views collapsed and expanded correctly
messages show Correct message content, Delivered then Read status, and revision returned
messages edit Same message ID advanced from version 1 to 2; stale version rejected with structured 409 and exit 1
messages delete Versioned tombstone returned with deleted_at and cleared content
receipts delivered Explicit receipt accepted; an already-Read message stayed Read
receipts read Explicit recipient action advanced Delivered to Read; callback alone had not marked Read
drafts put Version-zero creation, version-one replacement; stale save returned 409 including current draft
drafts get Stored draft/metadata returned; matching message send cleared it and subsequent fetch returned 404
drafts delete Explicit deletion returned deleted=true
bundles create Silicon summarized two Carbon messages with summary metadata
bundles show Display message and both unchanged originals returned
presence get Actual online and transient typing state returned
presence set Typing and clear accepted through active WebSocket
gifs trending Structured 503 dependency_unavailable; Giphy service was unavailable in this local setup
gifs search Same explicit dependency error; the following receipt command completed normally
gifs recent After 21 distinct individually entered Carbon GIF sends, exactly the latest 20 returned newest-first; Silicon returned an empty list
env create Independent sandbox created; returned root key saved privately and omitted from normal output
env list --include-deleted Organization environments listed without secrets
env show Selected environment metadata returned
env update Name and description updated through JSON stdin
env key Key retrieved and stored without printing it
env rotate-key New key saved privately
env clean Selected independent sandbox cleaned using its local key
env delete Soft deletion succeeded; response stated 30-day recovery
env restore Environment restored with saved replacement key and increased generation
env import-key Private key file imported into separate local state directory
daemon start Detached process survived the launching command; persisted profiles reconnected
daemon run Foreground listener started on isolated port and remained active until stop
daemon status Running PID/profile states/queue counts returned without secrets; stopped state useful
daemon stop Both foreground and detached daemon stopped through the local API
relay submit Entire JSON including caller_context echoed after durable commit; identical request replay accepted; changed content with same request_id rejected 409
relay result Original caller_context and completed result returned under the same request ID
relay credentials Correct dm.localhost and numeric loopback URLs; private bearer present and redacted before inspection
updates enable Persisted enabled; subsequent ordinary command succeeded despite unavailable package
updates disable Persisted opt-out
updates status Hourly interval, version, last check and development-build replacement restriction shown
updates check Explicit crates.io 404 because silicon-dm-cli is not published
updates install Explicit crates.io 404 before installation; no installed executable was changed
docs Client/CLI/API/test documentation and callback ACK shape returned

The initial mixed-media GIF plus 20 later separately entered GIF sends exercised retention. Recent results contained manual-finish first, manual-wave last, and excluded the original manual-gif. The commands used distinct explicit idempotency keys; no generated command loop or scenario harness was used.

Reliability observations

  • Repeating a text send with the original idempotency key returned the same message ID and sequence, with no duplicate message.
  • Recipient callback acceptance automatically queued Delivered, while sender copies and explicit Read remained separate.
  • The relay stored a 100,000,496-byte event containing the 100-million-character message in SQLite. Its callback completed in one attempt; only lengths and IDs were inspected. The same inbox survived a subsequent daemon restart.
  • A queued recipient receipt had expected_generation=1 stored independently of its original request JSON and completed against the matching sandbox.
  • Parent-agent manual callback check: HTTP 200 with the wrong delivery ID kept the callback pending through five attempts and the message Sent. Restoring the correct ACK completed that retained event.
  • Parent-agent slow-callback check: Bob's callback was delayed 12 seconds. A separate Silicon callback reached Delivered about 630 ms after creation while Bob remained Sent. Callback endpoints were then restored to normal.
  • With the backend forcibly stopped, a new send returned a durable local ACK under request ID 7355dacd-34ad-48c0-892f-e047a8e3d128. The daemon was then killed with SIGKILL. Read-only SQLite inspection found the original pending request, idempotency key, and expected test generation intact. After restarting the API and daemon, that same request completed and reached Delivered. Direct database inspection found exactly one corresponding message, with ID 01a072fd-9cba-7761-9b4f-940b161f26a4. Session refresh and test-generation admission recovered without replacing or duplicating the queued request.
  • Final daemon inspection showed all four enabled profiles connected and zero pending requests. Three retained callback events belonged to the deliberately logged-out leaf-auth profile; they had not been discarded or delivered after logout. Six failed request records were the earlier deliberate invalid-command and dependency-failure checks.

Read dependency failures originally retried indefinitely and could hold later writes. Reads now finish with structured errors; retryable writes remain durable. Requests and callbacks now use separate bounded worker pools, one in-flight item per profile, so slow profiles do not delay unrelated profiles.

These initial checks preceded registry publication. Successful Giphy trending/search results could not be checked while the configured provider was unavailable. The later release checks below supersede the initial registry limitation; these earlier provider failures remain recorded as observed.

Installed offline documentation

The rebuilt dm executable was invoked manually from /tmp, with SILICON_DM_HOME=/dev/null so a credential or state-directory lookup would fail. No repository path or login was needed by the commands.

Command Actual result
dm docs --help Listed all guide topics, topic descriptions, search, full export, and Markdown extraction examples
dm --json docs Returned the topic index and existing guide/ACK fields as compact JSON
dm --json docs runtime Returned the full optional SDK runtime guide, including login, hosted relay lifecycle, and update policy
dm --json docs openapi Returned the complete YAML contract in the JSON content field
dm docs --search acknowledged Returned matching guides with one-based line numbers and excerpts
dm --json docs --all Returned all 15 complete guide documents; each content value matched its canonical source file
dm docs --search ' ' Exited 1 with a structured error explaining that search requires text
dm docs not-a-guide Exited 2 with the accepted topics and help hint

cargo build -p silicon-dm-cli --bin dm --locked and cargo clippy -p silicon-dm-cli --all-targets -- -D warnings passed. cargo package -p silicon-dm-cli --allow-dirty --locked --list included the documentation module, all 15 Markdown files, and the OpenAPI file inside the CLI crate. Every include_str! target resides within that package. The canonical-to-package synchronization command is python3 scripts/sync-cli-docs.py; run it after guide changes and before building a release. These were direct command inspections, not automated test scenarios.

Remaining presence values and explicit key output

A final command-tree audit found these option/value branches were implemented but not explicitly recorded. Each was then invoked manually against the live backend:

Individual command Observed result
presence set recording-voice, then presence get dm-alice Completed; backend returned recording_voice and online availability
presence set transcribing-voice, then presence get Completed; backend returned transcribing_voice
presence set uploading-file, then presence get Completed; backend returned uploading_file
presence set searching-gifs, then presence get Completed; backend returned searching_gifs
presence set clear, then presence get Completed; backend returned no activity
env key ID --show on the disposable sandbox Exit 0; captured secret output matched the private stored key, length 32
env rotate-key ID --show on that sandbox Exit 0; captured new key matched the saved replacement, differed from the old key, and contained 32 ASCII alphanumeric characters

Secret output was captured privately and compared without including either key in the transcript or documentation. The disposable sandbox was restored only for these checks and soft-deleted afterward. Primary messaging data and keys were unchanged.

Published registry packages

On 2026-09-05 UTC, silicon-dm-client and silicon-dm-cli version 0.2.0 were published to crates.io in that order. The backend remained unpublished. Both retained their existing LicenseRef-Proprietary metadata, which the registry accepted. Registry checksums matched the exact uploaded archives. The client archive was verified with both default and optional runtime features; CLI package verification downloaded the published client dependency.

The following commands were selected and invoked manually from /tmp, using separate Cargo installation and DM state directories. Existing actor profiles, tokens, daemons, and the user's normal Cargo binary directory were untouched.

Individual check Observed result
cargo install silicon-dm-cli --version 0.2.0 --locked --root PRIVATE_DIRECTORY Downloaded both released DM crates and installed an optimized dm executable
Registry-installed dm --version Reported dm 0.2.0
Registry-installed dm docs runtime, with unusable state-directory path Returned the complete embedded runtime guide without a checkout or credentials
dm updates status in fresh private state Enabled by default; hourly interval; Cargo-bin replacement supported
dm profiles list, then update status Empty profile result completed; automatic registry check recorded its timestamp afterward
Repeat profiles list within the hour Command succeeded; update timestamp stayed unchanged
dm updates check Current and latest CLI versions both 0.2.0
dm updates disable, ordinary command, then enable Opt-out and opt-in persisted; ordinary command remained usable
dm updates install Cargo downloaded and rebuilt the released package, replaced the isolated installed binary, and returned installed:true
Build a separate Rust consumer using only the crates.io SDK dependency Compiled the released SDK with the optional runtime feature
SDK check_update() Current and latest SDK versions both 0.2.0
SDK after-command update with default policy Checked crates.io successfully and reported no newer version
Repeat SDK after-command update within the hour; repeat after disabling Both skipped; the timestamp remained unchanged

The 0.2.0 CLI installation was then kept with automatic updates disabled, and the SDK consumer retained its 0.2.0 lockfile, for a later real upgrade check. No automated test scenario or cargo test was run.

Actual upgrade from 0.2.0 to 0.2.1

The documentation patch was published on 2026-09-05 UTC, client first and CLI second. Backend version 0.2.0 remained unchanged and unpublished. The archive changes contained release metadata, README updates, and refreshed operating and verification guides; runtime source files were unchanged. The bundled AWS guide describes the EC2 deployment option and its acceptance procedure, rather than recording a completed cloud deployment.

cargo check -p silicon-dm-client -p silicon-dm-cli --all-targets passed. cargo package verified the client with --features runtime and verified the CLI against the newly published client. The 14-file client archive and 26-file CLI archive were checked against 43 current private credential values, including the supplied registry and provider credentials; no values or private runtime paths appeared. Both kept LicenseRef-Proprietary. The exact uploaded SHA-256 checksums matched the crates.io sparse index:

Package SHA-256
silicon-dm-client 0.2.1 86b2484003ade63c5cf76e2c1701ee5e50f5a992c7ca092cec26c763a3f1af21
silicon-dm-cli 0.2.1 ce502d1067060e089056996df17b913fdc39bb57242e0096454c72d273476e8a

These checks used the preserved 0.2.0 fixtures from the previous section. Each command was invoked individually. Only the isolated updater timestamps were aged to make the hourly check due; no actor profiles or tokens were present in the CLI fixture.

Individual check Observed result
Old installed CLI --version, then updates check Current 0.2.0, latest 0.2.1
Enable CLI updates, age its private timestamp, then ordinary profiles list Profile JSON completed first; automatic updater ran Cargo and replaced the installed CLI from 0.2.0 to 0.2.1
New invocation --version, then updates status Reported 0.2.1; automatic updates enabled, Cargo-bin replacement supported
Repeat ordinary profiles list within the hour Succeeded without another installation
New CLI updates check Current and latest both 0.2.1
New CLI docs deployment from /tmp with SILICON_DM_HOME=/dev/null Full embedded deployment guide exactly matched the published snapshot; no checkout or credentials needed
Old compiled SDK consumer check_update() Current 0.2.0, latest 0.2.1
Old consumer after-command updater with its explicitly supplied manifest and due policy Ran cargo update from 0.2.0 to 0.2.1, then cargo build --release --locked; returned updated:true and restart_required:true
Inspect consumer lockfile Registry dependency now 0.2.1 with the published checksum
Start the rebuilt release consumer, then check_update() Current and latest both 0.2.1
Rebuilt consumer after-command updater within the hour Skipped with disabled_or_not_due; persisted policy timestamp unchanged

The original 0.2.0 CLI binary and SDK lockfile backup remain available privately. The isolated installed CLI was left on 0.2.1 with updates disabled after the checks. No automated scenario suite or cargo test was run. This record was appended after publication, so it is not part of the immutable 0.2.1 archive.

Relay memory changes prepared for 0.2.2

The following checks were chosen and performed manually on 2026-09-06 in an isolated local state directory. Its single profile used deliberately invalid credentials and an unavailable loopback backend, so requests stayed queued without changing any IAM session or remote data. The new source was checked with cargo check -p silicon-dm-client -p silicon-dm-cli --all-targets, strict Clippy with -D warnings, and a CLI build. All passed; no automated scenario suite or cargo test ran.

Individual check Observed result
Submit a conversation mutation and wait one second with the updated CLI and daemon Returned the original ACK and full pending result at the deadline; the daemon retained and retried the offline write
Read the new authenticated /requests/{id}/status route HTTP 200 with a 71-byte JSON body containing only request_id and state
Read that route without the local relay bearer HTTP 401
Retrieve the same request through dm relay result Preserved the original request, pending state, transport error, and null result
Replace only the isolated daemon with the preserved registry-installed 0.2.0 binary The status route returned HTTP 404; the updated CLI fell back to the existing full-result route and still returned the queued ACK and result after its one-second wait
Restart the updated daemon and submit 1,048,849 bytes of JSON, including an unknown caller_context field with a 1 MiB string HTTP 202; the 1,048,933-byte ACK preserved the complete original JSON, including unknown fields
Issue two concurrent status reads for that large queued request Both returned HTTP 200 and exactly 71 bytes
Fetch the full result for that large request HTTP 200 with 1,048,958 bytes; the original JSON matched exactly, with pending state and null result/error

The private daemon was stopped after these checks. Existing production and manual messaging daemons were left untouched. These observations demonstrate constant-size progress polling and compatibility with an older daemon; they do not establish a total process memory bound. The shared 128 MiB work budget limits admitted encoded queue payloads, while one larger payload can proceed alone. Socket frames, HTTP responses, parsing, and the exact full ACK/result still require additional memory.

Waiting for the testing generation

The 0.2.2 prerequisite retry correction was also checked manually in a separate native macOS fixture. A deliberately unavailable loopback backend kept its testing profile from receiving a realtime ready frame. After submitting one conversation mutation, two SQLite metadata observations eight seconds apart showed pending, awaiting_testing_generation, and zero attempts. The due time continued advancing in one-second increments rather than accumulating failure backoff.

The private daemon was then stopped, that fixture's attempt count was seeded to seven to represent earlier backend failures, and the daemon was restarted. The request remained pending with exactly seven attempts and a due time within one second. This confirmed that waiting for the prerequisite neither erases earlier failures nor adds new ones. The existing HTTP retry path was unchanged. The fixture daemon was stopped afterward; no real credentials, production state, or active messaging daemons were used for this check. The updated CLI build and strict Clippy checks passed without running automated tests.

Published 0.2.2 and actual upgrades

Both crates were published on 2026-09-05 UTC, SDK first and CLI second. The backend remains version 0.2.0 and unpublished. The SDK README and CLI's embedded guides include the 0.2.2 runtime corrections and the final cloud verification available before publication. Both packages retain LicenseRef-Proprietary.

The SDK package built with the optional runtime enabled; a separate check of the extracted package with no default features also passed. Its default feature list is empty. CLI package verification used the newly published registry SDK. All packaged source and guide files matched their release snapshots. The 14-file SDK archive and 26-file CLI archive were scanned against 132 private credential values with no matches or private local-path markers. Four public CloudFormation attribute names initially collected from Key/Value records were identified as non-credentials and excluded from that count. The uploaded checksums matched crates.io's sparse index, and both versions were non-yanked:

Package SHA-256
silicon-dm-client 0.2.2 b206f7e5f65f019c6798f3ec42c46c386a530c91370de8aadb4e0bbb55fdd051
silicon-dm-cli 0.2.2 4418e6dc664565091d0b2e5a4358efa71f98838f18a941a9b3d12a824718aac1

The following commands were invoked manually using the preserved 0.2.1 fixtures. Their policy timestamps alone were reset to make hourly checks due. The CLI fixture had no actor profiles or credentials.

Individual check Observed result
Installed 0.2.1 CLI updates check Current 0.2.1, latest 0.2.2
Enable its updater, make its private timestamp due, then run ordinary profiles list Empty profile JSON completed first; automatic Cargo installation replaced the isolated binary with 0.2.2; optimized build completed in 9.84 seconds
New CLI --version and updates status Reported 0.2.2 and supported Cargo-bin replacement
Repeat profiles list within the hour Succeeded without reinstalling; the update timestamp was unchanged
New CLI updates check, then updates disable Current/latest both 0.2.2; opt-out persisted in the isolated fixture
Preserved SDK 0.2.1 consumer check_update() Current 0.2.1, latest 0.2.2
Its after-command updater with the explicit private consumer manifest Updated the registry dependency and rebuilt the release consumer in 28.28 seconds; returned updated:true and restart_required:true
Inspect the consumer lockfile and invoke rebuilt consumer check_update() Lockfile contained SDK 0.2.2 and its published checksum; rebuilt process reported current/latest 0.2.2
Rebuilt consumer after-command updater within the hour Returned disabled_or_not_due; policy timestamp remained unchanged
cargo install silicon-dm-cli --version 0.2.2 --locked --root "$HOME/.cargo", reusing the verified private Cargo cache and build directory Installed the published executable into the user's actual Cargo bin directory; cached build completed in 0.58 seconds
Actual host installation --version and --help, with SILICON_DM_HOME=/dev/null Reported dm 0.2.2 and the complete command help without opening the user's state
Actual host installation docs --all from /tmp, with the same unusable state path Returned 15 embedded documents, including OpenAPI, in a 262,534-byte JSON response; every document matched the release snapshot

The frozen 0.2.1 executables and SDK lockfile remain available privately. No existing profiles, IAM sessions, or messaging daemons were modified by these upgrade and installation checks. No automated scenario suite or cargo test ran. This section was appended after publication and is therefore absent from the immutable 0.2.2 CLI archive.

Team of Silicons · Edit this page

Usage guides first. Protocol details when you need them.