Skip to content

Document the execserver slot broker (6.35) - #9

Open
martinrode wants to merge 86 commits into
mainfrom
v6.35
Open

Document the execserver slot broker (6.35)#9
martinrode wants to merge 86 commits into
mainfrom
v6.35

Conversation

@martinrode

Copy link
Copy Markdown
Contributor

Updates the execserver documentation for the fylr 6.35 slot broker. Held on the v6.35 branch — do not merge until 6.35.0 is released, since docs.fylr.io tracks main and these pages still correctly describe the released 6.34 behaviour.

Pages

  • for-developers/execserver.md — replaces the removed GET /token + PUT /job polling model with the broker protocol (new mermaid), pipe endpoints, and the auto-balance note.
  • for-system-administrators/configuration/performance-tuning.md — auto-balance keys (cpus, fastReserve, heavyThreshold, unknownShare, drainTimeoutSec); explicit waitgroups is now the opt-out.
  • concepts/white-papers/execserver-slot-broker.md — brought in line with what shipped: legacy transport removed in 6.35 (not a later release), no polling fallback (upgrade together), + auto-balance and graceful-drain sections.

Config mirror pages (fylr.default.yml.md / fylr.example.yml.md) still show the old keys — a follow-up.

martinrode and others added 30 commits July 16, 2026 11:46
Rewrite the execserver + performance-tuning pages for the fylr 6.35 slot
broker, replacing the removed GET /token + PUT /job polling model and the
parallel/parallelHigh/waitgroups defaults with the broker protocol and
auto-balancing. Bring the slot-broker white paper in line with what
shipped: the legacy transport is removed in 6.35 (not a later release),
there is no polling fallback (execserver and fylr upgrade together), and
add the auto-balance and graceful-drain sections.

Held on the v6.35 branch until 6.35.0 is released, since docs.fylr.io
tracks main and these pages still describe the released 6.34 behaviour.
… license capabilities

