---
id: LSN-0010
ticket: packer-docs-import
title: Asset identity and runtime contract legacy lesson
created: 2026-03-26
tags:
  - packer
  - legacy-import
  - asset-identity
  - runtime-contract
---

## Context

Legacy import from `docs/packer/learn/mental-model-asset-identity-and-runtime-contract.md`.

This lesson preserves the distinction between stable artifact identity and logical naming.

## Key Decisions

### `asset_id` and `asset_name` are intentionally different

**What:** `asset_id` is the stable artifact identity used for runtime-facing stability and preload integrity, while `asset_name` remains a logical, human-facing, code-facing reference.
**Why:** Using only `asset_name` makes rename behave like identity breakage, while using only `asset_id` everywhere today makes source-level ergonomics worse. The architecture intentionally keeps both.
**Trade-offs:** Carrying both values increases conceptual surface area, but it avoids forcing authoring ergonomics and stable runtime identity into one compromised field.

## Patterns and Algorithms

- Use `asset_id` when the question is stable artifact identity.
- Use `asset_name` when the question is authoring/reference ergonomics.
- Keep both values visible in runtime-facing asset tables.

## Pitfalls

- Treating rename as identity change.
- Treating name-only references as stable preload/bootstrap identity.
- Forcing code-facing APIs into raw integer identity too early.

## Takeaways

- Stable identity and logical naming solve different problems.
- Runtime artifact correctness should prefer `asset_id`; human-facing and source-facing flows may still use `asset_name`.
- Legacy source attribution: `docs/packer/learn/mental-model-asset-identity-and-runtime-contract.md`.
