zentraproperty feedv1.0.0-rc.3

platform · proposed implementation

Pinned inclusion, reversible by design.

The platform consumes an immutable release of this contract and introduces a distinct feed type without changing existing import behaviour.

Selected inclusion mechanism

Publish a private GitHub release containing the schema, catalogues, examples, CLI and `SHA256SUMS`. Platform CI downloads the exact semantic tag with a read-only fine-grained token, verifies checksums, and vendors it under a release-specific immutable directory. The active contract pointer changes only during platform release activation.

private tagverified artifactcanonical DTOstaged importactivate

Platform change set

  • Register feed type and admin label independently.
  • Store credentials through existing secret configuration, never the contract repo.
  • Fetch to disk with bounded streaming and immutable run fingerprint.
  • Run XSD and semantic validation before persistence.
  • Map into a versioned canonical import DTO, not a new `Property` conditional branch.
  • Add provider/feed + listing ID unique constraint and idempotent upserts.
  • Queue images only after snapshot validation; deduplicate by stable ID/checksum.
  • Apply missing-listing thresholds, first-run protection and operator-visible reports.
  • Add retries, backoff, memory/time limits, metrics, structured logs and Sentry context.
  • Cover happy path, malformed feeds, stale IDs, hierarchy errors, large feeds and rollback in PHPUnit.

Rollback

  1. Disable scheduling

    Stop new `zentra_xml_v1` runs without disabling other feed types.

  2. Restore pointer

    Point the platform manifest back to the prior verified contract artifact.

  3. Revert importer release

    Activate the previous application release; migrations remain additive until confidence is established.

  4. Preserve evidence

    Retain failed run reports and fingerprints, but never raw customer XML in public logs.

  5. Reconcile safely

    No missing-listing archive runs during rollback; resume only after a validated complete snapshot.