-
Notifications
You must be signed in to change notification settings - Fork 0
Modern Core and Publishing
Implementation-time record, September 4, 2026, for the 0.9.0-rc.1 candidate. The observations and checksums below describe the build before release preparation; see the release record for publication status and the downloadable artifact.
Fleet now requires WordPress 7.1+ and PHP 8.3+. Plugin metadata, README, static analysis and CI agree on that baseline. WordPress's download page listed 7.1 during this review and recommends PHP 8.3+. CI smoke/build jobs cover PHP 8.3 and 8.5; a configured CI job is not evidence that hosted CI has run. WordPress download and requirements
The latest OpenStation trunk was checked with git ls-remote and still pointed to 9bac9176b26a6228e3e57c9a7c8f11f586063afd. Fleet uses its experimental App Framework directly. There is no classic-admin Fleet fallback and no OpenStation source change or PR. See Framework integration for the feature-by-feature audit and deliberate non-uses.
The integration uses Core Application Passwords, REST discovery and capabilities, _fields, bounded pagination, supported Core batching, Site Health, Abilities discovery/environment information, and block-theme resource APIs. This update adds Core revisions, post-type schemas and wp_text_diff() rather than equivalent custom services. PHP's native array_is_list() replaces the old list helper. Obsolete Core function-existence guards were removed; required-extension checks and safe stored-data migrations remain. Feature discovery still matters on modern sites because plugins and hosting can restrict APIs. Abilities API, REST handbook, Core diff renderer
| Finding | Implemented behavior |
|---|---|
| Closing a dirty window lost source | Dirty state is keyed to the actual .os-window, not a nested tab panel. Cancel preserves source; each site window has an independent guard. |
| Failed health checks erased findings | Last-known findings survive failed/partial checks. Valid partial results update individually; failed checks are marked stale. Attempt time and complete-success time are separate. |
| Timezone reported a false success | Read/write Core's timezone REST field and verify the returned value. Named zones and fixed offsets are resolved from the managed site. |
| Malformed scheduling input threw | Strict ISO date validation rejects malformed/control-character and impossible dates with WP_Error before writing. |
The original evidence remains in Bug hunt. Integration also uncovered a local compare-and-swap mismatch: normalization added new defaults before comparing against a stored record. Saves now compare the original stored value and merge normalized fields, so adding views or health fields does not silently prevent persistence. Smoke coverage also protects custom types named posts or pages from colliding with Fleet's built-in collection aliases.
Publishing, scheduling, and edits to already public/scheduled content require a destination/status/time/change review. A ten-minute HMAC binds the exact editor values to the hub user, site, connection generation and operation. Changed or expired values require another review. Confirmation fetches the current remote fields and checks the edit fingerprint before submitting the normal Core update.
Revision history reads twelve records per page; selecting one fetches its supported source fields and verifies its parent. Use this revision loads title/content/excerpt into the editor, marks it dirty and leaves status/date/slug unchanged. It does not write until the user saves. Existing unsaved text must be explicitly discarded before opening history. Core revisions
This is not durable autosave, a visual block editor, an atomic remote lock, or whole-site rollback. There remains a race between Core's last read and write; no custom endpoint was added to eliminate it. Long diffs are explicitly shortened, with full source retained in the editor.
Save up to twelve named content filters per user/site: type, status, search and date period. The same name replaces that view; apply resets pagination; remove changes no remote content. Views survive reopening and credential repair, are included in privacy export, and disappear with their owning connection. The week filter uses the managed site's timezone and week start. Comment-based and cross-fleet saved views remain proposals.
Types are discovered from Core with the connected account's capabilities. Viewable types with title/editor support appear in Content. Custom controllers must expose compatible writable fields through OPTIONS; routes come from server-side discovery, never submitted browser URLs. Unsupported/private/internal types and attachment editing are not broadened by discovery. Namespaced routes and restricted types have live fixture coverage. This is not complete WooCommerce or arbitrary plugin administration. Core post types
Testing uses the disposable Cedar Street Studio hub and Harbor Arts Journal/Center sites on WordPress 7.1, HTTP PHP 8.3.33 and CLI PHP 8.5.10. Temporary write-test content, users and views are cleaned up; the opt-in custom-type MU fixture is inert outside its test. Credentials remain encrypted and browser cookies remain in memory. No new endpoint is installed on a managed site by Fleet.
The expanded suite covers all four regressions plus publishing consent, modified/expired/cross-site review rejection, revision recovery, saved-view persistence/isolation, custom type discovery, partial health recovery, same-item conflicts and two dirty windows. This is not another 30-site load run or public-host certification; Launch checklist still applies.
Final verification on the installed ZIP:
- 28 tests passed in 1.7 minutes, no failures or skips. Scoped axe WCAG A/AA checks passed for the hub, managed window and publishing review.
-
composer quality: WordPress coding standards, compatibility checks and static analysis passed. Build smoke tests, incremental search tests and JavaScript syntax checks passed. - Two clean builds produced SHA-256
8dcbf6ec51fa74350e3f05a0c9f01c8ac6da3a9901091aa20249288d2a3e49d4. All 16 installed runtime files matched that ZIP byte-for-byte. Tests, screenshots, fixtures and development dependencies are not shipped inside it. - Cleanup found the original two connections, zero temporary test users, zero temporary views, zero temporary publishing items, the original fixed-offset timezone setting, and the custom-type fixture disabled. The screenshot subject remained a draft and did not contain the proposed replacement source.
- Ten captures completed with fetched CSS/JavaScript hashes matching the working tree. Native review/Explorer captures and the complete thumbnail sheet were inspected. README screenshots and wiki links were checked.
- No commit, push, GitHub release, OpenStation modification or public deployment was performed in this follow-up.
README captures are real runtime screenshots. The new review image never confirms a write; proposed source is discarded after capture. Asset hashes are checked against the working tree. See Publishing visual review.