Regenerated from a pristine fylr on main (34c58b676): GET /plugin/marketplace + /plugin/marketplace/{name}/readme, the plugin-manage license capability/not_licensed/encrypted fields, and default-cookbook recipe description updates. 3.0 from /inspect/apidocs/spec/spec-gitbook.yml, 3.1 datamodel-generic from spec.json (Go-style HTML escaping preserved).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…rface for db_pre_save callbacks (#80077)"

This reverts commit 98568cc.
…mark api_tx_url

Plugin Manager: the plus button now opens the marketplace (categories, README view, dependency resolution, sealed delivery); new license-gated plugins section. License management: the license's plugin capability map (named+granted / named+refused / unnamed). callbacks.md: mark api_tx_url as available from 6.35.0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…6.35.0)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…c into the new layout

The api_tx_url documentation (#80077, reapplied on this branch against the old monolithic callbacks.md) moves into the new pages: the info-map row and the 'Writing inside the save transaction' section live in callbacks/contract.md, with a pointer from callbacks/db-pre-save.md.

While porting, the hook family was corrected against the fylr code: api_tx_url is present for db_pre_save, transition_db_pre_save and the collection-upload objects callback (any callback whose tokens are minted inside the open write TX, oauth/plugin_user.go leasePluginTX), and absent for extensions, exports and workflow webhooks — webhooks never go through PluginLoginUser, so the earlier 'webhook_db_pre_save' mention was wrong.

see #80334

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… claim

The doc stated writes join the save's transaction via a savepoint; per Martin there is no savepoint. The author-facing contract is unchanged and stated implementation-free: writes run inside the save's own transaction, are immediately visible to it, and commit or roll back with it.

see #80334

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…estriction

A failed write on the transactional surface fails the save as a whole — refused at commit, nothing durable, further writes refused — even if the callback swallows the error; failed reads are harmless. await_index is not available there (index jobs only become visible once the save commits). Matches the landed fylr 6.35.0 behavior (fylr 2011b1984, sqlpro 78698e7) and the write_db_tx fail_swallowed apitest.

see #80077

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Spherical videos and panoramic images carry a projection_type key in their technical metadata from 6.35.0. Adds the key to both OpenAPI spec assets (surgical edit, no full resync) and a paragraph to the metadata-extraction section explaining the sources and why only the original carries the marker.

Same change as ced2898 on main, applied to the 6.35 docs branch.

see #80367

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
POST /eas/produce accepts video parents from 6.35.0: trim, mute, rotate in steps of 90 degrees, mirror, crop, scale to a height and the color grading controls, with mp4/mov/m4v as target formats. Adds the new request fields to both OpenAPI spec assets (surgical edit of the /eas/produce path, no full resync) and a section to the endpoint page that splits the options by parent class and states the async pending/done/failed contract; the file-worker page's modified-original bullet mentions the video options.

Also from 6.35.0, the produce recipe's extension list is the only gate on what can be produced, which makes webp sources producible.

see #79791

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…te on loginAllowRedirects)

From 6.35.0, origins matching loginAllowRedirects are also trusted for credentialed CORS (reflected in Access-Control-Allow-Origin together with Access-Control-Allow-Credentials), like the fylr.externalURL origin and the redirect-URI origins of registered OAuth2 clients. Mirrors the fylr.example.yml comment added on fylr main (75146265d).

see #79575

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…(6.35 execserver config)

Syncs the inlined config pages to the fylr 6.35 sources for the execserver slot-broker/auto-balance rework: the tuning keys cpus, fastReserve, heavyThreshold, unknownShare and drainTimeoutSec replace parallel/parallelHigh, the per-service waitgroup defaults (fast/medium/slow) are gone, tokenResponseSendServerIP is removed and the optional callbackBackendOwnURL is added. Mirrors fylr dc23ded29 (#80119) and the parallel deprecation (#80133).

see #80119

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Mirrors the apidocs change on fylr main (1baae56a2): GET /api/v1/user/session stops echoing the caller's token.

see #79573

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ed fylr.example.yml

The top-level fylr.s3 storage config has not existed in the code since 2022; storage is configured per location under fylr.db.init.locations. Mirrors the fylr.example.yml cleanup on fylr main (d19999afb).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The download dialog's file name section, "include file variants" option and
custom rendition section are gated per user/group by the new frontend_features
"Download Options" right from 6.35.0. Version-marked so readers on older
versions know it isn't theirs yet.

see #80363
…(6.35.0)

The audio convert recipe's format (m4a, mp3, aac) and bitrate params are documented in the recipe-configuration table, the default-version table names the M4A container and corrects the audio preview description (cover art, not waveform).

see #80318

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…eenshots, settings + API reference

New chapter for the fylr supervisor (#76257): overview/architecture, installation (systemd, bootstrap config, first-boot env seeding), instances (create/copy with consent, hibernation, logs incl. client-IP column), storage locations (explicit disk location, S3, read-only attach), backups & copies, router/TLS/rate limits/abuse shield, binaries registry + managed branch instances with provisioning presets, central licenses, infrastructure pages, a full settings reference and the management-API endpoint reference. Screenshots come from a generic demo fleet, not from any real deployment.

see #76257

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…mermaid architecture diagram

see #76257

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
see #79583

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…y explanation, clearer settings reference

The Introduction gains a quick start that secures the management API right after the first boot. Installation explains what `fylr+:` merges into (the embedded default configuration — a plain `fylr:` would replace the whole block). The settings reference now separates the bootstrap file (dot-notated `fylr.supervisor.db.*` keys) from the runtime settings, grouped and strictly one key per row with explicit defaults.

see #76257

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…de scope notes (fylr 6.35)

see #79583

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…e scope notes (fylr 6.35)

see #79583

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…sh (fylr 6.35)

/eas/produce and /eas/download format enums gain heic (and the download enum the missing webp); the "format unchanged" description documents the fallback to the recipe's default output format for extensions that can be read but not written (e.g. jfif).

see #80418

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…resh (fylr 6.35)

The /schema/user/HEAD and /schema/commit 400 descriptions and the DatamodelError TypeChangeUnsupported bullet now document that type changes are validated against the committed datamodel regardless of data — the save applies the same checks as the commit, uncommitted columns can still take any type.

see #80049

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…nder

The spec assets are re-rendered below from fylr main (6.35); the
file-worker page keeps this branch's 6.35 produce-options bullet.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… the triggering client's address (fylr 6.35.0)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
see #80431
…s (fylr 6.35)

The section still told readers to secure an open management API by PUTting basic_auth_user/basic_auth_pass. That pair is retired: the API and UI authenticate against management users in the control DB, always, and the first boot seeds root/admin with a forced password change.

New page "Management access" covering the first login, the three credential paths (session cookie, API token, basic auth as the transition path), user administration, TOTP, tokens, the abuse-shield coupling and the locked-out procedure. The quick start, the installation page, the settings reference and the API page follow, and the API page gains the /login, /session, /users and /tokens endpoints.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
see #76257
…rings, ISO form, years, B.C., ranges (fylr 6.35.0)

see #79873

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…(fylr 6.35.0)

A failed automatic update now retries every 10 seconds under every policy and cleans up after itself (the broken download and the superseded zip are removed); the installed version keeps running untouched. New timestamps table for the General tab: Updated At moves only when the stored plugin content changed — a settings-only save (Active, update policy) no longer touches it; Last Checked At counts completed checks only. The Daily policy wording follows the implementation (once a day, not every 24 hours).

Surgical spec refresh: the PluginManageApi created_at/updated_at/last_checked_at descriptions.

see #80400

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The manifest reference did not mention the new server-level plugin.dependencies key: named dependencies gate install/enable (PluginDependencyNotInstalled, PluginDependencyNotEnabled), protect depended-on plugins from disable/delete (PluginRequiredByOthers) and order the frontend bundles. A hint marks the webfrontend-level dependencies list as still honoured but deprecated.

see #80102

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
martinrode and others added 30 commits August 27, 2026 17:21
…and views that live in the URL

Three additions for 6.35.0, each marked with the version so readers on older
instances know it is not theirs yet.

Certificates for a host are issued when an instance takes it, not in front of
whoever opens it first; on-demand issuance stays as the fallback.

A web-only host's instance page offers its /webOnly entry alone — a root
session inside an instance nobody goes there to use was the wrong offer.

The instance list's filters, sort and page, an instance's open tab and a log's
source, level and day are query parameters now, so a reload keeps the view and
the address bar is a link to it.

see #76257

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…6.35.0)

fylr 6.35.0 renders EPS and AI with ghostscript and decides from these counts whether such a file gets an SVG version at all, so the field is documented in the technical metadata table and in both mirrored openapi specs.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A new page under Configuration: what unknown and deprecated keys are, the
startup warnings, the Config Problems table on /inspect/config, and
"fylr config check" for validating a configuration without starting a server —
including its exit code, which is what makes it usable in a pipeline that
renders a configuration.

fylr.example.yml.md is regenerated from the corrected example config: the
duplicate marketplace block is merged into one, the plugin default is
documented under update_policy (the key "update" never existed), the deprecated
debug.disableHttp2Client is no longer set, the oauth2 internalURL lost its
trailing slash, and licenseFile/license are both commented out since they are
mutually exclusive.
…6.35.0)

Until 6.35.0 the same dead token got three different answers — 400 InvalidToken from /user/session and /oauth2/refresh, 401 UserRequired from everything else, 401 InvalidToken from a plugin callback — so a client checking the status alone did not notice on the session endpoint or on the refresh, and one checking the code did not notice anywhere else. InvalidToken is one error with one status now, and the responses report package ferrors.

The spec gains an InvalidTokenError schema; /user/session and /oauth2/userinfo document 401 instead of 400, and the /user operations' 401 is either UserRequired (no token was presented) or InvalidToken (the token was rejected).

The OAuth2 page explains the split under "Using the Access Token", including what a client that must work against 6.34 and 6.35 should key on.

see #80899

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A location that failed to connect used to stay in "error" for the whole life of the instance, so the Status column was effectively a verdict from startup. It is the live state now: fylr retries an unreachable location every 5 to 30 seconds and logs the recovery, and a location whose storage arrives moments after fylr does turns "connected" on its own.

The page said only that fylr "tests the connection and displays the result". A "Connection status" section now says what the states mean, where else they are shown (/inspect/system/locations/), and what changed in 6.35.0.

Both OpenAPI assets get the same fact through a surgical splice of the LocationApi `status` and `status_msg` descriptions, matching the apidocs source in fylr (bb046a5f0) — no full re-render.

see #80906

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ints edit

Main had moved 44 commits ahead (Drupal plugin page, disk-to-url migration,
the S3 connection-count page, the produce-plugin page, the 6.34.2/.3/.4 release
pages, GitBook change requests). Merging now keeps the release-time merge of
v6.35 into main small.

Three files conflicted, all resolved with the v6.35 side:

* Both OpenAPI assets — v6.35 carries the fresh 6.35 render plus every
  surgical splice made on the branch; main's were re-synced from a patched
  6.34.2 render. Checked what that resolution would drop: main's session-binding
  edit (df95a3c) is already in the 6.35 render in newer wording (it also covers
  the share-link `?login` exception), so nothing was lost there, but main's
  skip_constraints rewording (1a6509e, v6.34.3) was genuinely missing — its
  asset hunks are applied on top of the resolution, matching the apidocs source
  in fylr (`resources/apidocs/endpoints/event/event.yml`). Both specs re-parse.

* `for-developers/changes-easydb5-fylr.md` — both branches carry the rewritten
  page; they differ in one sentence, where v6.35 corrects the claim that fylr is
  an OpenID Connect provider. That correction describes 6.35 and stays on the
  branch until release.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
… one instance

Two management-API rules from the 6.35.0 review, documented where the pages already describe the surface they belong to.

Replacing an armed TOTP now asks for the password and a current code, because the fresh secret is stored unarmed: an enrollment somebody starts and abandons used to leave the account with no second factor at all, which is the opposite of what opening that dialog is for.

A host is claimed once across the fleet. Create and restore always refused a duplicate; editing an instance did not, and two instances answering for the same name leave the router picking between them per request.

Both ship with 6.35.0 and land on gitbook main with this branch. The whole supervisor section is new in 6.35.0, so neither rule is version-marked inside it.

see #76257

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…6.35.0)

