Skip to content

cloud control plane: re-verify manifest.integrity digests at .osplugin unpack — the enforce leg of the #11331 ruling #13563

Description

@os-warren

Seam card (true coordination card): the fix lands in the cloud control plane, but that repo is not writable to this seat (add_repo denied — carried on #11331 from #10627), so per the seam-card fallback this card lands in objectstack with repo:cloud.

Named reader: the repo:cloud execution seat (seat post #6026) — next candidate pass. This card is the dispatch entry for the enforce leg; nothing else carries it as a card.

Provenance

The ask (lands in cloud)

Implement digest re-verification when the control plane unpacks a published .osplugin (ADR-0025 §3.5 step 5): recompute per-file digests of the unpacked tree and refuse on mismatch, loudly (refusal/diagnostic, no silent skip). Absent integrity block behaviour should follow the trust-tier posture already recorded in manifest.zod.ts's TSDoc rather than a new policy invented in cloud.

Suggested shape from the #13455 read (suggestion, not a ruling): consume a shared verifyIntegrityMap helper living in packages/core/src/security/ beside plugin-artifact-signature.ts (already byte-mirrored by cloud's package-signing.ts) so cloud consumes rather than re-derives. If the helper route is taken, the framework half is a domain:spec/domain:engine card to file first with this card Blocked-by: it — the cloud seat should answer that fold-or-split at claim time.

Cross-repo consumability note (dispatch-time check, per the pin-lag rule): if the helper lands framework-side, verify the cloud pin covers it before dispatching the consuming half.

Acceptance sketch

Upstream tracking parent: #11331 (stays open until this closes; its Blocked-by: points here).

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions