# CRM AppRelease `0.10.0`

This immutable CRM AppRelease closes the metadata schema required by the
proof-bearing record-view attachment capability introduced in `0.9.0`.
`ContentDistribution.ContentVersionId` is now part of the same L1 metadata
bundle as the resolver that reads it. All seven capabilities published by
`0.9.0` are preserved unchanged.

- App: `io.nexuscrm.sfcrm`
- semantic version: `0.10.0`
- AppReleaseDigest:
  `sha256:07f8da04f64fb97bb37e18b3f10abeb136f59fd44eeba2af5bb2414ee36e8ee3`
- MetadataBundleDigest:
  `sha256:b4283f50b273bf4c415952deacad46b26dac48841851de1daaca139650bda46c`
- component count: `62`, exactly one per component in the source
  `salesforce-crm-standard/pack.json`
- source input revision: `cd77e07daf44d328337d14575b6a88103814fc07`

The AppManifest declares exactly seven L1 service-handler capabilities:

- `io.nexuscrm.sfcrm.query.v1` requires `runtime.records.query.v1`;
- `io.nexuscrm.sfcrm.record-mutation.v1` requires
  `runtime.records.mutate.v1`;
- `io.nexuscrm.sfcrm.recycle-bin-read.v1` requires
  `runtime.records.list-recycle-bin.v1`;
- `io.nexuscrm.sfcrm.related-list-counts.v1` requires
  `runtime.records.related-counts.v1`;
- `io.nexuscrm.sfcrm.ui.record-access.v1` requires
  `runtime.records.evaluate-access.v1`;
- `io.nexuscrm.sfcrm.ui.record-view-attachments.v1` requires
  `runtime.records.resolve-attachment-sources.v1`;
- `io.nexuscrm.sfcrm.ui.record-view-read.v1` requires
  `runtime.records.read-record-view.v1`.

The release builder rejects future attachment-capable releases whose resolver
source object or source fields are absent from their object schema. Historical
`0.9.0` remains byte-identical and rebuildable, but is not the source-closed
release used for D2A activation.

`app-package.json` is canonical and reproducible from the exact source inputs.
`publisher-attestation.json` binds the release tuple and exact source
provenance. `publisher-public-key.json` is verification material, not publisher
trust; Catalog's independent trust authority must approve that exact key before
import. The AppRelease contains no service image identity.

This artifact does not select an active AppInstallation, publish an AppService
image, switch Gateway traffic, or create a fallback. Those ownership changes
remain explicit L2 activation gates.

Rebuild and verify:

```bash
git worktree add /tmp/nexuscrm-app-packs-0.10.0-source \
  cd77e07daf44d328337d14575b6a88103814fc07
cd tools/crm-app-release
GOWORK=off go test ./... -count=1
GOWORK=off go run . build \
  --pack-root /tmp/nexuscrm-app-packs-0.10.0-source/salesforce-crm-standard \
  --output /tmp/crm-app-package-0.10.0.json
cmp /tmp/crm-app-package-0.10.0.json \
  ../../releases/io.nexuscrm.sfcrm/0.10.0/app-package.json
GOWORK=off go run . verify \
  --package ../../releases/io.nexuscrm.sfcrm/0.10.0/app-package.json \
  --attestation ../../releases/io.nexuscrm.sfcrm/0.10.0/publisher-attestation.json \
  --public-key ../../releases/io.nexuscrm.sfcrm/0.10.0/publisher-public-key.json
```