GET /user/<id> delivers the same compiled group list as GET /user/session in
6.35.0 — system groups implied by the user's type first, then the groups
assigned in the database, then the groups that claim the user through an
_auth_method_group_maps.system rule. UserApi._groups and SessionApi.groups
document that order, and the one difference between them: the session list is
compiled against the request, so a group with an _ip_subnet_filter only shows
up there when the caller's IP matches, while the user record lists it either
way.

AutomaticAuthApi is re-documented for what it actually is: the marker on a
group inside a user's group list saying the membership was not assigned by
hand. Its type tells the kinds apart — implicit (follows from the user's
type), system (a group rule claims the user), ldap / sso (mapped from the
identity provider at login) — and the implicit and system entries are ignored
on write. GroupApi._automatic_auth says it is never set on a group read from
/api/v1/group.

Both spec assets are spliced from a fylr main render; nothing else changed.

see #80393

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
From 6.35.0 a callback never receives the token its caller presented, so
the "already unbound tokens are passed through" half of the note is gone
and the revocation applies to every callback token.

see #80923
Both inlined config pages carry the new fylr.trustProxyHeaders setting, regenerated mechanically from fylr.example.yml and internal/global/fylr.default.yml and verified to round-trip back to their sources.

The multiple-fylrs page gets the note where it is actually needed: that setup puts Apache in front of containers listening on 127.0.0.1, which is exactly the shape that has to turn the setting on. It is version-marked, because a reader on 6.34 has nothing to set.

