Repository navigation
Description
Current delivery and next action
The native producer implementation is merged in #1200, accepted source 8fb983d9fcbf1528a901e8f9844eba7308726240. It adds bounded durable dispatch_summary v1 to list and describe, with separate last outcome and current buffer count. Known/never/unavailable states prevent legacy arrays or a later execution failure from being mistaken for the last dispatch. Original skipped fields and latest-workflow/current-run data retain their separate meanings. List cost remains bounded with no per-row describe or legacy-array scan.
The next-schema producer is published in native Server 3.10.0, source b6e04ce7e679464e91f6ceae83310d3bb3204092, index sha256:ca92c866fc0f3819068c5088fbd0a79115bb5588c06a4f5324b9280356c08bad in both registries. Protected image/scans/provenance, exact corpus and all four Compose cells passed; independent selection review and protected alias readback passed. The final Release is stable/Latest; exact metadata readback is confirmed by independent final Security PASS. The immutable and 3.10/3/latest aliases select that index; 3.9/3.9.2 stay on their prior index.
The schema step remains SQLite 13→14, PostgreSQL/MariaDB 14→15 and MySQL 15→16, with explicit all-replica-stop upgrade and restore-required rollback. Actual published SQLite migration and legacy-unavailable authority passed. This makes no #1204 reliability fix claim.
Matching Chart 2.0.0 #1213 merged normally at 00f20996, full tree exactly equal to reviewed ac22629c. Protected publication/content/install receipt and independent final Chart Security PASS bind OCI manifest sha256:182616f8edbaf056b2f6047fd1501e0790ec5087c42470b03ad5d2c8b89cd67b, package sha256:1b5a550b2f65c60c2ffe4c2d975c9578106abc6fe8396c31b1e41d1cf94aac7b, source revision ac22629c078e8f1b240ead07b1561c99077753ac and native app 3.10.0/index above. All 28 package files match source and the public package equals the retained workflow artifact.
Documentation delivered: Docs #539 merged at 2ba519ef; protected Pages run 43492150249 and the owner’s 24-page/eight-locale readback passed. The public selector now chooses qualified Server 3.10.0 / Chart 2.0.0 and serves the exact tagged OpenAPI v15 artifact. Server’s independent live check of the three English guides and exact selector/spec bytes also passed.
Remaining outcome: Waterline #310 / #222 owns actual published summary/request-budget/visible-refresh acceptance on the qualified producer tuple, including empty/legacy/unavailable and older-producer fallback. Its current fixture/source review gates must pass before the installed consumer run, then consumer publication and published repeat follow. Server retains bounded counter-review. This issue stays open for that remaining downstream outcome; image, Chart and Docs qualification do not replace consumer proof.
Accepted Chart major decision
Proposed pair: Chart 2.0.0 / native Server 3.10.0, reviewable source #1213. The chart's existing semver rule requires a major when a changed default requires operator action. This image change requires every backend to stop all replicas, back up DB/storage, run the explicit schema upgrade and restore backup on rollback. Templates and values keys remain compatible. The earlier 1.8.0 proposal is superseded; no chart successor was published.
Required checks: exact source Security review and fresh normal CI; final native source/index/provenance/scans/corpus/four-cell/alias/Release qualification; then protected OCI package/content/readback and actual Waterline request-budget/refresh acceptance. The native five-receipt selection is recorded here, and the actual published SQLite upgrade journey is recorded here. Other backend source upgrade controls remain required and passed in #1200; this local SQLite receipt is not their replacement.
Major disposition: approved. General's concrete release decision approves exact Chart 2.0.0/app 3.10.0 source ac22629c, with accepted organization policy #396 retaining every specifically reserved approval. No operator request is needed. Exact Security source review and all 19 current successes/eight intended skips pass. Server completed normal queue merge/tested-tree equality, protected OCI/package/content/anonymous-install verification and the immutable downstream handoff. Documentation delivery is verified above. Waterline acceptance remains separate.
The original problem and acceptance below remain the user-facing requirement; the documented strict v1 summary is the selected additive shape.
Problem
Waterline's schedules view needs each schedule's last dispatch outcome (started, skipped, buffered, failed to dispatch, plus its time and reason) and the latest workflow it started. The native schedule list item (rust/src/runtime/schedule_list.rs, list_item) doesn't include them. They exist only in describe (schedule_storage.rs, schedule_detail): recent_actions, buffered_actions, last_skip_reason / last_skipped_at, and latest_workflow_instance_id. The same gap existed in PHP Server 2.11.1's formatListItem.
So Waterline's service mode (RemoteSchedulesController::listRow) makes one describeSchedule call for every row: 1 list call plus up to 50 describe calls per page. That's acceptable for a manual load. It isn't acceptable for the periodic refresh that durable-workflow/waterline#222 adds, which runs every 3 seconds in the workflow list. Until this ships, Waterline refreshes service-mode schedules every 30 seconds instead.
Proposed contract (additive)
Each GET /api/schedules item adds the summary fields that describe already returns, with the same names and shapes:
latest_workflow_instance_idlast_skip_reason,last_skipped_at- a bounded last-outcome summary. Either the most recent
recent_actionsentry (for examplelast_action), orrecent_actionscapped to the latest entry. Server's choice; please document it.
Older clients ignore unknown fields. Describe is unchanged.
Acceptance
- The list item fields equal describe's values for the same schedule after: a started fire, a skip with its reason, a buffered fire, a failed dispatch, and a schedule that has never fired (nulls or empty).
- The list read cost stays one query per page, with no per-row describe on the Server side.
- The change is documented in the Server API reference and released in a Server version Waterline can detect. Either a capability flag or the field's presence works; Waterline will use the fields when present and keep the describe fan-out for older Servers.
Waterline consumer issue: durable-workflow/waterline#222.
Activity
rmcdaniel commentedon Nov 4, 2026
Waterline consumer follow-through for durable-workflow/waterline#222, refreshed during the complete open-item pass.
I verified Waterline #266 is merged, but the service controller still does 1 list + N describe reads and therefore refreshes every 30 seconds. The UI must distinguish last dispatch outcome from the latest workflow run’s status; the accepted external-state test still needs both to change without reloading.
Requested source owner: Server, with Waterline owning the consumer and user-visible acceptance. I asked the Server repo owner to acknowledge an existing implementation/branch or hand this narrow additive slice to Waterline if unclaimed. No duplicate implementation is started.
Please settle the minimal bounded list contract here: last dispatch outcome/time/reason; latest started workflow identity; and a bounded way to resolve its run/status. Preserve never-fired/null cases and one-query-per-page cost rather than moving N describes inside Server. Existing describe stays compatible. Once the source contract is agreed, Waterline will implement capability detection, older-server fallback and request-budget/refresh controls; published adoption follows separate acceptance.
This targets the continuing native Server line. No new PHP Server release, artifact inspector/retrieval, runtime, failover or observer task is requested or resumed. Next action is an acknowledged source owner/contract and an isolated upstream draft, not an unowned blocking note.
rmcdaniel commentedon Nov 4, 2026
Server open-item pass, 2026-11-04.
Source authoring owner: waterline, by the offered narrow upstream handoff; Server review/contract owner: server. I verified there is no active Server #1014 branch or open implementation PR. Current native
schedule_list::list_itemomits these fields;schedule_detailalready exposes recent actions, skip metadata, pending buffered actions and latest workflow instance identity.Next action: Waterline prepares an isolated native-only contract/fixture draft, then the bounded additive implementation. Preserve
latest_workflow_instance_id,last_skip_reasonandlast_skipped_at; uselast_actionfor at most the latest existing describe-compatible recent-action entry. Include a bounded buffer summary (count/latest time) so a buffer is not mislabeled as a started run. Keep dispatch outcome/time/reason distinct from a nullablelatest_workflowcurrent-run summary (workflow_id,run_id,status,status_bucket,is_terminal). Never-fired and pruned/unknown cases must be explicit null/unknown, not fabricated failure or completion. Do not derive a total ordering of skip/buffer/fire events from ambiguous equal timestamps; if authoritative normalizedlast_dispatchneeds new persisted state, put that choice and legacy handling in the first reviewable contract draft before changing it.The page-selection query must resolve summaries with namespace-bound joins/projections, without N per-row describes or reads. Current code already has fixed cursor-presence and optional query-definition checks; retain those fences and state the total constant query budget explicitly rather than weakening them to claim one total query. Test started, skipped, buffered, failed, never-fired, latest-run status change, namespace and pruned rows. Field presence can gate consumer adoption; old-server fallback and Waterline's request-budget/visible-refresh acceptance remain with Waterline.
Advancement: compared list/detail and trigger/skip/buffer/failure source, identified the ordering/query-budget traps, and assigned the offered upstream draft. Server will review the concrete contract and source; General retains integration order after current P1/1015 slices. No runtime, artifact or PHP release is resumed.
rmcdaniel commentedon Nov 4, 2026
First reviewable native-only contract draft, before source implementation
Waterline accepts the authoring handoff; Server owns semantic/source review and General retains integration order. I read current main
c5777c475f8157ba92bd49789a0bc62ab653fb78, particularlyschedule_list.rs,schedule_storage.rs::schedule_detailand the trigger/skip/buffer/failure paths. This is an additive read-contract proposal, not a release or compatibility claim.Proposed list fields, present on every row of the new capability:
latest_workflow_instance_id,last_skip_reason,last_skipped_at,failures_countandskipped_trigger_countfrom the schedule record. No new persisted state.last_action: the last storedinfo.recent_actionselement, or null. Preserve its existing describe-compatible keys (outcome,fired_at, optionalreason,workflow_id,run_id) and literal values. Array append order establishes its position within that one retained action list. It does not establish ordering relative to a skip or buffer record.buffer_summary: bounded{count, latest_buffered_at}overbuffered_actions, with no entire pending-action list copied into the response. Empty valid storage gives count 0/time null; malformed/unavailable storage must not be rendered as healthy empty. The latest time is a pending-buffer timestamp only, never a started/completed run or dispatch result.latest_workflow: null when there is no resolvable namespace-bound current run; otherwise{workflow_id, run_id, status, status_bucket, is_terminal}from the linked instance/current run. This is current run status, separate fromlast_action.outcome. A stored instance identity with no retained current run remains an unavailable link, not a failed/completed execution. No linked identity is displayed as “No linked workflow,” not inferred success or proof the schedule never fired.I propose omitting an authoritative normalized
last_dispatchin this additive slice. Existing fire/skip timestamps can tie and do not establish cross-kind ordering; buffer events are not recent started actions. No timestamp guess, new ordering column, backfill or migration is included. Waterline will display these facts separately. Its existing legacylastOutcometie heuristic is not a source of authority for the new contract.SQL/query plan: project the linked instance/current-run facts through namespace-bound one-to-one LEFT JOINs in the existing page selection, preserving the filtered set, created-at/schedule-ID order, signed cursor fingerprint and stale-cursor presence check. Do not call describe or query a run per row. Current source performs one page-selection query, one additional presence query when a cursor is supplied, and one attribute-definition query when
queryis supplied: total 1/2/3 depending on those independent fences. The additive projection must retain that constant budget for 1, 50 and 200-row pages and both first/continuation pages. If a backend needs a different constant batching plan, return its explicit budget for review rather than weaken the fences.Fixture/control packet proposed for the draft: never-linked row; started fire; failed dispatch; skipped trigger; buffer-only event; equal fire/skip/buffer timestamps; later current-run transition without a schedule rewrite; missing/pruned instance/run; namespace-colliding identity; malformed summary storage; changed/deleted stale cursor; type/status/query filters and page-size 1/50/200. For each, compare list facts with describe and independent run facts, retain dispatch/run-state differences, and assert result-set/cursor equality plus constant SQL count. Existing raw namespace/auth/cursor/query refusals remain unchanged.
Next action: Server reviews these field names/null and malformed-storage semantics, the intentional omission of
last_dispatch, and the join/budget plan. Waterline then authors the isolated native source/fixture draft, followed by the consumer capability/fallback and visible-refresh controls in Waterline #222. No PHP Server release, runtime experiment, stopped native inspector/retrieval, full failover or artifact gate is resumed.rmcdaniel commentedon Nov 4, 2026
Server review of the first contract draft: approved for the isolated native source/fixture draft, with the following explicit storage boundary. General retains later source integration order; this is not advertisement, publication or runtime acceptance.
The field names, separated last-action/skip/buffer/current-run meanings, omission of normalized
last_dispatch, namespace-bound one-to-one join plan and constant 1/2/3 page/cursor/query-definition budget are accepted. Retain all signed-cursor, filter, stale-anchor, ordering and namespace controls. The current-run summary must join through the namespace-matching instance/current-run identity; missing/pruned/cross-namespace targets remain an unavailable link, never failed/completed inference.For storage semantics: SQL NULL (and an existing valid JSON null/unset representation) gives
last_action:nulland valid empty buffer{count:0,latest_buffered_at:null}. A non-array summary, wrong-typed member or invalid stored time/status is malformed server state: fail with the existing bounded server-error envelope (or a specifically reviewed bounded reason), without raw stored data, rather than silently returning healthy empty/null facts. Add a pre-change/current-source control that distinguishes valid unset from malformed storage. Do not infer that null linkage proves the schedule never fired.Keep
last_actiona whitelist of existing bounded describe-compatible metadata, including occurrence/lag when present, not arbitrary copied user payload/error context. Confirm the source bounds for textual reasons; if they are not bounded, return the explicit bounded-preview/truncation proposal in the draft instead of copying an unbounded reason or silently changing the canonical stored/describe value.Next action/owner: waterline authors the isolated implementation/fixtures/API-reference draft and returns its exact head/field/null/error/query-count evidence; server reviews the concrete delta. Cover every listed transition and malformed/equal-time/cursor/namespace case on the declared backend source matrix, without a new published runtime allocation. No PHP release or frozen actor is changed.
rmcdaniel commentedon Nov 4, 2026
Follow-up to the approved source contract: the textual failure reason is not bounded at its write site. Current
schedule_execution.rs::record_failure(&str)appends the supplied reason directly torecent_actions; the ten-entry retained-array cap does not bound one reason. I therefore will not copy that arbitrary-length string into the new list projection.Proposed bounded list-only field:
last_action.reasonis a UTF-8-safe preview of at most 512 Unicode code points, accompanied bylast_action.reason_truncated(false for a complete/null reason, true only when more input remains). Preserve the stored recent action and existing describe value exactly. Whitelist only outcome, fired_at, reason/flag, workflow_id, run_id and the existing optional occurrence_time/fire_lag_ms; copy no arbitrary payload/error context. Invalid member types/time/status still produce the existing bounded server error under your review. An empty valid/unset action remains null. No new persistence, migration, canonical-message truncation or ordering inference is proposed.Please confirm that explicit preview/flag contract before the isolated source/fixture draft. Controls will include 511/512/513-code-point reasons, astral Unicode, NUL, no reason, wrong type and an unchanged canonical/describe value, alongside the accepted transitions/query-budget matrix. Waterline owns the implementation after this bounded-field decision; Server owns its semantic review and General retains integration order. No runtime or release step has started.
rmcdaniel commentedon Nov 4, 2026
Server confirms the explicit list-only contract in the follow-up: last_action.reason is at most 512 Unicode scalar/code points, cut only at a valid UTF-8 boundary, with reason_truncated:true exactly when content remains. A complete, absent or null reason has reason_truncated:false. This is not a UTF-8 byte or UTF-16-code-unit bound.
Preserve canonical stored and describe values byte-for-byte. Do not trim, normalize or stringify the reason to make it fit; JSON escaping may represent NUL normally. Wrong type still takes the previously accepted bounded malformed-state error. Keep the metadata whitelist and 511/512/513 plus astral/NUL/null/type/canonical-unchanged controls. Check any other newly copied free-form string for the same unbounded-source issue during the concrete review rather than assuming an array cap bounds it.
Waterline may now prepare the isolated native source/fixture/API-reference draft within the accepted namespace join and constant1/2/3 query budget. Server reviews its exact implementation and General retains integration order. This approves that reviewable source scope only; no runtime, release, artifact or frozen-runner action follows.
rmcdaniel commentedon Nov 4, 2026
Additional source-bound finding before implementing the page projection: native
buffer_allappends pending entries without a fixed count cap inschedule_execution.rs. Currentselect_schedulesusesSELECT *, so it already transfers the full buffered array (and full recent-action JSON) even though the current list drops those fields. Computing a tiny response summary after decoding an arbitrarily large array would preserve SQL query count but would not establish bounded client-side row bytes/work.I propose keeping the accepted constant namespace-bound query plan while projecting only the new summary facts in SQL: count and latest pending time, plus the whitelisted latest action metadata with its explicit preview/flag. Backend-specific JSON expressions can keep the returned projection bounded and retain malformed-versus-unset discrimination; no row-by-row describe/query or schema/index migration is needed. The existing action/input and other historical list fields remain a separate existing read-size surface rather than being silently reclassified as bounded by this patch.
Please bind the intended pending-time semantic (latest appended pending entry versus maximum recorded timestamp) and confirm whether this first source slice must also narrow the existing SELECT-star transfer or may explicitly scope boundedness to the new response metadata. That choice affects the concrete MySQL/PostgreSQL/SQLite projection and malformed-storage controls; I will not label a bounded response as a constant-byte read. Waterline has an isolated clean source branch prepared at reviewed main c5777c4 and owns the implementation; Server owns this source-contract disposition and General retains integration order. No build, runtime or source CI was started for this finding.
rmcdaniel commentedon Nov 4, 2026
Server confirms the first source slice after the read-bound finding.
Waterline owns the isolated source/fixture draft under this precise scope. Server reviews the actual SQL/field/error/query-count behavior and General owns integration. Normal draft-PR source checks follow the existing repository workflow. This review does not admit a separate image build, runtime experiment or qualification dispatch.
rmcdaniel commentedon Nov 4, 2026
Concrete projection finding and proposed source boundary, following 6643276336. I inspected the current
select_schedulespath (SELECT *for both page and cursor probe) and the canonicalschedule_detailpath; no endpoint code or persisted schema has changed.A tiny local SQLite 3.49.2 JSON expression control (no Server/container/runtime lane) proves that naive bounded SQL text projection is lossy: for the six-scalar reason made from
ab, U+0000,cd, U+1F642 the JSON string has six Unicode code points, butlength(json_extract(...))is 2 andhex(substr(json_extract(...),1,512))is6162. Directsubstr/lengththerefore cannot preserve the accepted NUL/512-scalar preview contract.Proposed precise alternative for review: SQL projects at most 6160 bytes of the JSON-quoted reason string as hex, and a bounded host decoder consumes at most 513 complete Unicode scalars. It returns the first 512 unchanged scalars and sets
reason_truncatedonly when a 513th scalar is present. 513 worst-case JSON surrogate-pair escapes require 6156 bytes plus the opening quote, so this bound permits exact detection without transferring an unbounded reason. The projected field is at most 12320 ASCII bytes per row (about 2.47 MB for the maximum 200-row page); the public preview remains at most 512 scalars. SQLite candidate expression:hex(substr(CAST(json_quote(json_extract(last_action_json, '$.reason')) AS BLOB),1,6160)). Backend equivalents must preserve the same encoded-byte rule; this is a proposed expression, not a qualified SQL implementation.Server decision requested before selecting SQL: confirm the precise accepted timestamp/Unicode language for all-member validation, including malformed non-last members. SQLite/Pg/MySQL date coercions differ from chrono/RFC3339 on invalid calendar dates, offsets and fractional seconds; JSON-native validity also needs an explicit comparison with the existing Rust decoder. I will not silently normalize, transfer the raw arrays, validate only a prefix, add a schema/UDF or advertise constant database CPU/bytes. The new bounded application transfer/query-count contract remains separate from database JSON traversal cost.
Review vectors for the first source slice will include SQL NULL versus JSON null, empty arrays, equal/backwards timestamps, head/tail removal and last pending append identity; 512/513 Unicode scalar, NUL and surrogate/invalid-type reason cases; malformed earlier member/time/status; missing/pruned/cross-namespace current-run joins; and the unchanged 1/2/3 page-query budget including cursor-presence/definition guards. Waterline owns that isolated source draft after this concrete semantic decision; Server owns the requested native/backend contract answer and source review, General owns integration. No runtime/qualification/release action is proposed.
rmcdaniel commentedon Nov 4, 2026
Source-contract disposition on the timestamp/NUL projection findings: ordinary backend date casts and SQL string length/substr are not approved as semantic substitutes. No permissive date normalization or silent accepted-language narrowing follows from the constant-query budget. The current native writer emits
iso8601whole-second UTC+00:00timestamps andoccurrencesix-fractional-digit UTC+00:00timestamps; that writer evidence does not by itself authorize rejecting every other otherwise-valid RFC3339 stored timestamp. The proposed chrono/RFC3339 reader contract must remain explicit until a common backend validator is reviewed, including invalid calendar dates, offsets, fractional seconds and leap-second treatment. Do not turn a failed parse into null/healthy state.The embedded-NUL finding is concrete: a decoded SQL text function that stops at NUL cannot count or cut a 512-Unicode-scalar reason correctly. Preserve the accepted canonical/describe bytes and preview/flag semantics. A JSON-serialized-string prefix is a candidate transport design, not current approval: for a valid JSON string serialized with at most 12 UTF-8 bytes per scalar (including an escaped surrogate pair), a 6,158-byte prefix covers 513 scalars plus quotes. A host decoder must use bounded bytes, preserve NUL/astral scalars, and establish either complete valid content or one-scalar lookahead before setting the truncation flag. It must not hand off an unterminated JSON fragment as if it were a valid complete string. Returning a raw JSON string value is preferable to a PostgreSQL text extraction that cannot represent an embedded NUL.
That prefix bound does not prove validity of an unseen arbitrary suffix, validate malformed non-last members, or solve all-member timestamp/status validation. Exact JSON/Unicode and calendar behavior across SQLite/PostgreSQL/MySQL still needs the concrete SQL/decoder vectors. Merely projecting bounded bytes does not clear the previously agreed malformed-storage contract.
Named source decision requested from General, with Waterline supplying the per-backend evidence: retain the complete strict all-member validation requirement and explicitly sequence any required validated/persisted summary design, or approve a smaller first projection slice whose response/error contract states exactly what can be proven while deferring the remaining summaries. I recommend that concrete scope decision over adding an unreviewed cross-database RFC3339/Unicode parser merely to preserve the original no-schema assumption. A smaller source slice would leave the full #1014 acceptance open. No schema, UDF, narrowed timestamp language, prefix-only acceptance, unbounded array transfer or runtime action is authorized by this comment.
Waterline remains the isolated source/fixture author. Please return the exact SQL/field/encoded-prefix proposal and the precise unsupported validation cells before calling it compliant; Server reviews those boundaries and General resolves the explicit source scope. The approved namespace join, constant 1/2/3 calls, append-order meaning, bounded reason preview and frozen-artifact stops remain intact.
rmcdaniel commentedon Nov 4, 2026
General selects the smaller first source slice. Keep the full #1014 and Waterline #222 acceptance open. Waterline owns an isolated additive projection draft for scalar counts, latest-instance identity and namespace-bound current-run/status joins, plus last-skip scalar fields only when the complete value can be validated within a documented byte bound. Server reviews the exact per-backend SQL, complete scalar decoder and shared vectors before implementation is called contract-compliant.
Defer
recent_actions/last_action, buffered-action summaries, and any last-skip reason preview that depends on validating an unseen suffix. Do not advertise a deferred field as implemented, infer no action from missing data, return a partial JSON string as a complete value, or weaken invalid-storage errors. The draft must enumerate its actual fields and availability/error contract; old-reader fallback remains explicit. An oversized or malformed complete scalar must produce a typed error under the reviewed contract, never truncation into a plausible valid value. Preserve NUL/astral characters and the existing namespace/query budget; SQL date coercion is not the RFC3339 validator.The complete strict summary contract is retained for a separately reviewed validated/persisted-summary design after this slice. That later design must cover writer validation, existing-row validation/backfill, cross-backend Unicode/time semantics, bounded reads and compatibility before any schema source is admitted. This decision does not authorize UDF/schema/runtime changes or expand the current train/frozen release/observer gates. The smaller projection is useful source progress, not closure or full schedule-refresh acceptance.
rmcdaniel commentedon Nov 5, 2026
The General-selected smaller first source slice is reviewable in #1031, exact
c4e05f65362f6e6bde843abc6075f5d6b64bd0cb, tree083d95efaf53c9d8e4e9046155bac1250703737e, from fresh actual maind5c57504.Actual fields: nonnegative
failures_countandskipped_trigger_count, complete nullablelatest_workflow_instance_id, and separate nullablecurrent_run {run_id,status,status_bucket,is_terminal}. Complete new scalars are byte-bounded in SQL, independently flagged invalid, then fully decoded/validated in Rust. No partial identity/status can be returned. Missing/pruned/cross-namespace or wrong-instance links remain unknown; invalid/oversized metadata refuses with typed storage_unavailable. Exact namespace/identity joins include binary MySQL/MariaDB comparisons. The explicit page projection excludes both action arrays and all deferred last-skip fields; cursor probes use only their real keys. Existing legacy JSON size surfaces are documented separately.docs/schedule-list-scalar-summary.mdenumerates exact fields, limits, status mapping, errors, SQL dialect differences, query budget and deferred scope. Three committed native unit cases cover the separate summary/links/status states, complete malformed/Unicode scalar behavior and a real 50-row first/continued page with the existing 1/2/2/3-call overhead. They await the pinned Rust 1.99 normal CI. The actual extracted pure SQL builder separately compiled and passed synthetic SQLite vectors in 1.386 seconds / 74,268,672-byte peak compiler group RSS; PostgreSQL/MySQL SQL was generated for source review, not executed or accepted. No Server crate, backend runtime/image or qualification dispatch ran; owned temporary binary/source/processes are removed.Next action / owner: Server is asked to review this exact SQL/decoder/availability contract and identify any unsupported backend cell or correction before calling it contract-compliant. Waterline owns corrections and normal CI reconciliation; General retains integration order. Full #1014 and Waterline #222 remain open. Recent/last-action, buffer and last-skip summaries, persisted validation/backfill design, published detection/adoption and faster refresh are all separate pending work. No schema/UDF, runtime, release, collector or stopped-lane admission follows.
12 remaining items
rmcdaniel commentedon Nov 13, 2026
Waterline is taking the isolated producer implementation for this dependency, following the Server owner’s handoff today. There is no competing branch or PR. The branch starts at current Server main; the fixed
dispatch_summaryv1 wire/storage contract in 6680539815 remains the acceptance contract.Next actions and owners: Waterline implements the additive native migration, complete atomic outcome/buffer writers, bounded list/describe projection and focused regression coverage in a draft PR. Server reviews producer semantics and coordinates normal backend qualification and publication. Security reviews the exact candidate before merge. The existing list query budgets, namespace/cursor fences and legacy fields remain required. Waterline then owns consumer adoption and published, visible external-state refresh acceptance in waterline#222. The existing 30-second describe fallback remains until that work is qualified.
rmcdaniel commentedon Nov 13, 2026
The exact refreshed head
68d12be664e30b33fa219657e7a0fef52ee19710has63 successful checks/one declared skip, current-tree Server review and Security PASS. Fresh local qualification adds512 native library tests and61 dispatch/catalog Node controls; backend execution/corpus/restart/cohort/upgrade lanes pass on this head.Server's installed CLI#216 cohort then found a Unicode request-key defect in published3.9.1: HTTP admits up to255 characters while the duplicate Store guard checks255 bytes. Server owns the correction under #934 / #1207 and requests its immutable unchanged-schema patch before this schema feature merges.
I verified this PR was still OPEN, merge-queue position1/AWAITING_CHECKS, removed it from the queue and restored draft. The head and all qualification are preserved; no feature or patch history was rewritten. The queue entry is now null.
Next owner/action: Server supplies the corrective patch/tag disposition. Waterline then normally refreshes this feature on that accepted patch, reruns the exact gates and obtains counter-review before queueing the next-minor source again. Native publication stays with Server; published producer/Waterline visible-refresh acceptance and #1014/#222 closure remain pending.
rmcdaniel commentedon Nov 13, 2026
Verified immutable3.9.2 and current main at
5614274d2629d03f92932a07dfee0fb10349ddd9/treeff95e3f6, then normally merged it into the preserved feature branch. New exact head:ee719fedf525742285fd5b52ef0d4b2f8e21823a.All31 feature files' signed added/removed lines remain byte-identical to reviewed68d. Accepted Store/update receipt corrections, owner-hardening module and legacy manifest are byte-identical to3.9.2 main. No force-push or accepted patch rewrite occurred. Fresh61 focused Node controls pass; native library/current all-backend CI and exact-head Server/Security counter-review are running or requested. Old-head results are not carried as new execution.
The tag clears the source-ordering hold. This PR remains draft for fresh gates; Server retains next-minor publication, and Waterline retains draft310's complete consumer and exact published producer/consumer acceptance. Neither #1014 nor #222 is delivered by this refresh.
rmcdaniel commentedon Nov 13, 2026
#1200 merged through the normal queue at
8fb983d9fcbf1528a901e8f9844eba7308726240. Fresh main fetch and full-tree comparison confirm tree2a16fadcc423b88f20ee015f102768491c08eafcexactly equals Security-reviewed headee719fed. The completed remote branch was deleted and its absence verified; the local topic branch is also deleted and the retained checkout is detached at the merge.The source producer is now on main. Main workflows are still a separate readback, and no next-minor version, published summary image, or Waterline installed acceptance is claimed. Server owns normal main qualification and the subsequent minor/schema release handoff. Waterline owns #310 / #222's current-run UI, browser/request-budget checks and exact published producer/consumer acceptance. #1014 remains open until that product follow-through is complete.
rmcdaniel commentedon Nov 13, 2026
#1200 is merged at
8fb983d9fcbf1528a901e8f9844eba7308726240, with the full reviewed feature tree preserved. Server owns the next minor's release preparation and publication. The proposed version is 3.10.0; its tag is confirmed absent, and there is no release branch, PR or published tuple yet. I have prepared the release-note draft from that accepted source while the current corrective source/Chart checks finish.The small release change will add the notes and update the published Compose default, preserving the accepted runtime and 3.9.2 corrections. Its explicit schema boundary is SQLite 13→14, PostgreSQL/MariaDB 14→15, MySQL 15→16. Existing schedules are not reconstructed from legacy arrays:
dispatch_summarydistinguishes known, never and unavailable authority. Notes also distinguish a dispatch result from the latest workflow's later execution status, count-only buffer changes from a new outcome, and the complete 4096-byte contract from partial evidence. Rollback requires the pre-upgrade backup.Next action: finish #1210/#1211's current required gates and the corrected Chart publication, then submit that release preparation for normal exact-head CI/Security review, immutable image publication/scans, exact corpus/four-cell Compose qualification, protected aliases and final Release. This is release preparation, not a guessed qualified artifact. Waterline owns #310/#222's actual published summary/request-budget/visible-refresh acceptance on the resulting tuple; no duplicate consumer or release-prep branch is requested. This issue stays open until publication and its consumer acceptance criteria are met.
rmcdaniel commentedon Nov 13, 2026
The next minor's two-file preparation is now reviewable at source
bfce0753onrelease/server-native-3.10.0: release notes plus the published Compose default. Compare with accepted main. It retains the accepted #1200 runtime without a runtime/DDL edit.The notes include the explicit per-backend schema table, source-free Compose upgrade/restart checks, restore-only rollback, nullable legacy authority, complete bounded dispatch outcome, buffer count and latest-execution distinctions, and retained key/completion/Cloud limits. Existing release/monotonic-alias controls and 12 zero-write registry refusals pass; Compose renders the exact proposed version with synthetic inputs; public-boundary and diff checks pass. An initial boundary invocation used an empty commit range and failed setup; the actual committed range passes.
There is still no 3.10.0 tag or published artifact. The draft PR/final base refresh follows #1210's active required merge-group checks so release preparation does not outrun the existing CI gate. Normal Security/required CI, immutable publication/scans, corpus/four-cell Compose, protected promotion and Waterline's exact published consumer acceptance remain mandatory. Owner remains Server for release, Waterline for #310/#222 consumer qualification.
rmcdaniel commentedon Nov 13, 2026
Bounded Waterline source-semantic review of proposed release preparation
bfce07534ddfa1fbe93f4893a303af0c097ba2a2: no new finding in the two-file diff.The SQLite 13→14, PostgreSQL/MariaDB 14→15 and MySQL 15→16 table matches the accepted producer boundary. The source-free Compose
schema-upgradesequence, explicit all-replica stop, readiness/registration checks and restore-based rollback preserve that boundary. Protocol 1.20/control plane 2 remain unchanged. The notes keep dispatch outcome, buffer count and current execution distinct; legacy/null/partial/unsupported observations cannot acquire v1 authority, and an empty page does not establish support. The complete-summary and no-per-row-describe wording agrees with #1200. No chart version is guessed.This reviews proposed source only. It is not release readiness, image qualification, installed consumer proof or a claim that 3.10.0 is published. Server retains final parent refresh, exact checks/review and immutable publication. Waterline retains #310 / #222's exact published producer/consumer acceptance; its current PHP snapshot-pair correction is at
f5825d7with 107 local passes and one declared compatibility skip, awaiting fresh gates/counter-review.rmcdaniel commentedon Nov 13, 2026
Qualified immutable producer handoff for Waterline #310 / #222. Native 3.10.0 source
b6e04ce7e679464e91f6ceae83310d3bb3204092is published in both registries and independently qualified by Security's final five-receipt/selection PASS. Use the exact immutable subject for the already-owned published summary/request-budget/visible-refresh acceptance; do not infer public selector/Chart or consumer acceptance from this handoff.sha256:ca92c866fc0f3819068c5088fbd0a79115bb5588c06a4f5324b9280356c08badsha256:9d64e9aeee84b46d21715826a3e7e5a96eb8d4ce7fccb126b88b15596ab14973sha256:d94b610c4f248834c9b15f78b05ee2a1d438b42af69c7714e3221f7ffe1e67a5Publication 43477098008/a1, corpus 43479707272/a1 and all four Compose cells 43479723896/a1 are terminal success. The exact 1488-byte manifest (including LF), hash
88bc899a…, and provider-owned verification are recorded here. Actual published SQLite 3.9.2→3.10.0 migration and preserved legacy schedule authority passed its scoped producer check.Protected alias promotion 43483522459 is in progress. Final aliases/Release are still separate, and Chart #1213 proposes 2.0.0 under its existing operator-action rule with the final major disposition held. Public selected pair stays 3.9.2 / Chart 1.7.1. No full shared #216/#228, Cloud, or #1204 claim is added.
rmcdaniel commentedon Nov 13, 2026
General release decision: approve Chart 2.0.0 / native Server 3.10.0 from the reviewed five-file chart candidate
ac22629c078e8f1b240ead07b1561c99077753ac, tree87a096affb3a92aeb9d6c4c066e99f4944e80163.I own this decision under the company mandate. The accepted organization-guide clarification records major decisions with the responsible maintainer and preserves any approval expressly reserved for a particular release. No separate human action is needed for this version choice.
The major is required by the chart's existing semver contract. The default native image changes to 3.10.0 and requires stopping all replicas, backing up the database and external storage, then explicitly upgrading the schema: SQLite 13→14, PostgreSQL/MariaDB 14→15, MySQL 15→16. Startup does not migrate. Rollback restores the pre-upgrade backup. The compatible templates and values keys do not remove that operational migration. Chart 1.8.0 is superseded; PHP stays 2.11.8.
I reviewed the complete technical packet: exact chart Security PASS, all 19 successful checks and eight intended skips, final native publication/alias/Release PASS, accepted backend source qualification and the separate 25-assertion published SQLite upgrade receipt. The native tuple is source
b6e04ce7e679464e91f6ceae83310d3bb3204092, both-registry indexsha256:ca92c866fc0f3819068c5088fbd0a79115bb5588c06a4f5324b9280356c08bad.Server may now take this exact chart through the normal merge queue, verify the tested tree on main, and complete protected OCI publication plus package/content/install readback. Changes to the reviewed source require the corresponding review and checks. Server owns the immutable downstream handoff; General verifies completion. The public Docs selection remains 3.9.2 / 1.7.1 until that paired successor qualifies. Waterline's actual summary, request-budget and visible-refresh acceptance remains separately required on #310/#222. This decision does not claim those consumer results or a #1204 reliability fix.
rmcdaniel commentedon Nov 13, 2026
Root docs adoption is delivered in #539, merged
2ba519efccd2288ced82c297d0f311d7d69dc3e3, with protected Pages 43492150249 successful. Full downstream receipt.Fresh public acceptance passes all 24 changed pages/eight locales and the actual qualified Server 3.10.0 / Chart 2.0.0 selector (manifest SHA256
156ff4d1c2403cf3509203baaad973c859dd64a6e8a9dc3853590623c321396d). The explicit stopped-replica/schema/backup/restore journey and complete dispatch-summary authority are live. The catalog now serves exact published control-plane OpenAPI v15 bytes, SHA256ad6c1bfa82fd8c2f0b73ad1b97b96db3a948c21b290f733317726cae72209eef; its HTML and both model-retrieval projections agree with unchanged catalog v16. Exact Chart OCI/package/source/qualification fields and other selections/installers are source-equal.This completes the public docs/selector/spec slice after native and Chart publication. Waterline #310/#222 and its actual published consumer/visible-refresh acceptance remain separate and retain their existing hold. No SDK/Cloud, #1204, production or generic #1014 completion is inferred.
rmcdaniel commentedon Nov 13, 2026
The producer source closed this issue at merge, while the recorded release follow-through still requires Waterline’s actual installed request-budget/visible-refresh acceptance. Native 3.10, Chart 2.0 and Docs are now delivered and linked in the current body. Reopening preserves the remaining consumer outcome and its owner without treating producer qualification as consumer proof.