Skrzynka examples

These examples cover the development-channel CLI outcomes documented by the root README. They use the installed skrzynka public interface, exact Skarbiec item references, isolated database paths, bounded reads, and explicit provider-facing

Overview#

These examples cover the development-channel CLI outcomes documented by the root README. They use the installed skrzynka public interface, exact Skarbiec item references, isolated database paths, bounded reads, and explicit provider-facing confirmation. The command paths were exercised with the source-built 0.2.0 binary in an isolated database and stand-in Skarbiec; captured results are in the CLI lifecycle and HTTP boundary. No real IMAP inbox or SMTP recipient was used.

Risk labels#

  • Local mutation: writes only the selected local SQLite database.
  • Credentialed read: resolves one named Skarbiec item and reads IMAP without changing provider message state.
  • Provider-facing mutation: submits a real SMTP message.
  • Destructive local mutation: removes local normalized mail, reply evidence, and outbound messages; never removes Skarbiec or provider state.

Coverage#

ActorOutcomeInterfaceRiskCanonical exampleEvidence status
New operatorAdd one mailbox from Skarbiec and receive mailCLILocal mutation, credentialed read`getting-started/add-and-sync-mailbox.sh`Add and unavailable-IMAP path captured; provider success requires a controlled mailbox
OperatorList/show mailboxes and messagesCLIRead-onlyGetting-started exampleEmpty list and mailbox show captured
OperatorSynchronize one or all enabled mailboxesCLICredentialed readGetting-started exampleSingle/all failure shapes captured; provider success requires a controlled mailbox
OperatorReply through the source mailboxCLIProvider-facing mutation`core/reply-to-message.sh`File and missing-message refusals captured; SMTP send requires a controlled recipient
OperatorOriginate mail from a connected mailbox and read the outbound row backCLIProvider-facing mutation`core/send-outbound-message.sh`Argument, confirmation, missing-binary and NOT_FOUND mailbox refusals captured against an isolated empty database; SMTP send requires a controlled recipient
OperatorDisable and remove local mailbox stateCLIDestructive local mutation`operations/remove-local-mailbox.sh`Disable, enable, confirmation refusal, and removal captured
OperatorDiagnose unavailable Skarbiec, IMAP, or SMTPCLI/APINo additional side effectRunbookSkarbiec/IMAP isolated failures captured; SMTP from source strings
Desktop clientHealth and protected resourcesLoopback APIMatches underlying operation`api/use-loopback-api.sh`Health and fail-closed auth captured; authenticated provider path requires a real session
OperatorProvider folder mutation, attachments, HTML, automated replies——Not supported; see product contractDeclared unavailable
OperatorBackup, upgrade, rollback, interrupted-send recoveryDocumented operationLocal state/recoveryRelease contractProcedure contract

Shared prerequisites#

  • Development source version 0.2.0 built as target/debug/skrzynka, or SKRZYNKA_BIN set to another exact build.
  • A supported skarbiec executable on PATH.
  • For provider examples, a non-production mailbox item and an inbox with at least one known message.
  • A new state path chosen specifically for the example. Scripts refuse to reuse or overwrite it.

No example accepts or prints a password. Credential rotation and revocation remain Skarbiec operations. Every provider example uses addresses already present in the selected mailbox/message and has no built-in real recipient.

Selection#

Start with getting-started/add-and-sync-mailbox.sh. Use the printed mailbox and message UUIDs as inputs to adjacent examples. Keep the state directory only when you intend to continue; otherwise use the cleanup command printed by the script.

core/reply-to-message.sh answers a message the mailbox received; core/send-outbound-message.sh originates one instead, taking the sending mailbox by id or by its own address and printing the stored outbound message it claimed. Both refuse to run without CONFIRM_SEND=yes.

The loopback API example exercises the same owned resources for a desktop or automation client. It never binds a public interface.

Return to the root README, onboarding, core behavior, or integration contracts.