Nothing here says what the behaviour was before — the page describes what to configure, not what used to happen.

see #80926

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
fylr.example.yml.md is regenerated from the source file and round-trips back to it. It now carries the fylr.trustProxyHeaders key itself: cf2f380 brought over the block explaining the setting, but the source had only the comment and no key line, so the page explained a setting a reader could not find a line for. Fixed in fylr 42a9be38bc, which is also where the rest of this comes from.

The other additions are settings that had never appeared on the page at all: the whole fylr.twoFactor section, a storage location's read_only, the s3 pathstyle — which defaults to true in fylr, the opposite of what a reader who knows AWS would assume — the file backend's remote_url_prefix, the two debug knobs twoFactorTestCodes and fileQueueStaleAfterSec, and a commented fylr.supervisor block saying why db is the only supervisor key in fylr.yml. None of them are new in 6.35; they were simply undocumented, which is why nothing here is version-marked.

The 2FA tutorial already told the reader that wrong codes are limited to three attempts. It now names where that number and the code's lifetime are set, because both live in fylr.yml rather than in the base configuration the rest of that page walks through.

fylr.default.yml.md is unchanged and still round-trips: the default file did not change.

see #80926

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The 6.35 execserver is described in three places already — the protocol on the
Exec server page, the design in the slot broker white paper, the settings under
performance tuning — but none of them says what to DO with an existing
installation. This adds that page, next to "Scaling the execserver": upgrade
both sides in one window, run "fylr config check" and act on the four settings
it names (tokenResponseSendServerIP is unknown now, parallelHigh deprecated,
parallel only meaningful as 0, the callback URLs no longer supply a host),
choose auto-balancing or complete an existing waitgroups block, configure a
tempDir so the learned profile survives a restart, and move a Kubernetes
deployment from per-pod addressing to /readyz + /healthz + a grace period above
drainTimeoutSec. Every log line and message quoted is the one the server emits.

