The describeResources() plugin contract at packages/core/src/lexicon.ts:199-203 receives:
describeResources?(options: {
environment: string;
buildOutput: string;
entityNames: string[];
}): Promise<Record<string, ResourceMetadata>>
It gets entity names but not entity props. AWS uses CloudFormation logical IDs which happen to match chant entity names, so state diff --live can map declared ↔ observed. Temporal can't: the user declares new TemporalNamespace({ name: "prod" }) (entity export name ns, server-side name prod) and the plugin needs the props to know which server resource maps to which entity.
Because of this gap, the Temporal describeResources() (#27) emits server-side identifiers as keys (namespace/prod, searchAttribute/prod/Project, schedule/prod/daily-report). state diff --live then reports those as orphan (vs. the chant declared set) instead of mapping them back. Honest output but not the full round-trip.
This is the limit on every future lexicon's describeResources() implementation that doesn't have a CloudFormation-style logical ID embedded in the deployed resource.
Tasks
Done when
The
describeResources()plugin contract atpackages/core/src/lexicon.ts:199-203receives:It gets entity names but not entity props. AWS uses CloudFormation logical IDs which happen to match chant entity names, so
state diff --livecan map declared ↔ observed. Temporal can't: the user declaresnew TemporalNamespace({ name: "prod" })(entity export namens, server-side nameprod) and the plugin needs the props to know which server resource maps to which entity.Because of this gap, the Temporal
describeResources()(#27) emits server-side identifiers as keys (namespace/prod,searchAttribute/prod/Project,schedule/prod/daily-report).state diff --livethen reports those asorphan(vs. the chant declared set) instead of mapping them back. Honest output but not the full round-trip.This is the limit on every future lexicon's
describeResources()implementation that doesn't have a CloudFormation-style logical ID embedded in the deployed resource.Tasks
describeResources()options to includeentities: Map<string, { entityType: string; props: Record<string, unknown> }>(or similar — could be the actualBuildResult.entitiesslice for this lexicon)packages/core/src/state/snapshot.ts:118(takeSnapshot()) to pass entity props throughlexicons/aws/src/plugin.ts:474+to use the new option (no behavior change since AWS already maps via CFN logical IDs, but consume the new arg for forward-compat)lexicons/temporal/src/describe-resources.tsto use entity props for name mapping: e.g. for each chantTemporalNamespaceentity, look up its declarednameprop and map the discovered server-side namespace back to the chant entity name as the result keynswithname: "prod"→ result keyns, notnamespace/prod)Done when
state diff --liveagainst a Temporal-backed env with declarednsreports the entity by chant name, not bynamespace/prodserver-side prefix