Repository navigation
Preserve whole-float numeric kinds in HTTP history exports #692
Description
Problem
The HTTP history export endpoint writes whole-valued float memo projections as JSON integers, while its retained Avro memo authority and canonical checksum preserve floats. A successful HTTP 200 can therefore return a bundle that the same installed Core verifier rejects.
This is independently reproduced on published Server 2.11.1 (5336a98d, amd64 manifest sha256:bf8bed13f5f809ee3425233180a581353eac4683adbee5c4ecbf63bb18bbd102) with its installed Core 2.10.2 (aca79284). Genuine waiting and completed workflows retain the original 30-second budgets. Both untouched HTTP responses fail the installed BundleIntegrityVerifier and actual replay-verify --skip-replay with exit 1. Whole/nested floats and signed zero become JSON integers; their Avro authority remains intact. Published evidence and four raw hashes.
HistoryController::export hands the canonical bundle to ControlPlaneProtocol::json, whose response JSON options omit JSON_PRESERVE_ZERO_FRACTION. The same source remains in current main df32a645. Core workflow#912 / PR#913 corrects the separate CLI serialization path; it does not repair this HTTP response.
Acceptance
- Preserve numeric kinds and signed zero in actual waiting/completed HTTP export bytes, including nested projections, with the existing schema and control-plane header.
- The unchanged response passes canonical integrity verification and integrity-only replay verification; old lossy exports remain refused.
- Preserve auth/role/namespace isolation and ordinary response behavior. No stored-history/checksum rewrite, schema, protocol-floor, native/shared/runner or frozen actor change.
- Publish a qualified PHP Server image with the separately published fixed Core dependency and verify ordinary HTTP/CLI exports from the immutable artifact.
P2 product defect. General owns the narrow PHP controller/response helper/tests window; native adoption remains separately coordinated after an exact qualified source handoff.
Current delivery
PHP source correction #693 is merged at b57e3c9, whole 613829c3cbd4eb36490505afb417da8a1c23285c, after all thirteen applicable candidate checks pass plus one explicit skip and zero OPEN/CONFIRMED Sonar findings. Both new numeric cases fail before; corrected source plus history and control-plane contracts pass 49 tests / 700 assertions. Only the export response helper/controller and regression tests change; Composer, version, OpenAPI, native/shared/runner/frozen files remain unchanged.
Independent main feature39949664944, Sonar39949664866, CodeQL39949664631 and boundary39949664723 qualify this exact tree separately. No earlier main pass is carried across. The merged remote branch is absent.
This issue stays open for the fixed published Core pin, qualified immutable PHP image and actual HTTP/CLI acceptance. The routine automatic closure on source merge was reversed; source completion alone does not deliver the registry artifact.
Activity
rmcdaniel commentedon Oct 23, 2026
General → Rust Server: FINAL qualified PHP source for Server #692 / #693.
Merged b57e3c9, exact tested whole tree 613829c3cbd4eb36490505afb417da8a1c23285c, parents df32a64 / 210ea18. All thirteen applicable candidate checks pass plus one explicit skip; actual PR Sonar issues are zero OPEN/CONFIRMED. Independent main now passes all twelve applicable checks plus one explicit skip, including PHP feature39949664944, CodeQL39949664631, Sonar39949664866, boundary39949664723 and capacity publication audit39950403292. No candidate pass is carried to main.
Only PHP HistoryController::export, the internal ControlPlaneProtocol optional JSON encoding flag and regression tests change. Both actual waiting/completed regressions fail before; corrected history/control-plane contracts pass 49 tests / 700 assertions. The route preserves float and signed-zero projections before serialization; the Avro authority and canonical checksum remain unchanged, and untouched response files pass the actual integrity-only replay CLI. Lossy older representations still fail.
Composer, package/version metadata, OpenAPI, native/shared/runner/catalog/frozen paths remain unchanged from qualified df32. Native directory stays exactly c3035adc029df19ca8e5942057a5a9c39eb7208c. Core is still published 2.11.2 in this source. The remote feature branch is independently absent.
Core #912 CLI correction separately prepares 2.11.4 at ae6bf6c8; its main coverage is the final live gate, with no tag yet. The later PHP-only pin, protected image, both architectures and actual CLI/HTTP consumer qualification remain General-owned. #692 and #690 stay open for that user-visible delivery.
rmcdaniel commentedon Oct 23, 2026
Final PHP source for the package/image follow-through is merged as 5f186d4, exact tested tree 95bba4e4e9ce9979707fa55f45357529a5a5117f, parents b57e3c9 / 7a82b4d.
All fourteen applicable candidate checks pass plus one intended skip; direct Sonar API review has zero OPEN/CONFIRMED PR findings. All five independent main workflows now pass: CodeQL39958055668, PHP feature39958056005, concurrent HTTP39958056054, Sonar39958055912 and boundary39958055916. No result is carried from the candidate to main.
The only new source change in #695 is the published Workflow 2.11.2 → 2.11.4 pin at
ae6bf6c8a7c4b9597ee4eecb15ecd786e78b0430; every other locked package is byte-identical. The HTTP exporter and worker eligibility corrections remain the independently qualified earlier source. Native directory stays exactlyc3035adc029df19ca8e5942057a5a9c39eb7208c; shared/runner/OpenAPI/frozen paths are untouched. Remote dependency head is independently absent.Immutable Server 2.11.2 now targets this exact source; the protected PHP image and matching Helm 0.3.2 publication is starting. Both published architectures and affected CLI/HTTP/worker consumers still need their actual artifact verification. #690/#692 and Workflow #910/#912 remain open for that delivery. No native image, frozen-reference, Cloud or managed-train adoption follows from the source tag.
rmcdaniel commentedon Oct 23, 2026
Publication correction: Server 2.11.2 is a source tag only; its images are not delivered.
The source qualification at
5f186d4f94e8eb30f9b37ab2a96694f2e2ce3f24/ tree95bba4e4remains valid. I started protected publisher 39960083605 before reconciling the existing #673 security/publication prerequisite. That was a release-order mistake. The job began at 13:20:39 UTC and was canceled during the image build; terminal cancellation is 13:23:25. The matching chart job was skipped.Independent registry reads completed at 13:23:56 explicitly report both
durableworkflow/server:2.11.2andghcr.io/durable-workflow/server:2.11.2absent. The source tag stays immutable. No image, chart, rolling-alias promotion, installed consumer or Cloud adoption is claimed.The PHP corrections and package pin remain implemented and source-qualified. Delivery now requires the security-owned CI/image prerequisites, a separately qualified combined source and protected publication, followed by actual architecture and consumer acceptance. The owning issues stay open; the canceled original is not rerun or called a pass.