The pages that end in this decision now link to it: the Exec server page, the
scaling page, performance tuning, and the "Token not found" article whose
solutions still name tokenResponseSendServerIP.

Two corrections along the way: an explicit waitgroups block does NOT require a
waitgroup on every service — a service naming none lands on a shared "auto"
pool with a warning, it is not rejected — and the learned profile only survives
a restart when a tempDir is configured. The /inspect system page gains the
topology subpage, which was missing from its table.
…oks for it

The topology page had one line in the /inspect system table and a paragraph on
the developer Exec server page — so "the fleet topology page reports it" in the
6.35 update article pointed at a page that did not describe it. It gets a
section of its own now: what it shows, and the three questions it answers for an
installation with more than one moving part — every execserver connected, a
balanced address reaching the whole fleet, and callbacks that come back to the
process that created the job.

Both references in the update article link the section directly.
Taken from the local broker-topology harness (bin/topology.sh): three fylr
servers, two of them on a shared database, reaching two execservers through one
round-robin balancer — the shape the section describes, with real production
running through it, so the counters, the fleet graph and the in-flight/done
lists all carry actual numbers rather than zeros.
Whether a file or a rendition carries an alpha channel was not answerable from the technical metadata: the channel count is a TIFF tag and the colour space names only the colour channels. The key is present only when the image has the channel, so an opaque image carries no key rather than a false one.

Surgical addition to both OpenAPI assets and to the shared field table, marked with the version it ships in.

see #80719
fylr restore --file-api-access-token is gone: the backup asks the source to sign its file urls for a horizon of its own (fylr backup --file-url-expire-days, 365 days), and packs the bytes of the files that are session gated rather than signed. Documents the new backup parameter and the restore's refusal of a backup whose urls expired, replaces the inspect form's Access Token field with File URL Validity, and refreshes the file_url_expire parameter in both specs.

see #79762

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…m the interim svg

see #80719

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ventory

