Skip to content

docs(kb): ad dissemination — design-under-discussion on where the curation lives (3.25.1) - #706

Merged
jacoby149 merged 9 commits into
devfrom
docs/ads-dissemination-discussion
Aug 28, 2026
Merged

docs(kb): ad dissemination — design-under-discussion on where the curation lives (3.25.1)#706
jacoby149 merged 9 commits into
devfrom
docs/ads-dissemination-discussion

Conversation

@jacoby149

Copy link
Copy Markdown
Owner

What

A design-under-discussion KB doc on where the ad curation lives — in response to the operator's reframe after the curateAds client-side helper (3.26.0, open PR #704).

"i think this is off, it should be part of the read function, because the ads are being curated on the data, like if you are reading posts an add from each person coming with the posts, so this is definitely should be more clickhousey"

"the ads are coming from each person making the posts, an add from their ad catalog is put on their posts that have that ad preference opted into, so this implementation is made available for the dev of web10 social to incorporate ads in or any dev for that matter"

The doc (ads-dissemination.md)

  • The reframe — the ad is a property of the post read (opted-in posts come back with their curated ad), not a client-side computation → a platform capability any app gets for free.
  • The strong argument for it — the read already does read-time projections (media-URL resolution, HLS manifest minting, power-mean ranking). Attaching a curated ad is the same category, not a scanner-doctrine break.
  • The wall — a stateless ClickHouse query can't hold per-viewer/per-session state. So pinned + a deterministic round_robin are data-layer-able; true round_robin / frequency_capped / greedy are not.
  • The options — A (client-side, current), B (data-layer, the reframe), C (hybrid).
  • My honest take — the reframe is right in spirit; the clean resolution is a deterministic function of the data (redefining round_robin as a deterministic rotation), stateful modes → v4.
  • Open questions — the state fork, the opt-in location, the round-robin semantics, the read's shape, the fate of curateAds.

Not a decision — the KB-side starting point for the discussion. ads.md's Dissemination section gets a pointer to it. Docs-only.

…ation lives (3.25.1)

Operator reframe: the ad should be a property of the post read (opted-in
posts come back with their curated ad, curated from the author's catalog per
the author's preference), not a client-side computation — 'more clickhousey',
a platform capability any app gets for free.

The doc (ads-dissemination.md) lays out the reframe, the strong argument for
it (the read already does read-time projections — media URLs, HLS manifest
minting, power-mean ranking), the stateful-curation wall (a stateless query
can't hold per-viewer/per-session state), the three options (client-side /
data-layer / hybrid), and the open questions. Not a decision — the KB-side
starting point for the discussion. ads.md Dissemination section points to it.
…+ catalogs + love-based curation (3.25.1)

The design converged: every document has an ad_preference (which catalog to
curate from + a mode + a target for pinned); a user has multiple ad catalogs
(the Spotify-playlist model — an ad in several); on read, ClickHouse curates
the ad from the chosen catalog per the mode and serves doc + ad together.

The 'love' idea dissolves the statefulness wall: least-loved (round_robin) /
most-loved (greedy) is a property of the data, not the viewer — a
deterministic function of current engagement, the same ref-count machinery
power-mean ranking already reads in SQL. No per-viewer state, no
write-on-read.

Added the mermaid diagram, the ClickHouse feasibility read (window-function +
join, the house pattern), the value prop, and 11 serious open questions.
curateAds (3.26.0) is largely superseded.
…sity, authenticator Ads tab, greedy reframed (3.25.2)

Converged further:
- The mode is a signal × strategy pair (expandable: reaction round robin,
  comment round robin, you name it) + a scope enum (global / per_viewer).
- A node-level ad density setting — the % of posts that get an ad at all, the
  operator's fatigue throttle (deterministic pseudo-random roll in the query).
- The authenticator gets a new Ads tab (ads upload + catalog making), which
  makes catalogs first-class (leaning a catalog doc).
- Greedy reframed as 'show my proven best' (complementary to round_robin's
  'give everything a fair shot'); the cold-start is the distinction, not a bug.
@jacoby149
jacoby149 merged commit 0ad12dd into dev Aug 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant