Fruitful Docs
Concepts

Focus is not part of the pipeline

Why Focus ships in the package but never touches records, Views, or the capture runtime.

Three of the manifest's four blocks form a pipeline: capture feeds transform feeds render. Focus is the fourth block and is not on that path at all.

Where it runs

Focus runs in the browser extension, on the live site, in the person's own browsing session. It is applied while a feed the policy names is followed by an installed package. It never sees a capture, an extract, a record, or a View, and it cannot run package code.

Why it ships in the package anyway

The package is what knows the site. It already declares the URLs, the feed the person followed, and the markup that matters. A Focus policy reuses that knowledge to say what, on the same site, competes with the feed for attention. Keeping it in the package keeps one review, one version, and one place to look when the site changes.

Why it is data only

A policy is a list of cosmetic rules and at most one replacement. The extension's cosmetic engine applies the rules; the extension renders the panel or interstitial. Because nothing in the policy executes, it can be reviewed by reading it, changed without regenerating fixtures, and disabled by the person without affecting their feed.

What that means when authoring

  • Focus changes do not change validation output beyond the manifest checks (route ids exist, URLs present).
  • Test Focus in the extension against the live site, not in the preview; see Test focus in the extension.
  • A feed can exist without a policy, and a package can ship a policy for only some of its feeds.

Reference: focusPolicy.

On this page