The page was a hand-kept list of every programmfabrik repo carrying a plugin
manifest, last generated in June. It had drifted far enough to contradict the
rest of the section: it still offered easydb-barcode-display-pdf-plugin and
easydb-connector-plugin, pointed at repositories that have since been split,
carried a rename hint that 6.35 reverses again, listed
fylr-plugin-edit-info-updater twice, and had 41 in-page links whose anchors
did not exist. Twenty-five of the catalog's entries were missing entirely.

From 6.35 the list that matters is the marketplace, which fylr pulls from the
published catalog when the shop is opened, so the page now mirrors that
catalog — grouped by the same categories, with the licensed, private,
custom-data-type and dependency facts each entry carries — and says so up
front. Plugins that exist but are not offered in the shop keep a section of
their own; they are linked to their repository rather than to a release URL,
because the README is where the install URL is maintained.

A private repository answers 404 to a reader without access, so those are
named rather than linked.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
… not one click

Six corrections against what migrate_204_205.sql and the plugin manager
actually do.

server-pdf: the page said the upgrade does not touch it. It does — it
switches it off wherever pdf-creator is enabled, because both plugins declare
SERVER_PDF_GENERATE and SERVER_PDF_GENERATE_ERROR and an event name can
belong to only one plugin. Off, not deleted, which matters because it has
left the catalog and cannot be reinstalled from the shop; its html2pdf
endpoint stops answering while it is off.

The ZIP rescue: the browser can only fetch a plugin from a host that sends
CORS headers, so the one-click path covers programmfabrik.github.io and
nothing else. A GitHub release download cannot be fetched from a browser at
all and falls back to a manual dialog. The state is called "not installed",
not "not installable", and converting to zip drops the source URL and pins
the update policy to never.

The removal list said a plugin loaded from a path you added yourself is
removed "like the rest", contradicting the page's own earlier promise and the
code: the migration matches the docker install prefix, and the fylr.yml sync
only deletes rows whose path is gone. Only three of the eight listed plugins
were still shipped in 6.34; the rest can only arrive from an older fylr or an
easydb5 migration, and are now in a table of their own.

Also new: a converted plugin is held off until its release has been
downloaded; a binary installation is not converted at all, because its
plugins never sat under the docker prefix; the successor may already be
installed, in which case the old row is dropped rather than renamed; and
Scancode Display needs PDF Creator, which is worth knowing before the masks
have been rewritten to its splitter.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The section named programmfabrik.github.io alone. An instance also has to
reach docs.google.com, which is where the marketplace catalog is read from —
without it the shop reports itself unavailable while installed plugins carry
on — and github.com plus *.githubusercontent.com, because a
releases/latest/download URL redirects and allowing github.com alone is not
enough.

The update policy table used labels the plugin manager does not show. The
dropdown offers "automatic (daily)", "always (development)" and "never"; a
zip plugin has no policy at all, its dropdown is disabled.

The 6.34 note about the three CMS connectors now says the part that costs a
customer an upgrade window: all three are licensed plugins, so the license
has to grant them before they can be enabled.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…as renamed

formula-columns claimed to ship with every release. It was never in the
distribution's plugin.paths and it is not in the marketplace either — it is
installed from its own release, so the page now says that and gives the URL.

The connector page still called the plugin easydb-connector-plugin, including
the base config section to open; it is fylr-plugin-connector from 6.35, and
the migration moves the settings across with the rename. The wordpress page
told the reader to pick a plugin of type "disk". Zooniverse has no fylr
successor and is not in the marketplace: it is installed by URL, and an
easydb5 instance still carrying it on disk loses it at the upgrade.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The introduction still opened with "fylr must be told to load a plugin in
fylr.yml". From 6.35 that is the developer's path only — a finished plugin is
installed in the plugin manager, and plugin.paths is for the directory you
build into.

Two facts the packaging pages were missing, both of which break a release
quietly: the asset has to be named after the repository, because the
marketplace catalog builds the install URL from the repository name and
fylr-build-plugin takes no override; and the README next to manifest.yml is
what the plugin manager and the shop now display, so it has to read without
the repository around it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…gone

