diff --git a/plans/artdag-on-sx.md b/plans/artdag-on-sx.md index 11f10ba4..2a4300f1 100644 --- a/plans/artdag-on-sx.md +++ b/plans/artdag-on-sx.md @@ -104,6 +104,24 @@ lib/artdag/optimize.sx lib/artdag/federation.sx CSE (free from content-addressing) result import/export + provenance/trust ``` +## Forward direction — artdag jobs as a feed "post" (per the host loop) + +artdag jobs will become a **type of post**: a job rides as the `:object` of a feed +activity (`{:actor :verb :object :at :tags}`, `:verb` "post"), served through the host +loop's `GET/POST /feed`. The engine already has the primitives; the wrapping lives on the +**host/feed** side, NOT in `lib/artdag`: +- **content-id = the post/object id** (stable structural digest = natural AP object id). +- **wire format = the post payload** — `dag->wire`/`dag->string` are self-describing + + content-addressed and survive `write-to-string`/`read`; `wire-verify` re-checks ids on + receipt (self-verifying embeddable object). +- **federation already mirrors the feed** — `fed-export`/`fed-import` are trust-gated with + provenance; a re-posted job dedupes/cache-hits by global content-id. + +Boundary: host loop owns the `dag ⇄ feed-object` adapter; `lib/artdag` stays the engine. +Candidate artdag-side affordance (only if wanted here): a thin `job->post-object` / +`post-object->job` projection so host never reaches into wire internals. Not yet built — +flagged, not scheduled. + ## Phase 1 — DAG model + content addressing - [x] `lib/artdag/dag.sx` — node `{:op :inputs :params}`; structural content-id =