# Issue-tracker conformance fixture

This directory is the current test-only non-CRM conformance fixture for
NexusCRM serviceification. It is not a production App, AppService, route,
frontend requirement, service image, or deployment unit.

The fixture proves that an external L1-shaped consumer can use the existing
public in-process neutral record contract and the immutable neutral Runtime
record-access vectors to:

- read the `Issue` root record by identifier;
- explicitly select and deterministically order root fields;
- preserve supported typed values and distinguish explicit null from an absent
  (including FLS-omitted) field; and
- observe missing, forbidden, and canceled point-read outcomes without using
  Salesforce object names, envelopes, error codes, or response grammar; and
- consume one coarse access-evaluation operation covering CRUD, RLS/sharing,
  approval and metadata locks, generic delete blocking, mixed object
  resolution, omission, duplicates, stable ordering, cancellation, and
  deadline outcomes; and
- consume the bounded neutral record-query capability with a typed unsigned
  predicate. The public CRM text-query lowering cannot produce that carrier,
  so this is executable evidence that the L0 seam is not merely a CRM wire
  format with neutral names; and
- expose a CI-only managed issue-workflow Adapter through the public
  Plan/Mutate/Project lifecycle contract. The Adapter owns a compound binary
  project/workflow target, unordered keyed status and transition projection,
  exact owner-set reconciliation, a read-only owner guard outside its write
  set, and one fixture-local effect requirement.

It does not prove a production second App, multi-App deployment, a production
record-access route owner, AppInstallation authorization, performance SLO,
route cutover, or deployment. The fixture defines no protobuf or wire DTO; it
injects the public neutral semantic operations. The real Runtime
process/transport proof remains in NexusCRM CI.

The managed Adapter is deliberately only the provider half of the deep
module. Transaction ownership, permanent target-row preparation and first
claim, structured-store enforcement, effect execution, evidence, retry, and
fresh post-commit classification remain owned by the generic controlplane host
and are composed in CI after its released pin is available.

## Golden behavior matrix

| Fixture condition | Stable outcome | Projection |
|---|---|---|
| readable Issue | `ok` | only selected, readable root fields, sorted by field name |
| explicit null | `ok` | selected field is present with `Null=true` |
| absent or FLS-hidden field | `ok` | selected field is omitted |
| missing Issue | `missing` | no fields |
| RLS-denied Issue | `missing` | identical to a missing Issue |
| object Read denied | `forbidden` | no fields |
| canceled context | `canceled` | no fields |

The typed carrier probes cover string, boolean, integer, decimal, date,
datetime, and reference-ID root values supported by the neutral `Record` map.
They are conformance data, not product metadata. Lookup expansion is excluded:
a reference value remains only its root ID.

## Sealed packaging boundary

`tests/conformance/issue-tracker/` is the only issue-tracker path retained in
this repository. There is no pack manifest, dialect module, frontend package,
route, command, image, distribution entry, install option, or deployment input.
The boundary tests reject those shapes, scan all fixture subpackages and test
dependencies, and reject production sources or release controls that depend on
the fixture.

NexusCRM keeps a reviewed byte-identical snapshot of the fixture sources and
point-read golden matrix. Its SHA-256 manifest is verified before CI runs the
consumers through the real `ContractService -> PersistenceService` paths. The
record-access matrix itself remains owned once by `nexuscrm-contract`; the
fixture decodes it instead of copying another golden. The provenance revision
does not make this repository path a release input.

This fixture must never be promoted into a real Issue Tracker product. A real
second App requires independently authored product evidence and a separate
decision; it cannot reuse this fixture as an AppRelease or AppInstallation.

Run with this repository checked out beside the NexusCRM `shared` source. The
managed lifecycle contract resolves from the published private
`nexuscrm-contract v0.2.4` module pin, so authenticated private-module access is
required and no local contract replacement is used:

```bash
GOWORK=off go test ./...
```

This repository's hosted CI runs the filesystem/package boundary guard without
cross-repository credentials. NexusCRM CI owns the checksummed Go snapshot and
the real-adapter conformance run because the L0 source tree and private contract
dependency already belong to that composition.