The plugin manager and its per-plugin pages were a top-level section of their
own, so an administrator looking for plugins found three separate entries in
the navigation. They now sit under Plugins, next to the overview and the
migration page; only the navigation moves, every page keeps its URL.

plugins.md was in no navigation and nothing linked to it — a duplicate of
plugins/README.md, which is now the section's index.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…atalog

The page is no longer a repository inventory, so the next person to update it
needs to know where its content comes from and which rows do not belong in it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…tall server-pdf

The overview opened with "The list that counts is in your instance", which
says nothing and sounds pleased with itself. It now states what the page is
(a copy of the catalog, so it can be behind), what to use instead in a running
instance, and that plugins outside the marketplace are listed further down.
The page also never pointed at the developer documentation, which is the
obvious next question for anyone reading a list of what exists.

Three pages outside the plugin section still told the reader to install
`server-pdf`, which PDF Creator has not needed since 1.1.0 and which 6.35
switches off:

- the PDF Creator tutorial made installing it step 1 and said to enable both,
  which is exactly the duplicate-event configuration that breaks;
- the Windows installation page called it the reason to install Chrome and
  claimed fylr does not package it, while the Windows fylr.yml installed it;
- from-source named it in the apt comment for chromium.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…screen

"Plugin Manager" is the right name for the page — it documents that screen,
and renaming it would break the match with the UI the reader is looking at.
What was wrong is that six per-plugin pages hung underneath it, which have
nothing to do with the screen, while TYPO3 and PDF Creator sat in Tutorials,
away from their own siblings Drupal and WordPress.

The eight now sit together under a new "Individual plugins" index, which
answers the question the old arrangement provoked — why only these? — on the
page rather than leaving the reader to guess: every other plugin documents
itself in its README, which the plugin manager and the marketplace display
since 6.35. Nesting only; no page changed its URL.

The overview's second half was whatever the old hand-kept page happened to
list. It is now the rest of the fylr-plugin-* repositories that ship a plugin,
which the page says, and which turned up five that were missing:
core-mapping, custom-data-type-vis, slack-notification, example-licensed and
fylr-plugin-zooniverse-import. That last one also corrects this page's own
claim and the migration page's: Zooniverse does have a fylr successor.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…shape

Ticket #79771 asks for a reference an author can build a plugin from. Three of
its items were unanswered and three of the answers on these pages had been
overtaken by fylr-build-plugin:

- the manifest was described as a rendered `manifest.master.yml`. There is no
  master/generated split any more; `manifest.yml` ships verbatim, and the
  example plugin has no master file at all.
- the release workflow was documented as triggering on a pushed tag, with a
  hand-written `zip` target. A release is cut by publishing it on the GitHub
  release page, and the Makefile is a shim over `go run fylr-build-plugin`.
- "how must public repos be deployed to GitHub Pages" had no answer because
  the premise is wrong: public repositories attach the zip to the release, and
  Pages exists for private ones, whose release assets fylr cannot fetch.

The l10n CSV structure was documented nowhere: it is a Google Sheets export
committed as it comes, and fylr's loader reads only the `key` column and the
`xx-XX` language columns — the `fil` and `R` columns are sheet bookkeeping.
The localization page now points here for it.

Both pages hand the build mechanics to the tool's README rather than copying
them, which is what let this drift in the first place, and keep what fylr
enforces on the finished plugin.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Putting the per-plugin pages under an "Individual plugins" node pushed the
four Formula Columns examples to a fifth level, and that whole subtree stopped
rendering — the Formula Columns page and its examples answered 404 in the
preview while every sibling was fine. main never nests deeper than four
levels, which is why nothing had shown this before.

The examples now hang off Formula Columns directly. Their index page keeps its
URL and stays linked from the Formula Columns text; it is only out of the
sidebar.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Dropping it to flatten the tree left a page listed nowhere, and the Formula
Columns page itself stopped rendering with it. It sits beside the examples
now, which keeps the deepest branch at the four levels GitBook renders.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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