Skip to content

Configuration

Every key in config/storyfeed.php. All have working defaults.

bash
php artisan vendor:publish --tag="storyfeed-config"

Tables & models

keydefault
tables.*feed_activities, feed_snapshots, feed_groupings, feed_parties, feed_batches, feed_metaremap on collision, or point at pre-existing feed tables
models.*the package modelsswap in your own; they should extend the defaults

Identity

keydefault
morph_alias'storyfeed.party'alias stored for parties; resolved independently of your morph map
morph_map[]merged into the app's morph map at boot
actor_resolvernullinvokable class resolving the default actor; null = authenticated user
parties.fallbacknullparty name for otherwise-anonymous publishes (jobs, commands)

Verbs

keydefault
verbs.strictnullthrow on a verb with no registry entry. null = strict in local/testing only

Grouping

keydefault
grouping.strategyMultiAxisStrategy::classuse NullStrategy to disable grouping entirely
grouping.default'summary'app-wide read mode: 'log', 'live', 'summary'
grouping.curatetrueselect a winning axis at publish time
grouping.children_limit25member nodes nested per group; count stays the true total
grouping.policy.min_actors3distinct actors before the actors axis applies
grouping.policy.min_targets2distinct targets before targets applies
grouping.policy.min_target_members3members required on targets
grouping.policy.min_object_members2members required on object

TIP

Curation policy is not payload contract — change these freely. Only the group node's shape is frozen.

Batches & composites

keydefault
grouping.batch.enabledtrueinfer bursts by one actor
grouping.batch.quiet_minutes10idle time before a burst is considered finished
grouping.composite.autotruebundle Collectable runs at batch close
grouping.composite.min_objects2smallest distinct object count that mints a composite

AS2.0 routes

keydefault
routes.enabledfalseopt-in, read-only endpoints
routes.prefix'storyfeed'also mints activity IRIs — changing it changes document ids
routes.middleware[]add auth/throttling here

Maintenance

keydefault
prune.after_daysnullretention window; null keeps everything
trickle.limit200activities snapshotted per storyfeed:trickle run

Diagnostics

keydefault
doctor.stale_after30days without new activity before doctor flags a forgotten feed; null disables
grammar.strictnullthrow when publishing a pair with no headline. null = local/testing only
discovery.pathsnullwhere storyfeed:stories and doctor scan for feed surface; null = app_path(). Dev-time only

Released under the MIT License. Everything MIT today stays MIT.