v0.1 architecture: seams and surfaces #1
thorwhalen
started this conversation in
General
Replies: 1 comment
|
Changes to the record above, after the independent review of v0.1 (PR #22):
The seams themselves and the NOT-seams line are unchanged; the proxy count and per-site secrets are configuration values. |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
correspond is a thin channel facade for agents: one data model (conversation references, channel identities, authenticity grades, messages, events, graded capabilities) and one set of verbs (read, listen, send, edit, react, upload, verify) over per-channel adapters. It knows no people: identity stops at what the platform attests, and linking a handle to a person is acquaint's job. liaise will consume it for its channel bindings and outbound messages.
Seam table (decided before the first commit)
registry=on the facade functionsxdol.Registry, built lazily from the built-in channel table; an entry registers only when its optional modules importcorrespond.testing.FakeChannel(tests, and liaise's offline suite); Discord overdiscorddolrun=(gh, macOS notifiers),http=(ntfy, Telegram),imap=/smtp=(email)subprocess.run,urllib.request,imaplib/smtplibgithubkitwith a GitHub App,imap-tools,aiogramas extrascursors=(listen),store=/blobs=(web inbox, Telegram log)dolfiles under~/.local/share/correspond/<kind>/(CORRESPOND_DATA_DIRoverrides the root)dict(tests);s3dolfor a server's web inboxclassifier=onrouteOne-command test (the definition of v0.1, fully offline)
correspond.testingruns the ordinary CLI with an in-memory fake channel registered. No plugin loader.Decisions worth keeping
forged,claimed,platform,domain,bound,crypto. A policy that acceptsplatform,boundandcryptofor one permission but notdomaincannot be expressed as a threshold, so comparing grades with<raises.--dry-runcontacts nothing and changes nothing. It validates the reference and the draft against the channel's capabilities and limits and shows the plan, with secrets (an ntfy topic) masked.SendResultfor everything a retry or a corrected draft could change (error_kind,retryable,retry_after). Unknown channels, malformed references and unsupported operations raise, andNotSupportednames the operation.delivery_idis the dedupe key.telegram:):getUpdatesconfirms updates for every chat at once, so narrowing to one chat is routing's job, and every update is logged locally because the Bot API has no history.claimed; a valid host-application signature isbound; an invalid or expired signature is refused, not stored.config2py, for startup cost; the data root and config file are resolved with the stdlib (XDG on POSIX,%LOCALAPPDATA%/%APPDATA%on Windows).Provisional
githubkitwith a GitHub App,imap-tools,aiogram) are extras the design names; none is built in v0.1.All reactions